CN112306470B - 一种复杂同步语言程序的化简转化和自动验证方法 - Google Patents

一种复杂同步语言程序的化简转化和自动验证方法 Download PDF

Info

Publication number
CN112306470B
CN112306470B CN202011117839.5A CN202011117839A CN112306470B CN 112306470 B CN112306470 B CN 112306470B CN 202011117839 A CN202011117839 A CN 202011117839A CN 112306470 B CN112306470 B CN 112306470B
Authority
CN
China
Prior art keywords
statement
language program
complex
data stream
converting
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.)
Active
Application number
CN202011117839.5A
Other languages
English (en)
Other versions
CN112306470A (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.)
Nanjing University of Aeronautics and Astronautics
Original Assignee
Nanjing University of Aeronautics and Astronautics
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 Nanjing University of Aeronautics and Astronautics filed Critical Nanjing University of Aeronautics and Astronautics
Priority to CN202011117839.5A priority Critical patent/CN112306470B/zh
Publication of CN112306470A publication Critical patent/CN112306470A/zh
Application granted granted Critical
Publication of CN112306470B publication Critical patent/CN112306470B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/425Lexical analysis
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4498Finite state machines

Landscapes

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

Abstract

本发明提供了一种复杂同步语言程序的化简转化和自动验证方法,包括对复杂同步语言程序进行词法分析、语法分析后生成与源程序对应的抽象语法树。基于程序等价转化的思想,将复杂同步语言程序的抽象语法树进行化简并转化为简单同步语言程序的抽象语法树。遍历转化后的抽象语法树,得到一个与源程序功能等价并且只包含简单同步语言语法结构的程序。将该程序作为简单同步语言模型检测工具的输入,得到验证结果,从而实现对复杂同步语言程序的自动验证。

Description

