一种计算机语言转换系统及c语言到msvl语言的转换方法

文档序号:6401767阅读:255来源:国知局
专利名称:一种计算机语言转换系统及c语言到msvl语言的转换方法
技术领域
本发明涉及计算机程序设计语言C语言技术领域,尤其涉及一种C语言结构化语句到MSVL对应语句的转换方法。
背景技术
C语言是一种通用的、过程式的编程语言,广泛用于系统与应用软件的开发。具有高效、灵活、功能丰富、表达力强和较高的移植性等特点,在程序员中备受青睐。2011ISO正式公布的C语言新的国际标准草案C11,提高了对C++的兼容性,并将新的特性增加到C语言中。新功能包括支持多线程,基于IS0/IEC TR19769:2004规范下支持Unicode,提供更多用于查询浮点数类型特性的宏定义和静态声明功能。虽然C语言广泛适用于各类系统与软件的开发,但是保证其正确性和安全性成为一个巨大的挑战。模型检测是验证系统正确性的一个有效手段,但要抽取C语言程序的抽象模型成为目前面对的一个难点和挑战。
时序逻辑作为一种系统建模与验证工具已广泛应用于软件工程、数字电路设计等领域。投影时序逻辑(PTL)对ITL进行了扩展,时序逻辑语言MSVL是PTL的一个可执行子集,是一个集建模(Modeling)、仿真(Simulation)和验证(Verification)为一体的时序逻辑程序设计语言,它将系统的建模与性质的描述统一于同一逻辑框架内,通过模型检测技术验证系统的性质。投影时序逻辑在实时和混合系统,特别是安全危急系统的形式描述和验证方面也是极其有用的,例如,载人航天系统是一个复杂的混合实时系统,为了保证系统的安全性和可靠性,传统的测试方法远远不能满足要求,采用形式化的验证技术是十分有用的。
另外,投影时序逻辑程序设计语言MSVL的语言结构和C语言极其类似,很容易产生对应的转换关系。通过实现从C语言向MSVL语言的转化,对转化后的目标程序进行验证,利用等价转化的思想,可以实现对C语言形式化模型的抽取,并且可以对该模型进行模型检测,这将大大提高C语言程序的安全性和可靠性。发明内容
本发明提供一种计算机语言转换系统,其能将C语言转换成MSVL语言,以对C语言的程序进行检测。其具体包括,一种计算机语言转换系统,其用于将C语言程序转换成MSVL语言程序,其特征在于:其包括,
词法分析模块,其将字符序列转换为单词序列,所述字符序列包括C语言中的关键字、标识符、常数、运算符、头文件以及注释行的定义;
语法分析模块,其基于yacc中所规定的C语言的相关词法规则,进而识别出C语言中特定的语句;
转换处理模块,其根据C语言与MSVL语言之间的语言转换规律将C语言转换成MSVL语言。
本发明还提供一种C语言到MSVL语言的转换方法,其提供词法分析模块、语法分析模块及转换处理模块,其特征在于:所述方法包括以下步骤;第一步:将C语言程序导入词法分析模块,该步骤包括将字符序列转换为单词序列,所述字符序列包括C语言中的关键字、标识符、常数、运算符、头文件以及注释行的定义;第二步:将步骤一中得到的单词流导入语法分析模块,该步骤包括基于yacc中所规定的C语言的相关词法规则,进而识别出C语言中特定的语句;第三步:将第二步语法分析识别出的C语言语句序列在转换处理模块中根据相应的转换规则转换成对应的MSVL语句;第四步:用时序操作符“;”连接得到的MSVL语句序列,得到MSVL程序。在上述技术方案的基础上,语法分析模块中所述的C语言中的结构化语句包括基本表达式语句、while语句、if语句、if-else语句、for语句、switch语句、printf语句以及scanf语句。在上述技术方案的基础上,所述语法分析模块中所述的C语言中结构化语句的while语句、for语句的循环体和if语句、if-else语句的条件语句是一个语句块。

