[发明专利]一种基于时序逻辑语言MSVL的函数调用方法有效
| 申请号: | 201410531029.2 | 申请日: | 2014-10-10 |
| 公开(公告)号: | CN104281480B | 公开(公告)日: | 2017-06-06 |
| 发明(设计)人: | 段振华;张南;田聪;王小兵;赵亮 | 申请(专利权)人: | 西安电子科技大学 |
| 主分类号: | G06F9/45 | 分类号: | G06F9/45 |
| 代理公司: | 北京科亿知识产权代理事务所(普通合伙)11350 | 代理人: | 汤东凤 |
| 地址: | 710071 陕西省*** | 国省代码: | 陕西;61 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | 本发明公开了一种基于时序逻辑语言MSVL的函数调用方法,首先判断被调用函数的类型是MSVL函数、有返回值的外部函数还是无返回值的外部函数,根据不同的函数类型对被调用函数进行定义或者修改其定义;然后判断函数调用的位置,根据不同的函数调用位置以及相应的被调用函数类型,以不同的方式进行调用。本发明可以在同一程序中以不同的方式对被调用函数进行解释;并且在MSVL程序中可以调用由C语言和Java语言编写的函数,有利于多种不同编程语言程序的集成,有效降低程序开发的难度,提高代码复用率。 | ||
| 搜索关键词: | 一种 基于 时序 逻辑 语言 msvl 函数 调用 方法 | ||
【主权项】:
一种基于时序逻辑语言MSVL的函数调用方法,其特征在于,所述方法包含如下步骤:步骤1,判断被调用函数是否为MSVL函数,如果是,定义该函数;如果不是,判断被调用函数是否为有返回值的外部函数,如果是,则执行步骤2,如果被调用函数为无返回值的外部函数,则执行步骤3;当所述被调用函数为MSVL函数时,根据形式的不同,分四种情况对该函数进行定义:1)有参数有返回值,则定义格式如下:define f(in_type x1,…,in_type xn,out_type y1,…, out_type ym,return_type RV[]){MSVL程序};2)有参数无返回值,则定义格式如下:define f(in_type x1,…,in_type xn,out_type y1,…, out_type ym){MSVL程序};3)无参数有返回值,则定义格式如下:define f(return_type RV[]){MSVL程序};4)无参数无返回值,则定义格式如下:define f(){MSVL程序};定义该函数后,定义一个调用该函数的MSVL程序并执行步骤3;步骤2,修改所述有返回值的外部函数的定义,具体分两种情况进行修改:若所述有返回值的外部函数有参数,即原定义为:return_type f(in_type x1,…,in_type xn,out_type y1,…, out_type ym){C/Java程序};则需做以下两点修改:(1)函数定义的头部改为:void f(in_type x1,…,in_type xn,out_type y1,…,out_type ym,return_type RV[]);(2)函数定义体中的所有“return value”语句被替换为“RV[0]=value”;若所述有返回值的外部函数无参数,即原定义为:return_type f(){C/Java程序};则需做以下两点修改:(1)函数定义的头部改为:void f(return_type RV[])(2)函数定义体中的所有“return value”语句被替换为“RV[0]=value”;有返回值的外部函数定义修改完毕后,定义一个调用该函数的MSVL程序并执行步骤3;步骤3,规定所有在MSVL表达式中出现的函数调用均属黑盒调用,其中用关键字ext修饰的为外部函数的黑盒调用,没有ext修饰的为MSVL函数的黑盒调用;在独立语句中出现的函数调用没有关键字ext修饰的为MSVL函数的白盒调用,有ext修饰的为MSVL或外部函数的黑盒调用,现判断函数调用出现的位置:若函数调用出现在MSVL表达式中且没有关键字ext修饰,即属于MSVL函数的黑盒调用,则执行步骤4;若MSVL表达式中的函数调用有关键字ext修饰,即属于外部函数的黑盒调用,则执行步骤5;若函数调用以独立语句出现且没有关键字ext修饰,即属于MSVL函数的白盒调用,则执行步骤6;若函数调用以独立语句出现且有关键字ext修饰,即属于MSVL函数或外部函数的黑盒调用,则执行步骤7;步骤4,求出被调用的MSVL函数实参列表中所有实参变量在调用程序当前状态下的值,并对定义该函数的MSVL程序初始化,同时保存原调用程序的执行环境,此时,若定义函数的MSVL程序为简单结构,执行步骤8,若定义函数的MSVL程序为复杂结构,则该程序进行递归结构变换,即对程序进行等价变换,将其转换为一个简单结构程序,然后执行步骤8;步骤5,求出被调用的外部函数实参列表中所有实参变量在调用程序当前状态下的值,然后将这些参数值传递给C或Java函数执行,函数返回值作为外部函数在MSVL表达式中的值;步骤6,求出被调用的MSVL函数实参列表中所有实参变量在调用程序当前状态下的值,此时,若定义函数的MSVL程序为简单结构,执行步骤9,若定义函数的MSVL程序为复杂结构,则对该程序进行递归结构变换,转换为简单结构,然后执行步骤9;步骤7,若被调用函数为MSVL函数,执行步骤4;若为外部函数,执行步骤5;步骤8,简单结构在当前状态分为当前状态程序集合和下一状态程序集合;本步骤具体包含如下步骤:步骤8.1,在当前状态对简单结构进行一次解释,即执行当前状态程序集合中的语句,执行效果反映在程序变量的更新和程序结构的改变上;然后执行步骤8.2;步骤8.2,判断下一状态程序集合是否为空:如果下一状态程序集合不为空,则将下一状态程序集合作为新的待执行程序,然后改变函数程序的时序状态,从当前时序状态跳转到下一时序状态,此时,若新的待执行程序为简单结构,则返回执行步骤8.1,若新的待执行程序为复杂结构,则对该程序进行递归结构变换,转换为一个简单结构,然后返回执行步骤8.1;如果下一状态程序集合为空,则恢复调用程序的执行环境,然后被调用函数将控制权交还给调用程序,函数调用的计算过程结束,此时被调用函数的返回值已通过变量RV[0]传递给了调用程序,若函数的执行区间长度大于0,则将函数执行的终止状态作为调用程序当前状态的下一状态,并将调用程序从当前状态跳转到下一时序状态,然后调用程序继续执行,若函数的执行区间等于0,即状态函数,则调用程序从当前状态继续执行;步骤9,简单结构在当前状态分为当前状态程序集合和下一状态程序集合;本步骤具体包含如下步骤:步骤9.1,在当前状态对简单结构进行一次解释,即执行当前状态程序集合中的语句,执行效果反映在程序变量的更新和程序结构的改变上,然后执行步骤9.2;步骤9.2,判断下一状态程序集合是否为空:如果下一状态程序集合不为空,则将下一状态程序集合作为新的待执行程序,然后改变函数程序的时序状态,从当前时序状态跳转到下一时序状态,此时,若新的待执行程序为简单结构,则返回执行步骤9.1,若新的待执行程序为复杂结构,则对该程序进行递归结构变换,转换为一个简单结构,然后返回执行步骤9.1;如果下一状态程序集合为空,则恢复调用程序的执行步骤,并把函数调用产生的状态序列统计到调用函数的执行区间,然后被调用函数将控制权交还给调用程序,此时函数调用的计算过程结束,调用程序则从被调用函数执行的结束状态继续执行。
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于西安电子科技大学,未经西安电子科技大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/patent/201410531029.2/,转载请声明来源钻瓜专利网。