一种复杂同步语言程序的化简转化和自动验证方法
技术领域
本发明涉及计算机软件领域,尤其涉及一种复杂同步语言程序的化简转化和自动验证方法。
背景技术
同步数据流语言(简称同步语言)是一种常用的嵌入式系统程序设计语言,例如:Esterel、Lustre、Signal和SCADE等。在航空、航天、交通等安全关键领域的装备研发中,同步语言通常被用于实现实时嵌入式自动控制系统。同步语言是一种声明式语言,其基本数据抽象是流,即由一个变量在多个时钟上的值构成的序列,同步语言只支持bool、int和real基本类型数据流。流通常用(r,s,t)表示,括号内的r、s、t分别表示流在第1、2、3个时钟所对应的值。一个同步语言程序由多个节点(node)或函数(function)构成,每个节点和函数具有零个或多个输入流以及一个或多个输出流,一个函数也可以有内部流。以如下的一个Lustre同步语言程序为例进行说明:
node abs(X:int,B:bool)return(Y:int)
let
Y=if B then X else-X;
tel
其中,函数abs有两个输入流X和B以及一个输出流Y。其中,X和Y都是int类型的流,B是bool类型的流。假设X=(1,2,3,4,5,6),B=(true,false,true,false,true,true),那么可以得出Y=(1,-2,3,-4,5,6)。
更为复杂的同步语言通常使用更多的语言结构来精简代码,例如SCADE语言。下面通过实例介绍SCADE语言的主要语言特性,包括区别于简单同步语言的复杂语言结构和自动机(automaton)。
Figure BDA0002730953120000011
Figure BDA0002730953120000021
上面的SCADE程序包含了一个自动机,自动机中各个状态之间的迁移关系如图1所示。该程序中的EVEN为初始状态,该自动机中的所有迁移都是强迁移:如果迁移条件满足,就跳转到迁移的目标状态,然后执行目标状态中的代码;如果迁移条件不满足,状态不发生改变,并执行当前状态中的代码。
下面程序中的迁移为弱迁移:
Figure BDA0002730953120000022
上面的SCADE程序包含了一个自动机,自动机中各个状态之间的迁移关系如图2所示。注意该自动机中的所有迁移都是弱迁移:如果迁移条件满足,就执行当前状态中的代码,然后跳转到迁移的目标状态;如果迁移条件不满足,状态不发生改变,并执行当前状态中的代码。在很多程序中,自动机中兼有强弱迁移。
对于语法比较简单的同步语言程序的模型检测等自动验证技术比较完善:先对源程序进行词法分析、语法分析以及语义分析得到源程序对应的抽象语法树(AbstractSyntax Tree,AST),然后对抽象语法树进行化简、内联、逻辑公式构建等操作得到一个逻辑公式,最后将这个逻辑公式输入到可满足性求解器中进行求解得到验证结果。已有同步语言程序的模型检测工具均采用这种方法实现。但是这些模型检测工具只能检测Lustre等语法结构简单的同步语言程序,并不能检测SCADE等语法结构复杂的同步语言程序。
发明内容
针对以上问题,本发明提出一种复杂同步语言程序的化简转化和自动验证方法。
为实现本发明的目的,提供一种复杂同步语言程序的化简转化和自动验证方法,包括如下步骤:
s1:检测复杂同步语言程序是否符合同步语言的语法规则,如果符合语法规则,则通过对所述复杂同步语言程序进行词法分析和语法分析得到对应的抽象语法树,如果不符合语法规则,则报错且终止操作;
s2:将所述复杂同步语言程序的抽象语法树化简转化为简单同步语言程序的抽象语法树;
s3:将上述步骤s2中经过化简转化得到的简单同步语言程序的抽象语法树转化为程序文件,然后输入到简单同步语言程序的模型检测器中进行验证并得出验证结果。
进一步地,所述步骤s2中的化简转化具体包括:
数据流类型的转化:布尔类型保持不变;将所有的整数类型转化为int类型;将所有的浮点数类型转化为实数类型;
fby语句的转化:将fby语句简化为包含n个pre操作符的语句:a->pre(a->pre(…pre(a->pre b)…)),其中,a和b为数据流标识符,pre操作符返回数据流在前一个时钟的值;
when语句的转化:将when语句转化为if-then-else语句:if condition thenaction else,其中,condition是一个bool类型的表达式,action是一个表达式;
merge语句的转化:将merge语句转化为:if condition then action1 elseaction2,其中,condition是一个bool类型的表达式,action1和action2是表达式;
restart-every语句的转化:将restart-every语句转化为:if condition theninitial else node(params),其中,node为被调用节点的标识符,condition是一个bool类型的表达式,params为调用node节点的参数,initial表示被调用的node节点中输出流的初始值;
activity-every语句的转化:将activity-every语句转化为:if condition thennode(params)else initial,其中,node为被调用节点的标识符,condition是一个bool类型的表达式,params为调用node节点的参数,initial表示被调用的node节点中输出流的初始值;
package-end语句的转化:将不同包中的程序移动到同一个包中,并为所述包中所有的标识符加上前缀package_id,然后将所述复杂同步语言程序中的package package_id<code>end语句删除,其中,package_id是包的标识符,<code>表示包中的代码;
open语句的转化:将所述复杂同步语言程序中的open package_id语句删除;
last语句的转化:将所述复杂同步语言程序中variable_id数据流的定义转化为非last定义数据流:variable_id:type,其中,type是数据流类型;同时增加一个新的数据流定义:var last_variable_id:type,其中,var是所述新的数据流定义的关键字,last_variable_id是所述新的数据流定义的标识符;并增加等式:last_variable_id=init_value->pre(variable_id),其中,init_value是初始值,最后将所述复杂同步语言程序所有等式中出现的last’variable_id替换为last_variable_id;
assume语句和guarantee语句的转化:将所述复杂同步语言程序中的assume语句和guarantee语句都转化为assert:condition,其中,condition为bool类型的表达式;
group语句的转化:将所述复杂同步语言程序中的group语句转化为多个新的数据流定义:var a1:t1,a2:t2,…,an:tn,其中a1~an是转化后新的数据流标识符,t1~tn是数据流类型;
sig语句的转化:将所述复杂同步语言程序中sig语句转化为一组新的数据流定义:var v1,v2,…,vn:bool,其中,v1~vn为bool类型的信号流;并将所述复杂同步语言程序中涉及信号流的等式r=’vi转化为:r=vi;
emit语句的转化:将所述复杂同步语言程序中的emit语句转化为:v1=true,v2=true,…,vn=true,其中,v1~vn是sig语句定义的信号流;
where语句的转化:将所述复杂同步语言程序中where语句替换为node node_id_type(v1:tv1;…;vi:type;…;vm:tvm)returns(r1:tr1;…;rj:type;…;rn:trn),其中,node_id_type为替换后得到的新节点的标识符,v1~vm为输入数据流,tv1~tvm为输入数据流的类型,r1~rn为输出数据流,tr1~trn为输出数据流的类型,type为float,integer或numeric;
有限状态自动机的转化:
所述有限状态自动机表示为一个五元组:M={Q,Σ,δ,Q0,F},其中:
Q={q0,q1,…,qn}是所述有限状态自动机的状态集合;
Σ={σ01,…,σm}是所述有限状态自动机的字母表,用于表示所述有限状态自动机接受的语言;
δ:Q×Σ→2Q是状态迁移函数;
Figure BDA0002730953120000051
是所述有限状态自动机的开始状态集合;
Figure BDA0002730953120000052
是所述有限状态自动机的终止状态集合;
从所述复杂同步语言程序中提取所述有限状态自动机的五元组,并基于该五元组将所述有限状态自动机转化为多组if-then-else语句。
跟现有技术相比,本发明具有以下有益技术效果:
本发明实现了复杂同步语言程序的模型检测,相比于简单同步语言程序的模型检测,本发明能够验证更复杂的同步语言程序,且基于本发明构建的复杂同步语言程序模型检测器,无需对已有的简单同步语言模型检测器进行扩展,就能够对复杂同步语言程序进行高效、准确的模型检测,具有良好的社会效益。
附图说明
图1为even_times_st自动机的状态迁移关系图;
图2为even_times_wt自动机的状态迁移关系图;
图3是一个实施例的一种复杂同步语言程序的化简转化和自动验证方法的工作流程图;
图4是一个实施例的抽象语法树的结构示意图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
复杂同步语言程序在简单同步语言程序的基础上新增了很多语言结构,用于精简程序代码。通过引入复杂和简单同步语言之间的化简和转化规则,把同步语言中复杂的语法结构转化为简单的语法结构,然后使用已有的同步语言模型检测工具进行模型检测,从而实现对复杂同步语言程序的模型检测。为了清楚地说明对复杂同步语言程序进行化简转化和模型检测的步骤,下面使用一个复杂同步语言程序(此处以SCADE语言程序为例)进行说明,程序如下:
Figure BDA0002730953120000061
复杂同步语言在简单同步语言的基础上新增了很多语言结构,用于精简程序代码。我们需要将这些新的语言结构进行化简并转化为简单同步语言程序中的语言结构,然后进行模型检测。如图3所示,本发明的具体实施过程分为以下几个步骤:
s1:对源程序进行词法分析和语法分析,检测源程序是否符合同步语言的语法规则,并得到与源程序对应的抽象语法树。若源程序存在语法错误,则终止本过程,并给出错误提示。
经过步骤s1后得到的抽象语法树结构如图4所示(该抽象语法树为简化版)。
s2:将复杂同步语言程序的抽象语法树化简转化为简单同步语言程序的抽象语法树。具体的化简和转化规则如下:
数据流类型转化。简单同步语言只包括3种数据流类型:布尔类型bool、整数类型int和实数类型real。复杂同步语言对数据流类型进行更详细地划分,包括整数类型int、int8、int16、int32、int64、uint8、uint16、uint32、uint64和浮点数类型(即实数类型)float、float8、float16、float32、float64。因此,转化规则保持复杂同步语言程序中的bool类型不变,将int、int8、int16、int32、int64、uint8、uint16、uint32、uint64类型转化为简单同步语言中的int类型,将float、float8、float16、float32、float64类型转化为real类型。
在本实施例中,将数据流定义i:int8转化为i:int。
fby语句转化。语句fby(b;n;a)的含义是使用数据流a和b构造一个新的数据流,该数据流的前n个时钟的值与数据流a的初始值相等,第n+i个时钟的值与数据流b的第i个时钟的值相等,其中整数n>0,i>0。因此,转化规则将复杂同步语言程序中的fby语句简化为包含n个pre操作符的语句:a->pre(a->pre(…pre(a->pre b)…)),其中pre操作符返回数据流在前一个时钟的值。
在本实施例中,将s=fby(s;2;0)转化为s=0->pre(0->pre(s))。
when语句转化。when语句的语法是action when condition,其中condition是一个bool类型的表达式,action是一个表达式。该语句表示:如果condition为真,则执行action,否则什么也不执行。因此,转化规则将复杂同步语言程序中的when语句转化为如下if-then-else语句:if condition then action else。
在本实施例中,将s=1when c转化为s=if c then 1else。
merge语句转化。merge语句的语法是merge(condition,action1 whencondition,action2 when not condition),其中condition是一个bool类型的表达式,action1和action2是表达式。该语句表示:如果condition为真,则执行action1,否则执行action2。因此,转化规则将复杂同步语言程序中的merge语句转化为:if condition thenaction1 else action2。
在本实施例中,将s=merge(c,1when c,2when not c)转化为s=if c then1else2。
restart-every语句转化。restart-every语句的语法是:restart node everycondition(params),其中node为被调用节点的标识符,condition是一个bool类型的表达式,params为调用node节点的参数。该语句表示:如果condition为真,就让node回到初始状态,否则执行node。因此,转化规则将复杂同步语言程序中的restart-every语句转化为:ifcondition then initial else node(params),其中initial表示被调用的node节点中的输出流的初始值。
在本实施例中,将t=restart add every c()转化为t=if c then 1.00elseadd()。
activity-every语句转化。activity-every语句的语法是:activity node everycondition(params),其中node为被调用节点的标识符,condition是一个bool类型的表达式,params为调用node节点的参数。该语句表示:如果condition为真,就执行node,否则就让node回到初始状态。因此,转化规则将复杂同步语言程序中的activity-every语句转化为:if condition then node(params)else initial,其中initial表示被调用的node节点中的输出流的初始值。
在本实施例中,将t=activity add every c()转化为t=if c then add()else1.00。
package-end语句转化。package-end语句的语法是package package_id<code>end,其中package_id是包的标识符,<code>表示包中的代码。复杂同步语言允许源代码位于不同的包中,但是简单同步语言不允许。因此,转化规则将不同包中的程序移动到同一个包中,并为包中所有的标识符加上前缀package_id,然后将源程序中的package package_id<code>end语句删除。
open语句转化。open语句的语法是open package_id,其中package_id表示包的标识符。在复杂同步语言程序中,如果一个包中的程序需要调用另一个包中的程序,需要在该程序中声明要引用程序所在的包。在package-end语句转化中,已经将不同包中的程序移动到了同一个包中。因此,转化规则只需要直接将open package_id语句删除。
last语句转化。last语句的语法是last’variable_id,其中variable_id为被last语句使用的输出数据流的标识符,该数据流的值能够在自动机的不同状态中被共享。因此,转化规则将复杂同步语言程序中variable_id数据流的定义转化为非last定义数据流variable_id:type,其中type是数据流类型,增加一个新的数据流定义var last_variable_id:type用于存储该数据流在前一个时钟的值,其中var是数据流定义关键字,last_variable_id是数据流标识符,增加一个新的等式last_variable_id=init_value->pre(variable_id),其中init_value是初始值,最后将程序中所有等式中出现的last’variable_id替换为last_variable_id。
在本实施例中,用last关键字定义的输出数据流为o:int last=0,转化规则将其转化为新的定义o:int,增加一个新的数据流定义var last_o:int,增加一个新的等式last_o=0->pre(o),最后将所有的last’o替换为last_o。
assume语句和guarantee语句转化。表示断言的assume语句和guarantee语句的语法是assume/guarantee name:condition,其中name为断言的标识符,condition为bool类型的表达式,用于表示condition必须为true。assume只能断言输入流,guarantee只能断言输出流。简单同步语言的断言用assert语句表示,它可以断言输入流和输出流。因此,转化规则将复杂同步语言程序中的assume语句和guarantee语句转化为assert:condition。
在本实施例中,将assume num:i>0转化为assert:i>0。
group语句转化。group语句的语法是group group_id=(t1,t2…tn),其中group_id是组的标识符,t1~tn是数据流类型。用于定义一组输入数据流或输出数据流类型,组中的数据流类型和顺序与定义中的类型和顺序一致。因此,转化规则将复杂同步语言程序中的group语句转化为多个数据流定义:var a1:t1,a2:t2,…,an:tn,其中a1~an是新的数据流标识符。
sig语句转化。sig语句定义的信号流只能用在自动机中,语法是sig v1,v2,…,vn,其中v1~vn为bool类型的信号流,信号流是指在所有时钟上的默认值都为false的数据流,如果自动机的某个状态中有emit’vi语句(1≤i≤n),且当程序到达该状态时,vi值为true,否则为false。因此,转化规则将复杂同步语言程序中sig语句转化为一组数据流定义var v1,v2,…,vn:bool,将涉及信号流的等式r=’vi转化为:r=vi。
本实施例中,将sig a转化为:var a:bool,将r=’a转化为:r=a。
emit语句转化。emit语句的语法是emit’v1,’v2,…,’vn,其中v1~vn是sig语句定义的信号流,emit用于将这些信号流的值变为true。因此,转化规则将复杂同步语言程序中的emit语句转化为:v1=true,v2=true,…,vn=true。
本实施例中,将emit’a转化为:a=true。
where语句转化。where语句用于动态确定数据流类型,语法是node node_id(v1:tv1;…;vi:’T;…;vm:tvm)returns(r1:tr1;…;rj:’T;…;rn:trn)where’T type,其中node_id为节点标识符,v1~vm为输入数据流,tv1~tvm为输入数据流的类型,r1~rn为输出数据流,tr1~trn为输出数据流的类型,T为类型替换的占位符,type为float,integer或numeric。因此,转化规则将复杂同步语言程序中where语句替换为node node_id_type(v1:tv1;…;vi:type;…;vm:tvm)returns(r1:tr1;…;rj:type;…;rn:trn),其中,node_id_type为替换后得到的新节点的标识符,其以类型type作为后缀。
有限状态自动机转化。简单同步语言中没有自动机语句,而复杂同步语言为了精简程序代码引入了有限状态自动机。因此,需要将有限状态自动机转化为简单同步语言中的if-then-else语句。转化的理论基础源于有限状态自动机的基本定义,将有限状态自动机表示为一个五元组:M={Q,Σ,δ,Q0,F},其中:
Q={q0,q1,…,qn}是有限状态自动机的状态集合。
Σ={σ01,…,σm}是有限状态自动机的字母表,用于表示有限状态自动机接受的语言。
δ:Q×Σ→2Q是状态迁移函数。
Figure BDA0002730953120000102
是有限状态自动机的开始状态集合。
Figure BDA0002730953120000103
是有限状态自动机的终止状态集合。
因此,结合复杂同步语言的语法,可以从程序中提取有限状态自动机的五元组,然后基于该五元组将有限状态自动机转化为多组if-then-else语句。
在本实施例中,Q={EVEN,ODD};Σ={c,!c};δ包含:EVEN×c=ODD,ODD×c=EVEN,EVEN×!c=EVEN以及ODD×!c=ODD,Q0={EVEN};F={},该有限状态自动机没有终止状态。因此,结合复杂同步语言的语法,可以从程序中提取有限状态自动机的五元组,然后基于该五元组将有限状态自动机转化为多组if-then-else语句。转化后的程序如下:
Figure BDA0002730953120000101
Figure BDA0002730953120000111
S3:将程序输入已有的简单同步语言程序的模型检测器中,得到验证结果。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
需要说明的是,本申请实施例所涉及的术语“第一\第二\第三”仅仅是区别类似的对象,不代表针对对象的特定排序,可以理解地,“第一\第二\第三”在允许的情况下可以互换特定的顺序或先后次序。应该理解“第一\第二\第三”区分的对象在适当情况下可以互换,以使这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。
本申请实施例的术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或模块的过程、方法、装置、产品或设备没有限定于已列出的步骤或模块,而是可选地还包括没有列出的步骤或模块,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或模块。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。

