一种选择语句优化编译方法技术

技术编号:16216225 阅读:30 留言:0更新日期:2017-09-15 22:23
本发明专利技术公开一种选择语句优化编译方法。在语义分析阶段,针对IEC61131‑3的ST(结构化文本)语言的CASE(选择)语句进行优化编译,当判定CASE语句的各个分支求值表达式为单个常量模式时,采用直接跳转表的方式形成指令序列;当CASE分支求值表达式为多个常量或常量区间时,采用表达式短路求值和跳转表相结合的方式形成指令序列。本发明专利技术方法提高了ST语言中选择语句的翻译后指令执行的效率。

Method for optimizing and compiling selected statements

The invention discloses a method for optimizing and compiling a selection statement. In the semantic analysis phase, according to the IEC61131 3 ST (structured text language) CASE (select) statements are recompiled when the various branches of the CASE statement to determine evaluation expression for a single constant mode when using direct jump table to form a sequence of instructions; when the CASE branch evaluation expression for multiple constants or constant interval using the expression, short-circuit and jump table combination form a sequence of instructions. The method of the invention improves the efficiency of the post instruction execution of the selected statement in the ST language.

【技术实现步骤摘要】
一种选择语句优化编译方法
本专利技术属于编译器处理领域,具体涉及一种IEC61131-3结构化文本编程语言选择语句编译优化的方法。
技术介绍
在工业控制领域中,IEC61131-3是通用的国际标准,该标准定义了结构化文本ST的语法和文法,通常将ST语言翻译为二进制中间指令,然后解释执行。在ST语言中,CASE选择语句是使用频率较高的语句,ST语言定义的CASE语句文法为:CASEexpressionOFcase_value1:statementlist1case_value2:statementlist2case_valueN:statementlist2ELSEstatementlistN+1ENDCASE;例如:CASEVarOF1:statementlist1;(*Var=1执行语句1,*)2,3:statementlist2;(*Var=2或3执行语句2*)10..20:statementlist3;(*10<=Var<=20执行语句3*)25,30..40:statementlist4;(*Var=25或30<=Var<=40执行语句5*)ELSEstatementlistN+1;(*上述分支条件不满足,执行该语句*)ENDCASE;每个case分支的求值表达式可以是单个常量,可以是通过逗号,并列的多个常量,或通过..表示的范围。这种文法定义和PASCAL、C语言的定义存在较大不同,不能直接使用基于跳转表、查找表的翻译方法。通常的方法是转换为IF-ELSEIF-ELSE的等价语句,然后进行翻译。由于工业实时控制领域,对指令的运行效率要求极高,需要对CASE语句进行优化翻译。在实际使用过程中,选择语句的分支求值表达式在极大多数的情况下是常量,故在语义阶段,可对求值表达式进行类型分析,当所有分支的求值表达式都是单个常量时,可使用跳转表的翻译方法;当存在1个分支的求值表达式是多个常量或常量区间时,根据连接符号(,和..)的功能定义,可在跳转表中插入短路求值指令,提高执行效率。本案由此产生。
技术实现思路
本专利技术的目的是克服现有技术的不足,提高IEC61131-3标准的CASE(选择)语句执行效率,提供一种选择语句优化翻译方法。为了实现该目的,本专利技术采用如下技术方案,其特征在于,对于基于IEC61131-3标准的ST结构化文本语言的CASE选择语句进行编译,根据CASE(选择)语句的各个分支求值表达式类型,采用对应的优化翻译模式,具体包括如下内容:当各个分支求值表达式都是单个常量时,采用直接跳转表翻译模式;当至少存在1个分支求值表达式是多个常量或常量区间时,采用短路求值和跳转表混合的翻译模式。进一步地,当CASE(选择)语句的各个分支求值表达式都是单个常量值时,基于直接跳转表翻译模式的实现步骤为:a)在翻译每个分支前,记录当前分支的指令的行号;b)记录当前分支与分支标号的对应关系;c)在一遍扫描过程中,形成各个分支的执行指令;d)扫描完毕后,将b步骤中得到的分支与分支标号的对应关系生成跳转表(跳转表由跳转指令及其他指令组成),并将跳转指令插入到执行指令前面。进一步地,当存在1个分支求值表达式是多个变量时(即分支表达式存在逗号,或连续2个点号..),将该分支的求值表达式进行短路求值计算,在跳转表中插入短路求值指令,包括:a)对于形如“CASEVarOFa,b:”基于逗号并列的求值表达式,形成或序列的短路求值跳转指令;b)对于形如“CASEVarOFa..b:”基于区间的求值表达式,形成与序列的短路求值跳转指令;c)对于形如“CASEVarOFa,b,c..d”存在多个逗号的求值表达式,以逗号为间隔,间隔之间形成或序列的短路求值跳转指令。读取ST代码文本,进行词法、语法、语义分析,针对“CASEexpressionOF…END_CASE;”的文法,提取各CASE选择语句序列,获取CASE选择语句的各个分支的求值表达式,判断各个分支求值表达式类型。CASE选择语句翻译后的指令包括跳转表和执行指令。跳转表中的标号和某个分支的执行指令标号对应;按照CASE选择语句分支的顺序,进行逐个求值表达式计算和判断,当条件满足时跳转到指定的执行指令处执行。采用上述方案后,本专利技术具有如下有益效果:在语义分析阶段,判断CASE分支的表达式类型,当所有分支为单个常量时,采用直接跳转表的高效翻译方法,当存在复合表达式时,转换为逻辑表达式进行短路求值,在跳转表中插入短路求值指令,显著提高了ST语言中CASE语句翻译后指令序列的执行效率,适用于对实时性要求高的工业控制领域。附图说明图1是本专利技术中CASE(选择)语句优化编译原理图;图2是本专利技术中CASE(选择)语句的跳转表原理图;图3是本专利技术中CASE分支基于短路求值的表达式跳转表指令示例图。具体实施方式以下将结合附图,对本专利技术的技术方案进行详细说明。先定义一套中间指令集,优选地,采用三地址码方式。例如je为相等跳转指令,使用示例为jeVara,LableX,Var表示源变量地址,a为比较变量地址,LabelX为跳转标号值。ge为大于比较指令,le为小于比较指令,and为逻辑与运算指令,or为逻辑或运算指令。具体实现方式如图1所示,读取ST代码文本,进行词法、语法、语义分析,针对“CASEexpressionOF…END_CASE;”的文法,提取各CASE语句序列,获取CASE分支的求值表达式,判断各个分支求值表达式类型,当各个分支求值表达式都是单个常量时,采用直接跳转表翻译模式;当存在1个分支求值表达式是多个常量或常量区间时,采用短路求值和跳转表混合的翻译模式。CASE(选择)语句的跳转表原理如图2所示,CASE语句翻译后的指令包括跳转表和执行指令。跳转表中的标号和某个分支的执行指令标号对应。按照CASE分支的顺序,进行逐个求值表达式计算和判断,当条件满足时跳转到指定的执行语句指令处执行。在语义分析阶段,分析出选择语句(CASE)的各个分支都是单个常量值时,可采用高效率的基于直接跳转表翻译模式,其实现步骤为:a)在翻译每个分支前,记录当前分支的指令的行号;b)记录当前分支与分支标号的对应关系;c)在一遍扫描过程中,形成各个分支的执行指令;d)扫描完毕后,将b)步骤中得到的分支与分支标号的对应关系生成跳转表(跳转表由跳转指令及其他指令组成),并将跳转指令插入到执行指令前面。优选地,单个变量求值的跳转表指令范式为:(je,Var,a,LabelX),其中je为相等跳转指令,即当变量Var的值为a时跳转到标号为LabelX的指令处执行。在语义分析阶段,分析出存在至少1个分支求值表达式是多个常量或常量区间时(即分支表达式存在逗号,或连续2个点号..),将该分支的求值表达式进行短路求值计算,在跳转表中插入短路求值指令,包括:a)对于形如“CASEVarOFa,b:”基于逗号并列的求值表达式,形成或序列的短路求值跳转指令。优选地,2个序列并列的求值的跳转表指令范式为:(je,Var,a,LabelX)(je,Var,b,LabelX)只要有1个条件满足,就短路求值,直接跳转。b)对于形如“CASEVarOFa..b:”基于区间的求值表达式,形成与序列的短路求值跳转本文档来自技高网
...
一种选择语句优化编译方法

