CN106371887A - 一种msvl语言的编译系统及方法 - Google Patents

一种msvl语言的编译系统及方法 Download PDF

Info

Publication number
CN106371887A
CN106371887A CN201610980621.XA CN201610980621A CN106371887A CN 106371887 A CN106371887 A CN 106371887A CN 201610980621 A CN201610980621 A CN 201610980621A CN 106371887 A CN106371887 A CN 106371887A
Authority
CN
China
Prior art keywords
msvl
program
sentence
language
statement
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201610980621.XA
Other languages
English (en)
Other versions
CN106371887B (zh
Inventor
段振华
杨凯
田聪
张南
时防
时一防
王小兵
黄伯虎
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Xidian University
Original Assignee
Xidian University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Xidian University filed Critical Xidian University
Priority to CN201610980621.XA priority Critical patent/CN106371887B/zh
Publication of CN106371887A publication Critical patent/CN106371887A/zh
Application granted granted Critical
Publication of CN106371887B publication Critical patent/CN106371887B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本发明公开了一种MSVL语言的编译系统及方法,包括:MSVL前端和底层虚拟机后端;MSVL前端包括词法语法分析模块,预处理模块和中间代码生成模块;LLVM后端包括目标代码生成模块;所述MSVL语言的编译方法对MSVL中的简单语句用正则形的方法进行预处理,对复杂语句,分别对每个并发分量进行预处理,并对每个并发分量创建一个线程。本发明很好地解决了现有技术执行MSVL程序效率低,影响了程序验证和执行的效率的问题,提高了MSVL程序的执行和验证效率;根据程序本身复杂程度的不同,其执行速度可提高几十倍乃至上百倍;并且一次编译成功后程序可以反复执行,无需再次编译。

Description

一种MSVL语言的编译系统及方法
技术领域
本发明属于计算机程序设计语言及应用技术领域,尤其涉及一种MSVL语言的编译系统及方法。
背景技术
目前,时序逻辑作为一种系统建模与验证的形式化工具,已广泛应用于软件工程、数字电路设计等领域。时序逻辑主要有三大分支:线性时序逻辑(LTL),分支时序逻辑(CTL)以及基于区间的时序逻辑(ITL和CHOP逻辑)。投影时序逻辑(PTL)是一种新的基于区间的时序逻辑,包括无限模型,过去操作和一个新的投影操作。它适用于描述带有时序区间的软硬件系统,可以处理顺序,并发,投影等结构,具有较强的表达能力。时序逻辑语言MSVL是PTL的一个可执行子集,是一个集建模(Modeling)、仿真(Simulation)和验证(Verification)为一体的时序逻辑程序设计语言。MSVL可以将程序的书写、性质描述和验证统一在时序逻辑的框架中进行,对软硬件系统使用时序逻辑程序设计语言进行建模,对系统期望的性质采用时序逻辑公式来描述,将模型和性质统一在时序逻辑的框架中,从而可以实现对软硬件系统的形式化验证。自上世纪70年代末,许多时序逻辑程序设计语言相继被提出。时序逻辑是一种用于描述和验证实时系统实时性的重要方法,很多基于时序逻辑的编程语言都可以描和证明同一逻辑框架下的程序。Cactus基于分支时间时序逻辑,XYZ/E,THLP,Chronolog,Tempura以及Tokio基于区间时序逻辑,TLA也是一种基于时序逻辑行为的描述语言。和上述形式化语言相比,MSVL在建模验证并行系统等方面具有显著的优势。与传统的命令式语言例如C和JAVA语言相比,MSVL具有建模,仿真和验证三种功能,极大地方便用户对大型程序的检测和应用。因此,实现MSVL语言的编译器具有重要的应用价值。MSVL语言可以用于描述系统的顺序、并发、非确定、非终止、自治、同步通信等行为。因为MSVL包含赋值、条件、循环等语句,具有命令式程序设计语言的特征。使用MSVL语言,可以完成模型检测中系统建模、性质描述、性质验证等一系列工作,在投影时序逻辑的基础上,实现一种统一的模型检测方法。目前,MSVL语言已被广泛应用于各种领域的建模与验证中。为了执行MSVL程序,并对MSVL程序进行动态验证。现有技术使用解释器对MSVL进行仿真、建模和验证。解释器在处理中小型程序时,具有实现简单、使用方便等优点,但是面对大型程序,解释器执行效率低下。因此,实现MSVL编译系统可以大大提高MSVL程序的执行和验证效率。
综上所述,现有技术执行MSVL程序效率低。
发明内容
本发明的目的在于提供一种(Modeling,Simulation and VerificationLanguage)MSVL语言的编译系统及方法,旨在解决现有技术执行MSVL程序效率低的问题。
本发明是这样实现的,一种MSVL语言的编译系统,其主要用于程序的形式化验证领域,所述MSVL语言的编译系统包括:MSVL前端和底层虚拟机(Low Level VirtualMachine,简称LLVM)后端;
其中MSVL前端将输入的MSVL程序转换为IR代码,LLVM后端对IR代码进行优化并转为机器码。
所述MSVL前端包括词法语法分析模块,预处理模块和中间代码生成模块;
其中词法语法分析模块用于对输入的MSVL程序进行词法语法分析,生成语法树;预处理模块对语法树进行预处理;中间代码模块根据预处理后的语法树生成中间代码。
所述LLVM后端包括目标代码生成模块。
其中目标代码生成模块根据中间代码和目标机器生成对应的目标机器码。
本发明的另一目的在于提供一种所述MSVL语言的编译系统的MSVL语言的编译方法,所述MSVL语言的编译方法对MSVL中的简单语句用Normal Form的方法进行预处理,对复杂语句,分别对每个并发分量进行预处理,并对每个并发分量创建一个线程。
进一步,所述MSVL语言的编译方法包括以下步骤:
步骤一,将MSVL程序导入词法语法分析模块,并将源程序转化为记号流,并将记号流转化为MSVL程序语法树;
步骤二,将语法树导入预处理及语义分析模块,根据语义将各个语句预处理为对应的格式;
步骤三,根据LLVM中间代码(Intermediate Representation,简称IR)的生成规则,将预处理所得程序转化为LLVM的中间代码IR;
步骤四,根据LLVM的中间代码IR及目标机器生成对应的可执行机器码。
进一步,所述将MSVL程序导入词法语法分析模块,并将源程序转化为记号流,并将记号流转化为语法树,输入是一个MSVL程序,输出是一棵语法树;其中用到词法分析器Flex和语法分析器Bison;首先对调用词法分析器Flex对输入的MSVL程序进行词法分析,将字符序列转化为记号流;再调用语法分析器Bison对记号流进行语法分析,识别出MSVL程序中的语法结构,生成语法树。
进一步,所述字符序列包括MSVL语言中的关键字、数值、字符串、标示符、运算符、间隔符以及注释符;
所述MSVL语言中的语法结构包括赋值语句、顺序语句、分支语句、循环语句、函数、MSVL中的next语句、frame语句、await语句、or语句、conjunction语句、parallel语句、projection语句、always语句;
Pre(P)用于对MSVL程序P进行预处理,其中P是待处理的MSVL程序,P'是预处理后的MSVL程序;具体包括:
步骤一,如果P是赋值语句x<==e,P'=P;否则转到步骤二;
步骤二,如果P是skip、x:=e、nextp、p||q、p and q、{p1,...,pm}prj q,P'=PreNf(Nf(P));否则转到步骤三;
步骤三,如果P是if(b)then{p}else{q},P'=if(b){Pre(p)}else{Pre(q)};否则转到步骤四;
步骤四,如果P是while(b){p},P'=while(b){Pre(p)};否则转到步骤五;
步骤五,如果P是p;q,P'=Pre(p);Pre(q);否则转到步骤六;
步骤六,如果P是p or q,P'=if(b){Pre(p)}else{Pre(q)};否则转到步骤七;
步骤七,如果P是await(c),P'=Pre(while(!c){skip});否则转到步骤八;
步骤八,如果P是len(n),P'=Pre(i<==0and while(i<n){i:=i+1});否则转到步骤九;
步骤九,如果P是frame(x),将变量x插入到frame符号表中;否则转到步骤十;
步骤十,如果P是localx:p,在进程p中声明变量x;否则结束。
进一步,在步骤二中,Nf(P)将MSVL程序P转换成正则形式;PreNf(Nf(P))对MSVL程序P的正则形式进行预处理,其中R是待处理的MSVL程序的正则形,R'是预处理后的MSVL程序,函数printState()用于输出程序中的变量信息;
(1)如果R的形式是and empty,R'=x1=e1,...,xm=em;printState();否则转到(2);
(2)如果R的形式是and nextpf,R'=x1=e1,...,xm=em;printState();Pre(pf);否则转到(3);
(3)如果R是true andnextpf:R'=x1=e1,...,xm=em;否则结束;
对MSVL程序中的复杂语句的预处理,其中P是待处理的MSVL程序,P'是预处理后的MSVL程序;
(1)如果P是p||q,P'=createThread(Pre(p),PAL);createThread(Pre(q),PAL);否则转到(2);
(2)如果P是p and q,P'=createThread(Pre(p),AND);createThread(Pre(q),AND);否则转到(3);
(3)如果P是{p1,...,pm}prj q,P'=createThread(Pre(p1),PRJ);...;createThread(Pre(pm),PRJ);createThread(Pre(q),PRJ);否则转到(4);
(4)如果P是alw(p),P'=createThread(while(true){createThread(Pre(p))},ALW);否则结束。
进一步,用LLVM提供的接口函数将预处理后的MSVL程序P'转成LLVM的中间代码IR,具体包括:
从语法树中取出基类型;而后递归遍及语法树,返回由基类型产生的复合类型结构;使用中间表示语言声明变量,并将变量名和变量地址作为键值对插入符号表中;
对于分支语句,将其分为两个语句块,每个语句块使用标签作为标志,每个语句块中的语句作为不同的个体翻译,分别生成中间代码,并在执行时根据分支语句中条件的跳转到不同的语句块;
对于循环语句,分为循环体和循环结束两部分,每部分分别生成中间代码,根据循环条件的真假跳转到不同的语句块,若循环体结束,会无条件跳转到循环条件判断的位置;
对于函数声明,将之前声明的局部变量符号表压栈,借助于变量声明语句,将函数声明中的形参声明为局部变量,对于函数体,作为单独的语句块生成中间代码;当函数体翻译完毕,如果函数没有返回值,在函数体最后生成返回语句;最后将局部变量符号表从栈中弹出;
对于函数调用语句,根据取值语句,依次取出实参值,并将实参值传递给待调用的函数,并等待函数返回。
本发明的另一目的在于提供一种利用所述MSVL语言的编译方法的线程调度机制,所述线程调度机制在MSVL程序执行的过程中,对创建的线程动态的组织成一棵线程树,其中线程树中的结点类型是LEAF,PAL,AND,ALW,PRJ;结点PAL,AND,ALW和PRJ分别表示parallel语句,conjunction语句,always语句和projection语句;结点LEAF表示一个简单语句。
本发明的另一目的在于提供一种利用所述MSVL语言的编译系统的程序形式化验证系统。
本发明提供的MSVL语言的编译系统及方法,很好地解决了现有技术执行MSVL程序效率低,影响了程序验证和执行的效率的问题,提高了MSVL程序的执行和验证效率。根据程序本身复杂程度的不同,其执行速度可提高几十倍乃至上百倍。并且一次编译成功后程序可以反复执行,无需再次编译;目前本发明可执行规模为十万行以上的MSVL程序,而现有技术对于同等规模的程序无能为力。本发明可以将MSVL程序的执行与MSVL程序源码之间解耦。对MSVL源程序进行一次编译,转换成对应的中间代码,并根据目标机器生成可执行码。程序便与源码脱离,可反复执行,不需再次编译;而现有技术效率低下的原因之一就是对执行过程中重复执行的语句块或函数需要多次解释。使用此方案可大大提高MSVL程序的执行效率。
与现有技术相比,本发明具有以下优势:
程序 解释器执行时间(秒) 编译器执行时间(秒)
Sys(35377行) 199 2
Mcml(36281行) 1600 8
Sha(44577行) 174 2
Cf_Fir(37473行) 400 4
Cf_Cordic(20257行) 370 4
LTLNfBA(8887行0 300 1
24组合数(1000行) 320 0.8
附图说明
图1是本发明实施例提供的MSVL语言的编译系统结构示意图;
图中:1、MSVL前端;1-1、词法语法分析模块;1-2、预处理模块;1-3、中间代码生成模块;2、LLVM后端;2-1、目标代码生成模块。
图2是本发明实施例提供的MSVL语言的编译方法流程图。
图3是本发明实施例提供的MSVL程序。
图4是本发明实施例提供的图3中的MSVL程序经过词法语法分析后生成的语法树的一部分。
图5是本发明实施例提供的对图4中的语法树生成的部分中间代码。
图6是本发明实施例提供的对图5中的中间代码生成的可执行码文件。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
下面结合附图对本发明的应用原理作详细的描述。
如图1所示,本发明实施例提供的MSVL语言的编译系统及方法包括:MSVL前端1和LLVM后端2。
所述MSVL前端1包括词法语法分析模块1-1,预处理模块1-2和中间代码生成模块1-3;所述LLVM后端2包括目标代码生成模块2-1。
如图2所示,本发明实施例提供的MSVL语言的编译方法包括以下步骤:
S101:将MSVL程序导入词法语法分析模块,并将源程序转化为记号流,并将记号流转化为MSVL程序语法树;
S102:将语法树导入预处理及语义分析模块,根据语义将各个语句预处理为对应的格式;
S103:根据LLVM中间代码IR的生成规则,将预处理所得程序转化为LLVM的中间代码IR;
S104:根据LLVM的中间代码IR及目标机器生成对应的可执行机器码。
所述将MSVL程序导入词法语法分析模块,并将源程序转化为记号流,并将记号流转化为语法树,输入是一个MSVL程序,输出是一棵语法树;其中用到词法分析器Flex和语法分析器Bison。首先对调用词法分析器Flex对输入的MSVL程序进行词法分析,将字符序列转化为记号流;再调用语法分析器Bison对记号流进行语法分析,识别出MSVL程序中的语法结构,生成语法树。
所述字符序列包括MSVL语言中的关键字、数值、字符串、标示符、运算符、间隔符以及注释符。
所述MSVL语言中的语法结构包括赋值语句、顺序语句、分支语句、循环语句、函数、MSVL中的next语句、frame语句、await语句、or语句、conjunction语句、parallel语句、projection语句、always语句。
一个MSVL语句是简单语句如果它不是一个并发语句,或者它是一个并发语句p||q,p and q,{p1,...,pm}prj q或者alw(p),并且p1,...,pm,p和q中不包含条件语句和循环语句。否则它是一个复杂语句。
Pre(P)用于对MSVL程序P进行预处理,其中简单语句的预处理是基于Normal Form方法,其步骤如下,其中P是待处理的MSVL程序,P'是预处理后的MSVL程序。
步骤一:如果P是赋值语句x<==e,P'=P;否则转到步骤二;
步骤二:如果P是skip、x:=e、nextp、p||q、p and q、{p1,...,pm}prj q,P'=PreNf(Nf(P));否则转到步骤三;
步骤三:如果P是if(b)then{p}else{q},P'=if(b){Pre(p)}else{Pre(q)};否则转到步骤四;
步骤四:如果P是while(b){p},P'=while(b){Pre(p)};否则转到步骤五;
步骤五:如果P是p;q,P'=Pre(p);Pre(q);否则转到步骤六;
步骤六:如果P是p or q,P'=if(b){Pre(p)}else{Pre(q)};否则转到步骤七;
步骤七:如果P是await(c),P'=Pre(while(!c){skip});否则转到步骤八;
步骤八:如果P是len(n),P'=Pre(i<==0and while(i<n){i:=i+1});否则转到步骤九;
步骤九:如果P是frame(x),将变量x插入到frame符号表中;否则转到步骤十;
步骤十:如果P是localx:p,在进程p中声明变量x;否则结束。
其中,在步骤2中,Nf(P)将MSVL程序P转换成正则形式。PreNf(Nf(P))对MSVL程序P的正则形式进行进一步预处理。
对MSVL程序P的正则形R的预处理步骤如下,其中R是待处理的MSVL程序的正则形,R'是预处理后的MSVL程序,函数printState()用于输出程序中的变量信息。
步骤1:如果R的形式是and empty,R'=x1=e1,...,xm=em;printState();否则转到步骤2;
步骤2:如果R的形式是and nextpf,R'=x1=e1,...,xm=em;printState();Pre(pf);否则转到步骤3;
步骤3:如果R是true andnextpf:R'=x1=e1,...,xm=em;否则结束。
对MSVL程序中的复杂语句的预处理步骤如下,其中P是待处理的MSVL程序,P'是预处理后的MSVL程序。
步骤1:如果P是p||q,P'=createThread(Pre(p),PAL);createThread(Pre(q),PAL);否则转到步骤2;
步骤2:如果P是p and q,P'=createThread(Pre(p),AND);createThread(Pre(q),AND);否则转到步骤3;
步骤3:如果P是{p1,...,pm}prj q,P'=createThread(Pre(p1),PRJ);...;createThread(Pre(pm),PRJ);createThread(Pre(q),PRJ);否则转到步骤4;
步骤4:如果P是alw(p),P'=createThread(while(true){createThread(Pre(p))},ALW);否则结束。
用LLVM提供的接口函数将预处理后的MSVL程序P'转成LLVM的中间代码IR。其具体包括:
从语法树中取出基类型;而后递归遍及语法树,返回由基类型产生的复合类型结构;使用中间表示语言声明变量,并将变量名和变量地址作为键值对插入符号表中。
其中,对于分支语句,将其分为两个语句块,每个语句块使用标签作为标志,每个语句块中的语句作为不同的个体翻译,分别生成中间代码,并在执行时根据分支语句中条件的跳转到不同的语句块。
其中,对于循环语句,分为循环体和循环结束两部分,每部分分别生成中间代码,根据循环条件的真假跳转到不同的语句块,若循环体结束,会无条件跳转到循环条件判断的位置。
其中,对于函数声明,将之前声明的局部变量符号表压栈,借助于变量声明语句,将函数声明中的形参声明为局部变量,对于函数体,作为单独的语句块生成中间代码;当函数体翻译完毕,如果函数没有返回值,在函数体最后生成返回语句;最后将局部变量符号表从栈中弹出。
其中,对于函数调用语句,根据取值语句,依次取出实参值,并将实参值传递给待调用的函数,并等待函数返回。
本发明实现了一种线程调度机制,在MSVL程序执行的过程中,对创建的线程动态的组织成一棵线程树,其中线程树中的结点类型可以是LEAF,PAL,AND,ALW,PRJ。其中,结点PAL,AND,ALW和PRJ分别表示parallel语句,conjunction语句,always语句和projection语句。结点LEAF表示一个简单语句。对五种结点的执行规则如下:
1.如果是LEAF结点:执行该结点对应的程序。
2.如果是PAL结点或者AND结点:分别执行左右孩子节点对应的程序。
3.如果是ALW结点:执行所有孩子结点(可能有多个)对应的程序。
4.如果是PRJ结点:顺序执行除了最后一个孩子结点之外的所有孩子结点对应的程序,同时执行最后一个孩子结点对应的程序。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

Claims (9)

1.一种MSVL语言的编译系统,其特征在于,所述MSVL语言的编译系统包括:MSVL前端和LLVM后端;
所述MSVL前端将输入的MSVL程序转换为IR代码;LLVM后端对IR代码进行优化并转为机器码;
所述MSVL前端包括词法语法分析模块,预处理模块和中间代码生成模块;
词法语法分析模块用于对输入的MSVL程序进行词法语法分析,生成语法树;预处理模块对语法树进行预处理;中间代码模块根据预处理后的语法树生成中间代码;
所述LLVM后端包括目标代码生成模块;
目标代码生成模块根据中间代码和目标机器生成对应的目标机器码。
2.一种如权利要求1所述MSVL语言的编译系统的MSVL语言的编译方法,其特征在于,所述MSVL语言的编译方法对MSVL中的简单语句用NormalForm的方法进行预处理,对复杂语句,分别对每个并发分量进行预处理,并对每个并发分量创建一个线程。
3.如权利要求2所述的MSVL语言的编译方法,其特征在于,所述MSVL语言的编译方法包括以下步骤:
步骤一,将MSVL程序导入词法语法分析模块,并将源程序转化为记号流,并将记号流转化为MSVL程序语法树;
步骤二,将语法树导入预处理及语义分析模块,根据语义将各个语句预处理为对应的格式;
步骤三,根据LLVM中间代码)的生成规则,将预处理所得程序转化为LLVM的中间代码IR;
步骤四,根据LLVM的中间代码IR及目标机器生成对应的可执行机器码。
4.如权利要求3所述的MSVL语言的编译方法,其特征在于,所述将MSVL程序导入词法语法分析模块,并将源程序转化为记号流,并将记号流转化为语法树,输入是一个MSVL程序,输出是一棵语法树;其中用到词法分析器Flex和语法分析器Bison;首先对调用词法分析器Flex对输入的MSVL程序进行词法分析,将字符序列转化为记号流;再调用语法分析器Bison对记号流进行语法分析,识别出MSVL程序中的语法结构,生成语法树。
5.如权利要求4所述的MSVL语言的编译方法,其特征在于,所述字符序列包括MSVL语言中的关键字、数值、字符串、标示符、运算符、间隔符以及注释符;
所述MSVL语言中的语法结构包括赋值语句、顺序语句、分支语句、循环语句、函数、MSVL中的next语句、frame语句、await语句、or语句、conjunction语句、parallel语句、projection语句、always语句;
Pre(P)用于对MSVL程序P进行预处理,其中P是待处理的MSVL程序,P'是预处理后的MSVL程序;具体包括:
步骤一,如果P是赋值语句x<==e,P'=P;否则转到步骤二;
步骤二,如果P是skip、x:=e、next p、p||q、p and q、{p1,...,pm}prj q,P'=PreNf(Nf(P));否则转到步骤三;
步骤三,如果P是if(b)then{p}else{q},P'=if(b){Pre(p)}else{Pre(q)};否则转到步骤四;
步骤四,如果P是while(b){p},P'=while(b){Pre(p)};否则转到步骤五;
步骤五,如果P是p;q,P'=Pre(p);Pre(q);否则转到步骤六;
步骤六,如果P是p or q,P'=if(b){Pre(p)}else{Pre(q)};否则转到步骤七;
步骤七,如果P是await(c),P'=Pre(while(!c){skip});否则转到步骤八;
步骤八,如果P是len(n),P'=Pre(i<==0and while(i<n){i:=i+1});否则转到步骤九;
步骤九,如果P是frame(x),将变量x插入到frame符号表中;否则转到步骤十;
步骤十,如果P是local x:p,在进程p中声明变量x;否则结束。
6.如权利要求5所述的MSVL语言的编译方法,其特征在于,在步骤二中,Nf(P)将MSVL程序P转换成正则形式;PreNf(Nf(P))对MSVL程序P的正则形式进行预处理,其中R是待处理的MSVL程序的正则形,R'是预处理后的MSVL程序,函数printState()用于输出程序中的变量信息;
(1)如果R的形式是and empty,R'=x1=e1,...,xm=em;printState();否则转到(2);
(2)如果R的形式是and nextpf,R'=x1=e1,...,xm=em;printState();Pre(pf);否则转到(3);
(3)如果R是true and next pf:R'=x1=e1,...,xm=em;否则结束;
对MSVL程序中的复杂语句的预处理,其中P是待处理的MSVL程序,P'是预处理后的MSVL程序;
(1)如果P是p||q,P'=createThread(Pre(p),PAL);createThread(Pre(q),PAL);否则转到(2);
(2)如果P是p and q,P'=createThread(Pre(p),AND);createThread(Pre(q),AND);否则转到(3);
(3)如果P是{p1,...,pm}prj q,P'=createThread(Pre(p1),PRJ);...;createThread(Pre(pm),PRJ);createThread(Pre(q),PRJ);否则转到(4);
(4)如果P是alw(p),P'=createThread(while(true){createThread(Pre(p))},ALW);否则结束。
7.如权利要求3所述的MSVL语言的编译方法,其特征在于,用LLVM提供的接口函数将预处理后的MSVL程序P'转成LLVM的中间代码IR,具体包括:
从语法树中取出基类型;而后递归遍及语法树,返回由基类型产生的复合类型结构;使用中间表示语言声明变量,并将变量名和变量地址作为键值对插入符号表中;
对于分支语句,将其分为两个语句块,每个语句块使用标签作为标志,每个语句块中的语句作为不同的个体翻译,分别生成中间代码,并在执行时根据分支语句中条件的跳转到不同的语句块;
对于循环语句,分为循环体和循环结束两部分,每部分分别生成中间代码,根据循环条件的真假跳转到不同的语句块,若循环体结束,会无条件跳转到循环条件判断的位置;
对于函数声明,将之前声明的局部变量符号表压栈,借助于变量声明语句,将函数声明中的形参声明为局部变量,对于函数体,作为单独的语句块生成中间代码;当函数体翻译完毕,如果函数没有返回值,在函数体最后生成返回语句;最后将局部变量符号表从栈中弹出;
对于函数调用语句,根据取值语句,依次取出实参值,并将实参值传递给待调用的函数,并等待函数返回。
8.一种利用权利要求3所述MSVL语言的编译方法的线程调度机制,其特征在于,所述线程调度机制在MSVL程序执行的过程中,对创建的线程动态的组织成一棵线程树,其中线程树中的结点类型是LEAF,PAL,AND,ALW,PRJ;结点PAL,AND,ALW和PRJ分别表示parallel语句,conjunction语句,always语句和projection语句;结点LEAF表示一个简单语句。
9.一种利用权利要求1所述MSVL语言的编译系统的程序形式化验证系统。
CN201610980621.XA 2016-11-08 2016-11-08 一种msvl语言的编译系统及方法 Active CN106371887B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610980621.XA CN106371887B (zh) 2016-11-08 2016-11-08 一种msvl语言的编译系统及方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610980621.XA CN106371887B (zh) 2016-11-08 2016-11-08 一种msvl语言的编译系统及方法

Publications (2)

Publication Number Publication Date
CN106371887A true CN106371887A (zh) 2017-02-01
CN106371887B CN106371887B (zh) 2019-09-13

Family

ID=57893407

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610980621.XA Active CN106371887B (zh) 2016-11-08 2016-11-08 一种msvl语言的编译系统及方法

Country Status (1)

Country Link
CN (1) CN106371887B (zh)

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108037913A (zh) * 2017-12-21 2018-05-15 西安邮电大学 一种xUML4MC模型到MSVL语言程序的转换方法、计算机程序
CN110018816A (zh) * 2019-04-12 2019-07-16 王晨 一种基于c/c++编译系统的虚拟机控制系统及其控制方法
CN110119275A (zh) * 2019-05-13 2019-08-13 电子科技大学 一种分布式内存列式数据库编译执行器架构
CN110647360A (zh) * 2019-08-20 2020-01-03 百度在线网络技术(北京)有限公司 协处理器的设备执行代码的处理方法、装置、设备及计算机可读存储介质
CN110825384A (zh) * 2019-10-28 2020-02-21 国电南瑞科技股份有限公司 一种基于llvm的st语言编译方法及编译系统和编译器
CN111091612A (zh) * 2019-10-09 2020-05-01 中国船舶重工集团公司第七0九研究所 一种抽象目标码架构的着色语言机器码生成方法及装置
CN111309752A (zh) * 2019-11-26 2020-06-19 上海金融期货信息技术有限公司 面向业务流式数据处理的领域特定语言组件及其运作方法
CN112445465A (zh) * 2019-08-28 2021-03-05 无锡江南计算技术研究所 基于c代码生成的神经网络模型推理和训练方法
CN112685315A (zh) * 2021-01-05 2021-04-20 电子科技大学 面向c源码的自动化形式化验证工具及方法
CN113238759A (zh) * 2021-04-14 2021-08-10 西安电子科技大学 一种类Python程序设计语言XD-M的解释系统及方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20000066025A (ko) * 1999-04-12 2000-11-15 김영환 인증센터 및 hlr에서 보낸 인증 관련 데이터 수집 방법
CN102799520A (zh) * 2012-06-27 2012-11-28 清华大学 用于源代码配对的静态检查方法及装置
CN103631632A (zh) * 2013-11-29 2014-03-12 华为技术有限公司 移植方法及源到源编译器
CN105912381A (zh) * 2016-04-27 2016-08-31 华中科技大学 一种基于规则库的编译期代码安全检测方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20000066025A (ko) * 1999-04-12 2000-11-15 김영환 인증센터 및 hlr에서 보낸 인증 관련 데이터 수집 방법
CN102799520A (zh) * 2012-06-27 2012-11-28 清华大学 用于源代码配对的静态检查方法及装置
CN103631632A (zh) * 2013-11-29 2014-03-12 华为技术有限公司 移植方法及源到源编译器
CN105912381A (zh) * 2016-04-27 2016-08-31 华中科技大学 一种基于规则库的编译期代码安全检测方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
JTAG特工: ""基于LLVM的编译原理简明教程 (1) - 写编译器越来越容易了"", 《简书》 *

Cited By (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108037913A (zh) * 2017-12-21 2018-05-15 西安邮电大学 一种xUML4MC模型到MSVL语言程序的转换方法、计算机程序
CN108037913B (zh) * 2017-12-21 2021-08-17 西安邮电大学 xUML4MC模型到MSVL语言程序的转换方法、计算机可读存储介质
CN110018816A (zh) * 2019-04-12 2019-07-16 王晨 一种基于c/c++编译系统的虚拟机控制系统及其控制方法
CN110018816B (zh) * 2019-04-12 2022-04-22 王晨 一种基于c/c++编译系统的虚拟机控制系统及其控制方法
CN110119275B (zh) * 2019-05-13 2021-04-02 电子科技大学 一种分布式内存列式数据库编译执行器架构
CN110119275A (zh) * 2019-05-13 2019-08-13 电子科技大学 一种分布式内存列式数据库编译执行器架构
CN110647360A (zh) * 2019-08-20 2020-01-03 百度在线网络技术(北京)有限公司 协处理器的设备执行代码的处理方法、装置、设备及计算机可读存储介质
CN110647360B (zh) * 2019-08-20 2022-05-03 百度在线网络技术(北京)有限公司 协处理器的设备执行代码的处理方法、装置、设备及计算机可读存储介质
CN112445465A (zh) * 2019-08-28 2021-03-05 无锡江南计算技术研究所 基于c代码生成的神经网络模型推理和训练方法
CN112445465B (zh) * 2019-08-28 2022-09-13 无锡江南计算技术研究所 基于c代码生成的神经网络模型推理和训练方法
CN111091612A (zh) * 2019-10-09 2020-05-01 中国船舶重工集团公司第七0九研究所 一种抽象目标码架构的着色语言机器码生成方法及装置
CN111091612B (zh) * 2019-10-09 2023-06-02 武汉凌久微电子有限公司 一种抽象目标码架构的着色语言机器码生成方法及装置
CN110825384A (zh) * 2019-10-28 2020-02-21 国电南瑞科技股份有限公司 一种基于llvm的st语言编译方法及编译系统和编译器
CN111309752A (zh) * 2019-11-26 2020-06-19 上海金融期货信息技术有限公司 面向业务流式数据处理的领域特定语言组件及其运作方法
CN111309752B (zh) * 2019-11-26 2023-04-25 上海金融期货信息技术有限公司 面向业务流式数据处理的领域特定语言组件及其运作方法
CN112685315A (zh) * 2021-01-05 2021-04-20 电子科技大学 面向c源码的自动化形式化验证工具及方法
CN113238759A (zh) * 2021-04-14 2021-08-10 西安电子科技大学 一种类Python程序设计语言XD-M的解释系统及方法

Also Published As

Publication number Publication date
CN106371887B (zh) 2019-09-13

Similar Documents

Publication Publication Date Title
CN106371887B (zh) 一种msvl语言的编译系统及方法
CN112100054B (zh) 一种面向数据管控的程序静态分析方法和系统
Mauw et al. A process specification formalism
Mikk et al. Implementing statecharts in PROMELA/SPIN
Agrawal et al. An end-to-end domain-driven software development framework
Börger The Origins and the Development of the ASM Method for High Level System Design and Analysis.
Feautrier et al. Accelerated invariant generation for c programs with aspic and c2fsm
Körner et al. Fifty years of Prolog and beyond
Lohmann et al. Comparing and evaluating Petri net semantics for BPEL
Dragomir et al. Model checking kernel P systems
CN106843849A (zh) 一种基于文档的库函数的代码模型的自动合成方法
Nogueira et al. Test case generation, selection and coverage from natural language
Oliveira et al. Supporting model refinement with equivalence checking in the context of model-driven engineering with uml-rt
dos Santos et al. Verifying object-based graph grammars
Amadio et al. Certifying and reasoning on cost annotations of functional programs
CN107203406A (zh) 一种面向分布式存储结构的处理方法
Matoussi et al. A mapping approach between IR and binary CFGs dealing with aggressive compiler optimizations for performance estimation
Arusoaie A generic framework for symbolic execution: theory and applications
Zhang An Approach for Extracting UML Diagram from Object-Oriented Program Based on J2X
Tretter et al. Executing dataflow actors as Kahn processes
US20090112568A1 (en) Method for Generating a Simulation Program Which Can Be Executed On a Host Computer
Chen et al. A Conversion Framework of the Continuous Modeling Languages Based on ANTLR4
Basit-Ur-Rahim et al. Formal verification of sequence diagram using DiVinE
Yin et al. The Implementation of Simple Smart Contract Language and Its Compiler Based on Ethereum Platform
CN102646053B (zh) 基于算术表达式的msvl柱面计算方法和系统

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
CB03 Change of inventor or designer information
CB03 Change of inventor or designer information

Inventor after: Duan Zhenhua

Inventor after: Yang Kai

Inventor after: Tian Cong

Inventor after: Zhang Nan

Inventor after: Shi Yifang

Inventor after: Wang Xiaobing

Inventor after: Huang Bohu

Inventor after: Gu Bin

Inventor after: Jiang Yunsong

Inventor before: Duan Zhenhua

Inventor before: Yang Kai

Inventor before: Tian Cong

Inventor before: Zhang Nan

Inventor before: Shi Yifang

Inventor before: Wang Xiaobing

Inventor before: Huang Bohu