Claims (1)

1.一种复杂同步语言程序的化简转化和自动验证方法,其特征在于,包括如下步骤:
s1:检测复杂同步语言程序是否符合同步语言的语法规则,如果符合语法规则,则通过对所述复杂同步语言程序进行词法分析和语法分析得到对应的抽象语法树,如果不符合语法规则,则报错且终止操作;
s2:将所述复杂同步语言程序的抽象语法树化简转化为简单同步语言程序的抽象语法树;其中,所述化简转化具体包括:
数据流类型的转化:布尔类型保持不变;将所有的整数类型转化为int类型;将所有的浮点数类型转化为实数类型;
fby语句的转化:将fby语句简化为包含n个pre操作符的语句:a->pre(a->pre(…pre(a->pre b)…)),其中,a和b为数据流标识符,pre操作符返回数据流在前一个时钟的值;
when语句的转化:将when语句转化为if-then-else语句:if condition then actionelse,其中,condition是一个bool类型的表达式,action是一个表达式;
merge语句的转化:将merge语句转化为:if condition then action1 else action2,其中,condition是一个bool类型的表达式,action1和action2是表达式;
restart-every语句的转化:将restart-every语句转化为:if condition theninitial else node(params),其中,node为被调用节点的标识符,condition是一个bool类型的表达式,params为调用node节点的参数,initial表示被调用的node节点中输出流的初始值;
activity-every语句的转化:将activity-every语句转化为:if condition thennode(params)else initial,其中,node为被调用节点的标识符,condition是一个bool类型的表达式,params为调用node节点的参数,initial表示被调用的node节点中输出流的初始值;
package-end语句的转化:将不同包中的程序移动到同一个包中,并为所述包中所有的标识符加上前缀package_id,然后将所述复杂同步语言程序中的package package_id<code>end语句删除,其中,package_id是包的标识符,<code>表示包中的代码;
open语句的转化:将所述复杂同步语言程序中的open package_id语句删除;
last语句的转化:将所述复杂同步语言程序中variable_id数据流的定义转化为非last定义数据流:variable_id:type,其中,type是数据流类型;同时增加一个新的数据流定义:var last_variable_id:type,其中,var是所述新的数据流定义的关键字,last_variable_id是所述新的数据流定义的标识符;并增加等式:last_variable_id=init_value->pre(variable_id),其中,init_value是初始值,最后将所述复杂同步语言程序所有等式中出现的last’variable_id替换为last_variable_id;
assume语句和guarantee语句的转化:将所述复杂同步语言程序中的assume语句和guarantee语句都转化为assert:condition,其中,condition为bool类型的表达式;
group语句的转化:将所述复杂同步语言程序中的group语句转化为多个新的数据流定义:var a1:t1,a2:t2,…,an:tn,其中a1~an是转化后新的数据流标识符,t1~tn是数据流类型;
sig语句的转化:将所述复杂同步语言程序中sig语句转化为一组新的数据流定义:varv1,v2,…,vn:bool,其中,v1~vn为bool类型的信号流;并将所述复杂同步语言程序中涉及信号流的等式r=’vi转化为:r=vi;
emit语句的转化:将所述复杂同步语言程序中的emit语句转化为:v1=true,v2=true,…,vn=true,其中,v1~vn是sig语句定义的信号流;
where语句的转化:将所述复杂同步语言程序中where语句替换为node node_id_type(v1:tv1;…;vi:type;…;vm:tvm)returns(r1:tr1;…;rj:type;…;rn:trn),其中,node_id_type为替换后得到的新节点的标识符,v1~vm为输入数据流,tv1~tvm为输入数据流的类型,r1~rn为输出数据流,tr1~trn为输出数据流的类型,type为float,integer或numeric;
有限状态自动机的转化:
所述有限状态自动机表示为一个五元组:M={Q,Σ,δ,Q0,F},其中:
Q={q0,q1,…,qn}是所述有限状态自动机的状态集合;
Σ={σ01,…,σm}是所述有限状态自动机的字母表,用于表示所述有限状态自动机接受的语言;
δ:Q×Σ→2Q是状态迁移函数;
Figure FDA0003503816310000021
是所述有限状态自动机的开始状态集合;
Figure FDA0003503816310000022
是所述有限状态自动机的终止状态集合;
从所述复杂同步语言程序中提取所述有限状态自动机的五元组,并基于该五元组将所述有限状态自动机转化为多组if-then-else语句;
s3:将上述步骤s2中经过化简转化得到的简单同步语言程序的抽象语法树转化为程序文件,然后输入到简单同步语言程序的模型检测器中进行验证并得出验证结果。
CN202011117839.5A 2020-10-19 2020-10-19 一种复杂同步语言程序的化简转化和自动验证方法 Active CN112306470B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011117839.5A CN112306470B (zh) 2020-10-19 2020-10-19 一种复杂同步语言程序的化简转化和自动验证方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011117839.5A CN112306470B (zh) 2020-10-19 2020-10-19 一种复杂同步语言程序的化简转化和自动验证方法