【技术保护点】
一种选择语句优化编译方法,其特征在于,对于基于IEC61131‑3标准的ST结构化文本语言的CASE选择语句进行编译,根据CASE选择语句的各个分支的求值表达式类型,采用如下对应的优化翻译模式:当各个分支求值表达式都是单个常量时,采用直接跳转表翻译模式;当至少存在1个分支求值表达式是多个常量或常量区间时,采用短路求值和跳转表混合的翻译模式。

【技术特征摘要】
1.一种选择语句优化编译方法,其特征在于,对于基于IEC61131-3标准的ST结构化文本语言的CASE选择语句进行编译,根据CASE选择语句的各个分支的求值表达式类型,采用如下对应的优化翻译模式:当各个分支求值表达式都是单个常量时,采用直接跳转表翻译模式;当至少存在1个分支求值表达式是多个常量或常量区间时,采用短路求值和跳转表混合的翻译模式。2.如权利要求1所述的一种选择语句优化编译方法,其特征在于,当选择语句的各个分支求值表达式都是单个常量值时,直接跳转表翻译模式的步骤为:a)在翻译每个分支前,记录当前分支的指令的行号;b)记录当前分支与分支标号的对应关系;c)在一遍扫描过程中,形成各个分支的执行指令;d)扫描完毕后,将b)步骤中得到的分支与分支标号的对应关系生成包含有跳转指令的跳转表,并将跳转指令插入到执行指令前面。3.如权利要求1所述的一种选择语句优化编译方法,其特征在于,当存在1个分支求值表达式是多个常量或常量区间时,将该分支的求值表达式...

【专利技术属性】
技术研发人员:张磊陈宏君周磊谭良良刘克金文继锋徐卫峰吴波
申请(专利权)人:南京南瑞继保电气有限公司南京南瑞继保工程技术有限公司
类型:发明
国别省市:江苏,32

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1