在上述技术方案的基础上,所述C语言与MSVL语言之间的语言转换规律包括表达式转换规则、语句转换规则和语句块转换规则。。在上述技术方案的基础上,所述表达式的转化规则如下:对表达式进行转化,假设X和y是标准符号,e代表一个常量或变量,参照规则如下:如果表达式为e,则转化为MSVL表达式返回e;如果表达式为[x++|x—],则转化为MSVL语句x:=x+land skip或者x:=x_landskip;如果表达式为x=y,则转化为MSVL语句X:=y and skip;如果表达式为x==y,则转化为MSVL语句x==y;如果表达式为X[+,_,*,/,%,! =]y,转化为 MSVL 表达式 x[+,-,*,/,%,!=]y;如果表达式为X*=y0=[〈|>]),则转化为MSVL表达式x=y或者x*y;如果表达式为x[+|-|*|/|%]=y,则转化为 x:=x[+|-|*|/|%]y and skip;如果表达式为x&&y,则转化为MSVL语句X and skip;如果表达式为X I |y,则转化为MSVL语句X or y;如果表达式为X,y,则转化为MSVL语句X,y;如果表达式为(X),则转化为MSVL语句为(X);在上述技术方案的基础上, 对基本语句进行转化,假设exp是一个常量表达式,block是一个语句块,s代表一个完整的声明,X是一个变量,parameter代表一个字符串,规则参照如下:如果语句为空语句,则转化为空语句;如果语句为exp,则转化为exp;如果语句为x=exp,则转化为x:=exp and skip ;如果语句为if语句,使用IF语句的转化规则对语句进行转换;如果语句为while (exp) {block},则转化为 MSVL 语句 while (exp) {block};
如果语句为int声明语句,则使用声明语句的转换规则对语句进行转换;
如果语句为for (s exp I; exp2) {block},则转化为 s while (exp) {block; exp2};
如果语句为printf ( “parameter”,exp),则转化为 output (exp);
如果语句为scanf ( “parameter”,exp),则转化为 input (exp);
其中,对IF语句的转换规则如下:
若语句形如if (exp) s,转化为 if (exp) then {s}
若语句形如if (exp) {block},转化为 if (exp) then {s}
若语句形如if(exp){blockl}else{block2},转化为 if(exp)then{blockl}else{block2}
若语句形如if (expl) {blockl} else if (exp2) {block2},转化为 if (expl)then{blockl}else if(exp2){block2}
假设var_list代表一列以“,”连接的变量,exp_list代表一列以“”连接的表达式,ei是在exp_list中出现的一个符号,贝U声明语句的转换规则如下:
如果声明语句为int X,转化为int x;
如果声明语句为int var_list,转化为int var_list;
如果声明语句为int x=exp,转化为 int x;x=exp and skip;
如果声明语句为int exp_list,对其中的每一个表达式使用声明语句的规则进行转化,分别转换成对应的独立的MSVL声明语。
在上述技术方案的基础上,所述基本语句的转化规则对于语句块的转化,且分别逐条对每条基本语句进行转化,直到语句块中所有语句转化完毕。
相对于现有技术,本发明通过将C语言转换成MSVL语言通过对基本语句的转化定义,可以实现对C程序的转化,并且得到等价的MSVL语言同样可以执行得到C程序的仿真结果。可以将需要验证的性质用MSVL的命题逻辑表示,C程序转换为MSVL程序,因此模型构造与性质描述使用的是同一种语言,使得建模与验证在同一逻辑框架下进行,便可以方便地实现对C语言程序的模型检测。MSVL的建模和模型检测方法的逻辑基础是属于形式化方法的时序逻辑,改发明将非形式化的C语言程序,用形式化的方法对其模型检测,保证了C程序所建的模型进行验证和检测的有效性和可靠性。可以用熟悉的C语言编写程序后,用形式化的语言对其进行模型检测,保证程序安全可靠。