Publications (2)

Publication Number Publication Date
CN112306470A CN112306470A (zh) 2021-02-02
CN112306470B true CN112306470B (zh) 2022-04-08

Family

ID=74327869

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011117839.5A Active CN112306470B (zh) 2020-10-19 2020-10-19 一种复杂同步语言程序的化简转化和自动验证方法

Country Status (1)

Country Link
CN (1) CN112306470B (zh)

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101261604A (zh) * 2008-04-09 2008-09-10 中兴通讯股份有限公司 一种软件质量评价装置及软件质量评价的定量分析方法

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7640536B1 (en) * 2005-09-27 2009-12-29 Rockwell Collins, Inc. Variable graph minimization for improved model-checking performance
CN103150200B (zh) * 2013-04-08 2016-08-03 西安电子科技大学 一种c语言到msvl语言的转换方法
CN104423953B (zh) * 2013-09-04 2018-07-13 中国石油天然气股份有限公司 一种scada 系统定时数据处理脚本执行系统及方法
CN103646194B (zh) * 2013-11-29 2016-04-06 北京广利核系统工程有限公司 一种基于形式化验证的同步数据流程序的可信排序方法
CN106933566A (zh) * 2017-01-24 2017-07-07 北京广利核系统工程有限公司 图形组态语言转换方法及装置
CN108037913B (zh) * 2017-12-21 2021-08-17 西安邮电大学 xUML4MC模型到MSVL语言程序的转换方法、计算机可读存储介质
US10782936B1 (en) * 2019-01-30 2020-09-22 Architecture Technology Corporation Programming migration system and methods
CN111736846B (zh) * 2020-06-15 2021-06-22 南京航空航天大学 一种面向动态分析的源代码插桩改进方法

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101261604A (zh) * 2008-04-09 2008-09-10 中兴通讯股份有限公司 一种软件质量评价装置及软件质量评价的定量分析方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
同步语言Lustre的编译前端的设计与实现;宋宇婷;孙小祥;冉丹;《计算机技术与发展》;20200228;正文33-36页 *

