[發(fā)明專利]一種基于時序邏輯語言MSVL的函數(shù)調用方法有效
| 申請?zhí)枺?/td> | 201410531029.2 | 申請日: | 2014-10-10 |
| 公開(公告)號: | CN104281480B | 公開(公告)日: | 2017-06-06 |
| 發(fā)明(設計)人: | 段振華;張南;田聰;王小兵;趙亮 | 申請(專利權)人: | 西安電子科技大學 |
| 主分類號: | G06F9/45 | 分類號: | G06F9/45 |
| 代理公司: | 北京科億知識產權代理事務所(普通合伙)11350 | 代理人: | 湯東鳳 |
| 地址: | 710071 陜西省*** | 國省代碼: | 陜西;61 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 基于 時序 邏輯 語言 msvl 函數(shù) 調用 方法 | ||
1.一種基于時序邏輯語言MSVL的函數(shù)調用方法,其特征在于,所述方法包含如下步驟:
步驟1,判斷被調用函數(shù)是否為MSVL函數(shù),如果是,定義該函數(shù);如果不是,判斷被調用函數(shù)是否為有返回值的外部函數(shù),如果是,則執(zhí)行步驟2,如果被調用函數(shù)為無返回值的外部函數(shù),則執(zhí)行步驟3;
當所述被調用函數(shù)為MSVL函數(shù)時,根據形式的不同,分四種情況對該函數(shù)進行定義:
1)有參數(shù)有返回值,則定義格式如下:
define f(in_type x1,…,in_type xn,out_type y1,…, out_type ym,return_type RV[]){MSVL程序};
2)有參數(shù)無返回值,則定義格式如下:
define f(in_type x1,…,in_type xn,out_type y1,…, out_type ym){MSVL程序};
3)無參數(shù)有返回值,則定義格式如下:
define f(return_type RV[]){MSVL程序};
4)無參數(shù)無返回值,則定義格式如下:
define f(){MSVL程序};
定義該函數(shù)后,定義一個調用該函數(shù)的MSVL程序并執(zhí)行步驟3;
步驟2,修改所述有返回值的外部函數(shù)的定義,具體分兩種情況進行修改:
若所述有返回值的外部函數(shù)有參數(shù),即原定義為:
return_type f(in_type x1,…,in_type xn,out_type y1,…, out_type ym){C/Java程序};
則需做以下兩點修改:
(1)函數(shù)定義的頭部改為:
void f(in_type x1,…,in_type xn,out_type y1,…,out_type ym,return_type RV[]);
(2)函數(shù)定義體中的所有“return value”語句被替換為“RV[0]=value”;
若所述有返回值的外部函數(shù)無參數(shù),即原定義為:
return_type f(){C/Java程序};
則需做以下兩點修改:
(1)函數(shù)定義的頭部改為:void f(return_type RV[])
(2)函數(shù)定義體中的所有“return value”語句被替換為“RV[0]=value”;
有返回值的外部函數(shù)定義修改完畢后,定義一個調用該函數(shù)的MSVL程序并執(zhí)行步驟3;
步驟3,規(guī)定所有在MSVL表達式中出現(xiàn)的函數(shù)調用均屬黑盒調用,其中用關鍵字ext修飾的為外部函數(shù)的黑盒調用,沒有ext修飾的為MSVL函數(shù)的黑盒調用;在獨立語句中出現(xiàn)的函數(shù)調用沒有關鍵字ext修飾的為MSVL函數(shù)的白盒調用,有ext修飾的為MSVL或外部函數(shù)的黑盒調用,現(xiàn)判斷函數(shù)調用出現(xiàn)的位置:
若函數(shù)調用出現(xiàn)在MSVL表達式中且沒有關鍵字ext修飾,即屬于MSVL函數(shù)的黑盒調用,則執(zhí)行步驟4;若MSVL表達式中的函數(shù)調用有關鍵字ext修飾,即屬于外部函數(shù)的黑盒調用,則執(zhí)行步驟5;若函數(shù)調用以獨立語句出現(xiàn)且沒有關鍵字ext修飾,即屬于MSVL函數(shù)的白盒調用,則執(zhí)行步驟6;若函數(shù)調用以獨立語句出現(xiàn)且有關鍵字ext修飾,即屬于MSVL函數(shù)或外部函數(shù)的黑盒調用,則執(zhí)行步驟7;
步驟4,求出被調用的MSVL函數(shù)實參列表中所有實參變量在調用程序當前狀態(tài)下的值,并對定義該函數(shù)的MSVL程序初始化,同時保存原調用程序的執(zhí)行環(huán)境,此時,若定義函數(shù)的MSVL程序為簡單結構,執(zhí)行步驟8,若定義函數(shù)的MSVL程序為復雜結構,則該程序進行遞歸結構變換,即對程序進行等價變換,將其轉換為一個簡單結構程序,然后執(zhí)行步驟8;
步驟5,求出被調用的外部函數(shù)實參列表中所有實參變量在調用程序當前狀態(tài)下的值,然后將這些參數(shù)值傳遞給C或Java函數(shù)執(zhí)行,函數(shù)返回值作為外部函數(shù)在MSVL表達式中的值;
步驟6,求出被調用的MSVL函數(shù)實參列表中所有實參變量在調用程序當前狀態(tài)下的值,此時,若定義函數(shù)的MSVL程序為簡單結構,執(zhí)行步驟9,若定義函數(shù)的MSVL程序為復雜結構,則對該程序進行遞歸結構變換,轉換為簡單結構,然后執(zhí)行步驟9;
步驟7,若被調用函數(shù)為MSVL函數(shù),執(zhí)行步驟4;若為外部函數(shù),執(zhí)行步驟5;
步驟8,簡單結構在當前狀態(tài)分為當前狀態(tài)程序集合和下一狀態(tài)程序集合;本步驟具體包含如下步驟:
步驟8.1,在當前狀態(tài)對簡單結構進行一次解釋,即執(zhí)行當前狀態(tài)程序集合中的語句,執(zhí)行效果反映在程序變量的更新和程序結構的改變上;然后執(zhí)行步驟8.2;
步驟8.2,判斷下一狀態(tài)程序集合是否為空:如果下一狀態(tài)程序集合不為空,則將下一狀態(tài)程序集合作為新的待執(zhí)行程序,然后改變函數(shù)程序的時序狀態(tài),從當前時序狀態(tài)跳轉到下一時序狀態(tài),此時,若新的待執(zhí)行程序為簡單結構,則返回執(zhí)行步驟8.1,若新的待執(zhí)行程序為復雜結構,則對該程序進行遞歸結構變換,轉換為一個簡單結構,然后返回執(zhí)行步驟8.1;如果下一狀態(tài)程序集合為空,則恢復調用程序的執(zhí)行環(huán)境,然后被調用函數(shù)將控制權交還給調用程序,函數(shù)調用的計算過程結束,此時被調用函數(shù)的返回值已通過變量RV[0]傳遞給了調用程序,若函數(shù)的執(zhí)行區(qū)間長度大于0,則將函數(shù)執(zhí)行的終止狀態(tài)作為調用程序當前狀態(tài)的下一狀態(tài),并將調用程序從當前狀態(tài)跳轉到下一時序狀態(tài),然后調用程序繼續(xù)執(zhí)行,若函數(shù)的執(zhí)行區(qū)間等于0,即狀態(tài)函數(shù),則調用程序從當前狀態(tài)繼續(xù)執(zhí)行;
步驟9,簡單結構在當前狀態(tài)分為當前狀態(tài)程序集合和下一狀態(tài)程序集合;本步驟具體包含如下步驟:
步驟9.1,在當前狀態(tài)對簡單結構進行一次解釋,即執(zhí)行當前狀態(tài)程序集合中的語句,執(zhí)行效果反映在程序變量的更新和程序結構的改變上,然后執(zhí)行步驟9.2;
步驟9.2,判斷下一狀態(tài)程序集合是否為空:如果下一狀態(tài)程序集合不為空,則將下一狀態(tài)程序集合作為新的待執(zhí)行程序,然后改變函數(shù)程序的時序狀態(tài),從當前時序狀態(tài)跳轉到下一時序狀態(tài),此時,若新的待執(zhí)行程序為簡單結構,則返回執(zhí)行步驟9.1,若新的待執(zhí)行程序為復雜結構,則對該程序進行遞歸結構變換,轉換為一個簡單結構,然后返回執(zhí)行步驟9.1;如果下一狀態(tài)程序集合為空,則恢復調用程序的執(zhí)行步驟,并把函數(shù)調用產生的狀態(tài)序列統(tǒng)計到調用函數(shù)的執(zhí)行區(qū)間,然后被調用函數(shù)將控制權交還給調用程序,此時函數(shù)調用的計算過程結束,調用程序則從被調用函數(shù)執(zhí)行的結束狀態(tài)繼續(xù)執(zhí)行。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于西安電子科技大學,未經西安電子科技大學許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業(yè)授權和技術合作,請聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201410531029.2/1.html,轉載請聲明來源鉆瓜專利網。