图1是本发明对C语言程序模型检测的流程框架图。
具体实施方式
本发明提供一种计算机语言转换系统,其能将C语言转换成MSVL语言,以对C语言的程序进行检测。其具体包括,一种计算机语言转换系统,其用于将C语言程序转换成MSVL语言程序,其包括,词法分析模块,词法分析模块将字符序列转换为单词序列,字符序列包括C语言中的关键字、标识符、常数、运算符、头文件以及注释行的定义;还包括语法分析模块,语法分析模块基于yacc中所规定的C语言的相关词法规则,进而识别出C语言中特定的语句;还包括转换处理模块,转换处理模块根据C语言与MSVL语言之间的语言转换规律将C语言转换成MSVL语言。请参考图1,下面介绍使用本发明计算机语言转换系统将C语言转换成MSVL语言的方法。第一步:将C语言程序导入词法分析模块,该步骤包括将字符序列转换为单词序列,所述字符序列包括C语言中的关键字、标识符、常数、运算符、头文件以及注释行的定义。经过词法分析后,程序变成了关键字、常数、标识符和运算符的序列,其中C语言程序中的头文件部分和注释部分识别后将被忽略,不会送入下一模块。在上述求最大公约数和最小公倍数的C语言源程序中,用到的词法分析规则有:1.遇到头文件#include〈stdi0.h>语句,不做任何操作;2.遇到关键字返回标记名称,如int返回INT、main返回MAIN ;3.遇到标识符返回给Yacc语法分析器该标记,如numl、num2、a等;4.遇到运算符返回运算符的标记名,如!=、=、%、*等;5.遇到空格被忽略,不做任何操作。至此,通过词法规则定义,实现了利用Iex词法分析对源语言C语言的程序进行词法分析的功能。第二步:将步骤一中得到的单词流导入语法分析模块,该步骤包括基于yacc中所规定的C语言的相关词法规则,进而识别出C语言中特定的语句。如图2所示,对输入的C程序用 Iex词法分析器实现词法分析,生成的单词流和记号流作为yacc语法分析器的输入,语法分析程序根据yacc文件中所规定的C语言的相关词法规则,进而识别出特定的语句,识别出的有:基本表达式语句(如a〈b)、while语句和if语句,以及if语句和while语句中的语句块。第三步:将第二步语法分析识别出的C语言语句序列在转换处理模块中根据相应的转换规则转换成对应的MSVL语句;第四步:用时序操作符“;”连接得到的MSVL语句序列,得到MSVL程序。语法分析模块中所述的C语言中的结构化语句包括基本表达式语句、while语句、if语句、if-else语句、for语句、switch语句、printf语句以及scanf语句。语法分析模块中所述的C语言中结构化语句的while语句、for语句的循环体部分和if语句、if-else语句的条件语句部分被看成是一个语句块。定义转化规则包括定义对表达式转换规则、语句转换规则和语句块转换规则。在上述技术方案的基础上,所述表达式的转化规则如下:对表达式进行转化,假设X和y是标准符号,e代表一个常量或变量,参照规则如下:如果表达式为e,则转化为MSVL表达式返回e;如果表达式为[x++|x—],则转化为MSVL语句x:=x+land skip或者x:=x_landskip;如果表达式为x=y,则转化为MSVL语句X:=y and skip;如果表达式为x==y,则转化为MSVL语句x==y;如果表达式为X[+,_,*,/,%,! =]y,则转化为 MSVL 表达式 x[+,-,*,/,%,!=]y;
如果表达式为X*=y0=[〈|>]),则转化为MSVL表达式x=y或者x*y;
如果表达式为x[+|_|*|/|%]=y,则转化为 x:=x[+|_|*|/|%]y and skip;
如果表达式为x&&y,则转化为MSVL语句X and skip;
如果表达式为X I |y,则转化为MSVL语句X or y;
如果表达式为X,y,则转化为MSVL语句X,y;
如果表达式为(X),则转化为MSVL语句为(X);
下面说明语句转换规则及语句块转换规则,对基本语句进行转化,基本语句包括语句和语句块,假设exp是一个常量表达式,block是一个语句块,s代表一个完整的声明,X是一个变量,parameter代表一个字符串,规则参照如下:
如果语句为空语句,转化为空语句;
如果语句为exp,转化为exp;
如果语句为x=exp,转化为 x:=exp and skip ;
如果语句为if语句,使用IF语句的转化规则对语句进行转换;
如果语句为while (exp) {block},转化为 MSVL 语句 while (exp) {block};
如果语句为int声明语句,使用声明语句的转换规则对语句进行转换;
如果语句为for (s expl; exp2) {block},转化为 s while (exp) {block; exp2};
如果语句为printf ( “parameter”,exp),转化为 output (exp);
如果语句为scanf ( “parameter,,,exp),转化为 input (exp);
其中,对IF语句的转换规则如下:
若语句形如if (exp) s,转化为 if (exp) then {s}
若语句形如if (exp) {block},转化为 if (exp) then {s}
若语句形如if(exp){blockl}else{block2},转化为 if(exp)then{blockl}else{block2}
若语句形如if (expl) {blockl} else if (exp2) {block2},转化为 if (expl)then{blockl}else if(exp2){block2}
假设var_list代表一列以“,”连接的变量,exp_list代表一列以”连接的表达式,ei是在exp_list中出现的一个符号,贝U声明语句的转换规则如下:
如果声明语句为int X,转化为int x;
如果声明语句为int var_list,转化为int var_list;
如果声明语句为int x=exp,转化为 int x;x=exp and skip;
如果声明语句为int exp_list,对其中的每一个表达式使用声明语句的规则进行转化,分别转换成对应的独立的MSVL声明语句。
基本语句的转化规则对于语句块的转化,且分别逐条对每条基本语句进行转化,直到语句块中所有语句转化完毕。
权利要求
1.一种计算机语言转换系统,其用于将C语言程序转换成MSVL语言程序,其特征在于:其包括, 词法分析模块,其将字符序列转换为单词序列,所述字符序列包括C语言中的关键字、标识符、常数、运算符、头文件以及注释行的定义; 语法分析模块,其基于yacc中所规定的C语言的相关词法规则,进而识别出C语言中特定的语句; 转换处理模块,其根据C语言与MSVL语言之间的语言转换规律将C语言转换成MSVL;五古P口口 ο
2.一种C语言到MSVL语言的转换方法,其提供词法分析模块、语法分析模块及转换处理模块,其特征在于:所述方法包括以下步骤; 第一步:将C语言程序导入词法分析模块,该步骤包括将字符序列转换为单词序列,所述字符序列包括C语言中的关键字、标识符、常数、运算符、头文件以及注释行的定义;第二步:将步骤一中得到的单词流导入语法分析模块,该步骤包括基于yacc中所规定的C语言的相关词法规则,进而识别出C语言中特定的语句; 第三步:将第二步语法分析识别出的C语言语句序列在转换处理模块中根据相应的转换规则转换成对应的MSVL语句; 第四步:用时序操作符“;”连接得到的MSVL语句序列,得到MSVL程序。
3.根据权利要求2所述的一种C语言到MSVL语言的转换方法,其特征在于:语法分析模块中所述的C语言中的结构化语句包括基本表达式语句、while语句、if语句、if-else语句、for语句、switch语句、printf语句以及scanf语句。
4.根据权利要求2所述的一种C语言到MSVL语言的转换方法,其特征在于:所述语法分析模块中所述的C语言中结构化语句的while语句、for语句的循环体部分和if语句、if-else语句的条件语句是一个语句块。
5.根据权利要求1所述的一种C语言到MSVL语言的转换方法,其特征在于:所述C语言与MSVL语言之间的语言转换规律包括表达式转换规则、语句转换规则和语句块转换规则。
6.根据权利要求5所述的一种C语言到MSVL语言的转换方法,其特征在于:所述表达式的转化规则如下: 对表达式进行转化,假设X和I是标准符号,e代表一个常量或变量,参照规则如下: 如果表达式为e,转化为MSVL表达式返回e; 如果表达式为[x++1 X—],转化为 MSVL 语句 x:=x+land skip 或者 x: =x_land skip; 如果表达式为x=y,转化为MSVL语句x:=y and skip; 如果表达式为x==y,转化为MSVL语句x==y; 如果表达式为 X[+,_,*,/,%,! =]y,转化为 MSVL 表达式 X[+,-,*,/,%,!=]y; 如果表达式为x*=y 0= [〈 I >]),转化为MSVL表达式x=y或者x*y; 如果表达式为 x[+|-|*|/|%]=y,转化为 x:=x[+|_|*|/|%]y and skip; 如果表达式为x&&y,转化为MSVL语句X and skip; 如果表达式为x| |y,转化为MSVL语句X or y; 如果表达式为X,y,转化为MSVL语句X,y;如果表达式为(X),转化为MSVL语句为(X)。
7.如权利要求5所述的一种C语言到MSVL语言的转换方法,其特征在于:所述语句转换规则和语句块转换规则如下, 对基本语句进行转化,假设exp是一个常量表达式,block是一个语句块,s代表一个完整的声明,X是一个变量,parameter代表一个字符串,规则参照如下: 如果语句为,转化为; 如果语句为exp,转化为exp; 如果语句为x=exp,转化为x:=exp and skip ; 如果语句为if语句,使用IF语句的转化规则对语句进行转换; 如果语句为 while (exp) {block},转化为 MSVL 语句 while (exp) {block}; 如果语句为int声明语句,使用声明语句的转换规则对语句进行转换; 如果语句为 for(s exp I; exp2) {block},转化为 s while (exp) {block}; 如果语句为 printf ( “parameter”,exp),转化为 output (exp); 如果语句为 scanf ( “parameter”,exp),转化为 input (exp); 其中,对IF语句的转换规则如下: 若语句形如if (exp) s,转化为if (exp) then {s} 若语句形如 if (exp) {block},转化为 if (exp) then {s} 若语句形如 if (exp){blockl}else{block2},转化为 if(exp)then{blockl}else{block2}若语句为 if(expl) {blockl} else if (exp2) {block2},转化为 if (expl) then {blockl}else if(exp2){block2} 假设var_list代表一列以“,”连接的变量,exp_list代表一列以“,”连接的表达式,ei是在exp_list中出现的一个符号,贝U声明语句的转换规则如下: 如果声明语句为int X,转化为int x; 如果声明语句为int var_list,转化为int var_list; 如果声明语句为int x=exp,转化为int x;x=exp and skip; 如果声明语句为int exp_list,对其中的每一个表达式使用声明语句的规则进行转化,分别转换成对应的独立的MSVL声明语。
8.根据权利要求5所述的一种C语言到MSVL语言的转换方法,其特征在于:所述基本语句的转化规则对于语句块的转化,且分别逐条对每条基本语句进行转化,直到语句块中所有语句转化完毕。
全文摘要
一种计算机语言转换系统,其用于将C语言程序转换成MSVL语言程序,其包括,词法分析模块,其将字符序列转换为单词序列,所述字符序列包括C语言中的关键字、标识符、常数、运算符、头文件以及注释行的定义;语法分析模块,其基于yacc中所规定的C语言的相关词法规则,进而识别出C语言中特定的语句;转换处理模块,其根据C语言与MSVL语言之间的语言转换规律将C语言转换成MSVL语言。
文档编号G06F9/45GK103150200SQ20131012018
公开日2013年6月12日 申请日期2013年4月8日 优先权日2013年4月8日
发明者段振华, 于妍, 田聪, 王小兵, 张南, 韩萌 申请人:西安电子科技大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1