Also Published As

Publication number Publication date
CN112306470A (zh) 2021-02-02

Similar Documents

Publication Publication Date Title
Pynadath et al. Generalized queries on probabilistic context-free grammars
CN111104106A (zh) 集成业务流程与通讯报文的可视化开发方法、系统及介质
Berzins et al. Using transformations in specification-based prototyping
US20040154009A1 (en) Structuring program code
CN114173355B (zh) 一种设计运行态分离的网络指令动态执行方法及系统
Sanchez et al. Bigraphical modelling of architectural patterns
Dotti et al. Verification of distributed object-based systems
CN112463628B (zh) 一种基于模型基框架的自主无人系统软件自适应演化方法
Dillon et al. Constrained expressions: Toward broad applicability of analysis methods for distributed software systems
US20030233640A1 (en) Structuring program code
CN112306470B (zh) 一种复杂同步语言程序的化简转化和自动验证方法
Posse et al. Processing causal block diagrams with graphgrammars in atom3
Hoare et al. A calculus of space, time, and causality: its algebra, geometry, logic
Škrbic et al. The PFSQL query execution process
Harper et al. Implementation issues in the development of the PARSEC parser
Waters A Knowledge-Based Program Editor.
Pahl Components, contracts, and connectors for the unified modelling language UML
Di Martino Algorithmic concept recognition to support high performance code reengineering
de Boer et al. Axiomatic characterization of trace reachability for concurrent objects
Peschanski et al. When concurrent control meets functional requirements, or Z+ Petri-Nets
Salah et al. Formal composition of distributed scenarios
Liangfu et al. Multiple dependence representation of attention graph convolutional network relation extraction model
Colin et al. Temporal logic based static analysis for non-uniform behaviours
Papaefstathiou et al. An introduction to the CHIP3S language for characterising parallel systems in performance studies
Silvaši et al. Fully automatic modular theorem prover with code generation support

Legal Events

Date Code Title Description
PB01 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