CN107168761A - 一种选择语句优化编译方法 - Google Patents
一种选择语句优化编译方法 Download PDFInfo
- Publication number
- CN107168761A CN107168761A CN201710356936.1A CN201710356936A CN107168761A CN 107168761 A CN107168761 A CN 107168761A CN 201710356936 A CN201710356936 A CN 201710356936A CN 107168761 A CN107168761 A CN 107168761A
- Authority
- CN
- China
- Prior art keywords
- case
- branch
- evaluation
- instruction
- jump
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
- G06F8/4441—Reducing the execution time required by the program code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
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
本发明公开一种选择语句优化编译方法。在语义分析阶段,针对IEC61131‑3的ST(结构化文本)语言的CASE(选择)语句进行优化编译,当判定CASE语句的各个分支求值表达式为单个常量模式时,采用直接跳转表的方式形成指令序列;当CASE分支求值表达式为多个常量或常量区间时,采用表达式短路求值和跳转表相结合的方式形成指令序列。本发明方法提高了ST语言中选择语句的翻译后指令执行的效率。
Description
技术领域
本发明属于编译器处理领域,具体涉及一种IEC61131-3结构化文本编程语言选择语句编译优化的方法。
背景技术
在工业控制领域中,IEC61131-3是通用的国际标准,该标准定义了结构化文本ST的语法和文法,通常将ST语言翻译为二进制中间指令,然后解释执行。在ST语言中,CASE选择语句是使用频率较高的语句,ST语言定义的CASE语句文法为:
CASE expression OF
case_value1: statement list1
case_value2: statement list2
case_valueN: statement list2
ELSE statement listN+1
END CASE;
例如:
CASE Var OF
1: statement list1;(* Var=1执行语句1, *)
2,3: statement list2; (* Var=2或3执行语句2 *)
10..20: statement list3; (* 10<=Var<=20执行语句3*)
25,30..40: statement list4; (*Var=25或30<=Var<=40执行语句5 *)
ELSE statement listN+1;(* 上述分支条件不满足,执行该语句 *)
END CASE;
每个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)对于形如“CASE Var OF a,b:”基于逗号并列的求值表达式,形成或序列的短路求值跳转指令;
b)对于形如“CASE Var OF a..b:”基于区间的求值表达式,形成与序列的
短路求值跳转指令;
c) 对于形如“CASE Var OF a,b,c..d”存在多个逗号的求值表达式,以逗号为间隔,间隔之间形成或序列的短路求值跳转指令。
读取ST代码文本,进行词法、语法、语义分析,针对“CASE expression OF … END_CASE;”的文法,提取各CASE选择语句序列,获取CASE选择语句的各个分支的求值表达式,判断各个分支求值表达式类型。
CASE选择语句翻译后的指令包括跳转表和执行指令。
跳转表中的标号和某个分支的执行指令标号对应;按照CASE选择语句分支的顺序,进行逐个求值表达式计算和判断,当条件满足时跳转到指定的执行指令处执行。
采用上述方案后,本发明具有如下有益效果:在语义分析阶段,判断CASE分支的表达式类型,当所有分支为单个常量时,采用直接跳转表的高效翻译方法,当存在复合表达式时,转换为逻辑表达式进行短路求值,在跳转表中插入短路求值指令,显著提高了ST语言中CASE语句翻译后指令序列的执行效率,适用于对实时性要求高的工业控制领域。
附图说明
图1是本发明中CASE(选择)语句优化编译原理图;
图2是本发明中CASE(选择)语句的跳转表原理图;
图3是本发明中CASE分支基于短路求值的表达式跳转表指令示例图。
具体实施方式
以下将结合附图,对本发明的技术方案进行详细说明。
先定义一套中间指令集,优选地,采用三地址码方式。例如je为相等跳转指令,使用示例为je Var a,LableX,Var表示源变量地址,a为比较变量地址,LabelX为跳转标号值。ge为大于比较指令,le为小于比较指令,and为逻辑与运算指令,or为逻辑或运算指令。
具体实现方式如图1所示,读取ST代码文本,进行词法、语法、语义分析,
针对“CASE expression OF … 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)对于形如“CASE Var OF a,b:”基于逗号并列的求值表达式,形成或序列的短路求值跳转指令。优选地,2个序列并列的求值的跳转表指令范式为:
(je, Var, a, LabelX)
(je, Var, b, LabelX)
只要有1个条件满足,就短路求值,直接跳转。
b)对于形如“CASE Var OF a..b:”基于区间的求值表达式,形成与序列的
短路求值跳转指令。优选地,基于区间的求值表达式的跳转表指令范式为:
(ge, Temp1, Var, a)
(le, Temp2, Var, b)
(and, Temp3, Temp1, Temp2)
(jz, Temp3, LabelX)
其中ge为大于指令,le为小于指令,and为逻辑与指令,jz为非0跳转指令,Temp1、Temp2、Temp3为临时变量,通过临时变量缓存中间计算结果。
c)对于形如“CASE Var OF a,b,c..d”存在多个逗号的求值表达式,以逗号为间隔,间隔之间形成或序列的短路求值跳转指令。优选地,“CASE a,b,c..d: ”模式的等价表达式中间指令输出算法:
1)根据逗号,进行拆分, 获取匹配判断子序列seq[N]:a b c..d
2)基于短路求值形成计算子序列的指令
int num = 0;//临时变量个数
int seqLab[N];//各个子序列语句执行入口标签
initLab(&seqLab, N); //给各个分支分配标签号
for(i=0; i<N; i++) {
2.1)如果seq[i]是单变量,则输出形如
(je, Var, a, SeqLabel[i]);
num+=1;
2.2)如果seq[i]是区间表达式,则输出形如
(ge, Temp[num], Var, c)
(le, Temp[num+1], Var, d)
(and, Temp[num+2], Temp[num], Temp[num+1])
(jz, Temp[num+2],SeqLabel[i]);
num +=3; }
以上实施例仅为说明本发明的技术思想,不能以此限定本发明的保护范围,凡是按照本发明提出的技术思想,在技术方案基础上所做的任何改动,均落入本发明保护范围之内。
Claims (6)
1.一种选择语句优化编译方法,其特征在于,对于基于IEC61131-3标准的ST结构化文本语言的CASE选择语句进行编译,根据CASE选择语句的各个分支的求值表达式类型,采用如下对应的优化翻译模式:
当各个分支求值表达式都是单个常量时,采用直接跳转表翻译模式;
当至少存在1个分支求值表达式是多个常量或常量区间时,采用短路求值和跳转表混合的翻译模式。
2.如权利要求1所述的一种选择语句优化编译方法,其特征在于,当选择语句的各个分支求值表达式都是单个常量值时,直接跳转表翻译模式的步骤为:
a) 在翻译每个分支前,记录当前分支的指令的行号;
b) 记录当前分支与分支标号的对应关系;
c) 在一遍扫描过程中,形成各个分支的执行指令;
d) 扫描完毕后,将b)步骤中得到的分支与分支标号的对应关系生成包含有跳转指令的跳转表,并将跳转指令插入到执行指令前面。
3.如权利要求1所述的一种选择语句优化编译方法,其特征在于,当存在1个分支求值表达式是多个常量或常量区间时,将该分支的求值表达式进行短路求值计算,在跳转表中插入短路求值指令,包括:
a)对于基于逗号并列的分支求值表达式,形成或序列的短路求值跳转指令;
b)对于基于区间的分支求值表达式,形成与序列的短路求值跳转指令;
c)对于存在多个逗号的分支求值表达式,以逗号为间隔,间隔之间形成或序列的短路求值跳转指令。
4.如权利要求1所述的一种选择语句优化编译方法,其特征在于,读取ST代码文本,进行词法、语法、语义分析,针对“CASE expression OF … END_CASE;”的文法,提取各CASE选择语句序列,获取CASE选择语句的各个分支的求值表达式,判断各个分支求值表达式类型。
5.如权利要求1所述的一种选择语句优化编译方法,其特征在于,CASE选择语句翻译后的指令包括跳转表和执行指令。
6.如权利要求1所述的一种选择语句优化编译方法,其特征在于,跳转表中的标号和某个分支的执行指令标号对应;按照CASE选择语句分支的顺序,进行逐个求值表达式计算和判断,当条件满足时跳转到指定的执行指令处执行。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710356936.1A CN107168761B (zh) | 2017-05-19 | 2017-05-19 | 一种选择语句优化编译方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710356936.1A CN107168761B (zh) | 2017-05-19 | 2017-05-19 | 一种选择语句优化编译方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107168761A true CN107168761A (zh) | 2017-09-15 |
CN107168761B CN107168761B (zh) | 2019-10-29 |
Family
ID=59815678
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710356936.1A Active CN107168761B (zh) | 2017-05-19 | 2017-05-19 | 一种选择语句优化编译方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107168761B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108733410A (zh) * | 2018-04-13 | 2018-11-02 | 南京南瑞继保电气有限公司 | 一种指令优化方法 |
CN114237612A (zh) * | 2021-12-03 | 2022-03-25 | 龙芯中科技术股份有限公司 | 程序代码的编译方法、装置、电子设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101587445A (zh) * | 2009-06-19 | 2009-11-25 | 国网电力科学研究院 | 一种plc编译执行方法 |
CN101706734A (zh) * | 2009-11-10 | 2010-05-12 | 中国科学院计算技术研究所 | 二进制翻译中间接跳转指令的翻译方法及其系统 |
CN104267999A (zh) * | 2014-09-26 | 2015-01-07 | 浙江中控技术股份有限公司 | 一种对控制程序进行编译的方法和装置 |
-
2017
- 2017-05-19 CN CN201710356936.1A patent/CN107168761B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101587445A (zh) * | 2009-06-19 | 2009-11-25 | 国网电力科学研究院 | 一种plc编译执行方法 |
CN101706734A (zh) * | 2009-11-10 | 2010-05-12 | 中国科学院计算技术研究所 | 二进制翻译中间接跳转指令的翻译方法及其系统 |
CN104267999A (zh) * | 2014-09-26 | 2015-01-07 | 浙江中控技术股份有限公司 | 一种对控制程序进行编译的方法和装置 |
Non-Patent Citations (3)
Title |
---|
ASHUTOSH KABRA等: ""ST to MISRA-C Translator and Proposed Changes in IEC 61131-3 Standard"", 《INTERNATIONAL JOURNAL OF INFORMATION AND ELECTRONIC ENGINEERING》 * |
梁世武 等: ""基于IEC61131-3标准的ST语言文法分析器的实现与应用"", 《仪器仪表标准化与计量》 * |
苏铭 等: ""代码翻译中case语句的识别和恢复"", 《计算机应用》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108733410A (zh) * | 2018-04-13 | 2018-11-02 | 南京南瑞继保电气有限公司 | 一种指令优化方法 |
CN114237612A (zh) * | 2021-12-03 | 2022-03-25 | 龙芯中科技术股份有限公司 | 程序代码的编译方法、装置、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN107168761B (zh) | 2019-10-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110825384A (zh) | 一种基于llvm的st语言编译方法及编译系统和编译器 | |
US5386569A (en) | Programmable controller having directly executable CPU instructions | |
CN108710575A (zh) | 基于路径覆盖测试用例自动生成的单元测试方法 | |
US8056062B2 (en) | Methods and systems for converting application code in turbine control systems | |
CN101894236B (zh) | 基于摘要语法树和语义匹配的软件同源性检测方法及装置 | |
CN106648681A (zh) | 一种可编程语言编译装载系统及方法 | |
CN101587445A (zh) | 一种plc编译执行方法 | |
CN107168761A (zh) | 一种选择语句优化编译方法 | |
CN104281096B (zh) | 数控代码编译器的构造方法 | |
CN104820393B (zh) | 一种基于plc梯形图矩阵编译解释方法 | |
CN110737439B (zh) | 基于规则文件的设备控制系统及方法 | |
CN107015840A (zh) | 一种解析器的快速执行方法及快速执行系统 | |
CN107340995A (zh) | 一种牵引控制应用软件开发系统 | |
CN107301079A (zh) | 一种计算机程序语言的编译方法和编译器 | |
CN107885504B (zh) | 一种异构的多平台系统控制逻辑一致性校验的方法 | |
CN116501330A (zh) | 一种基于解耦架构的文本类编程语言编译方法 | |
CN113050948B (zh) | 动态库优化方法、装置、设备及存储介质 | |
CN102937910A (zh) | 控制算法跨平台转换系统及方法 | |
EP0638862B1 (en) | Method and system for processing language | |
CN106126311A (zh) | 一种基于代数演算的中间代码优化方法 | |
CN101382783A (zh) | 可编程逻辑控制器的程序机械码编译方法 | |
CN112799724A (zh) | 一种稳定控制装置策略表解析计算方法及装置 | |
CN114462430A (zh) | 词条提取方法及装置 | |
Barbe | Techniques for automatic program translation | |
CN113885883A (zh) | 一种面向虚拟化的基于规则学习的二进制翻译方法 |
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 |