两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

一種選擇語(yǔ)句優(yōu)化編譯方法與流程

文檔序號(hào):11250679閱讀:508來(lái)源:國(guó)知局
一種選擇語(yǔ)句優(yōu)化編譯方法與流程

本發(fā)明屬于編譯器處理領(lǐng)域,具體涉及一種iec61131-3結(jié)構(gòu)化文本編程語(yǔ)言選擇語(yǔ)句編譯優(yōu)化的方法。



背景技術(shù):

在工業(yè)控制領(lǐng)域中,iec61131-3是通用的國(guó)際標(biāo)準(zhǔn),該標(biāo)準(zhǔn)定義了結(jié)構(gòu)化文本st的語(yǔ)法和文法,通常將st語(yǔ)言翻譯為二進(jìn)制中間指令,然后解釋執(zhí)行。在st語(yǔ)言中,case選擇語(yǔ)句是使用頻率較高的語(yǔ)句,st語(yǔ)言定義的case語(yǔ)句文法為:

caseexpressionof

case_value1:statementlist1

case_value2:statementlist2

case_valuen:statementlist2

elsestatementlistn+1

endcase;

例如:

casevarof

1:statementlist1;(*var=1執(zhí)行語(yǔ)句1,*)

2,3:statementlist2;(*var=2或3執(zhí)行語(yǔ)句2*)

10..20:statementlist3;(*10<=var<=20執(zhí)行語(yǔ)句3*)

25,30..40:statementlist4;(*var=25或30<=var<=40執(zhí)行語(yǔ)句5*)

elsestatementlistn+1;(*上述分支條件不滿足,執(zhí)行該語(yǔ)句*)

endcase;

每個(gè)case分支的求值表達(dá)式可以是單個(gè)常量,可以是通過(guò)逗號(hào),并列的多個(gè)常量,或通過(guò)..表示的范圍。這種文法定義和pascal、c語(yǔ)言的定義存在較大不同,不能直接使用基于跳轉(zhuǎn)表、查找表的翻譯方法。通常的方法是轉(zhuǎn)換為if-elseif-else的等價(jià)語(yǔ)句,然后進(jìn)行翻譯。由于工業(yè)實(shí)時(shí)控制領(lǐng)域,對(duì)指令的運(yùn)行效率要求極高,需要對(duì)case語(yǔ)句進(jìn)行優(yōu)化翻譯。在實(shí)際使用過(guò)程中,選擇語(yǔ)句的分支求值表達(dá)式在極大多數(shù)的情況下是常量,故在語(yǔ)義階段,可對(duì)求值表達(dá)式進(jìn)行類型分析,當(dāng)所有分支的求值表達(dá)式都是單個(gè)常量時(shí),可使用跳轉(zhuǎn)表的翻譯方法;當(dāng)存在1個(gè)分支的求值表達(dá)式是多個(gè)常量或常量區(qū)間時(shí),根據(jù)連接符號(hào)(,和..)的功能定義,可在跳轉(zhuǎn)表中插入短路求值指令,提高執(zhí)行效率。本案由此產(chǎn)生。



技術(shù)實(shí)現(xiàn)要素:

本發(fā)明的目的是克服現(xiàn)有技術(shù)的不足,提高iec61131-3標(biāo)準(zhǔn)的case(選擇)語(yǔ)句執(zhí)行效率,提供一種選擇語(yǔ)句優(yōu)化翻譯方法。

為了實(shí)現(xiàn)該目的,本發(fā)明采用如下技術(shù)方案,其特征在于,對(duì)于基于iec61131-3標(biāo)準(zhǔn)的st結(jié)構(gòu)化文本語(yǔ)言的case選擇語(yǔ)句進(jìn)行編譯,根據(jù)case(選擇)語(yǔ)句的各個(gè)分支求值表達(dá)式類型,采用對(duì)應(yīng)的優(yōu)化翻譯模式,具體包括如下內(nèi)容:

當(dāng)各個(gè)分支求值表達(dá)式都是單個(gè)常量時(shí),采用直接跳轉(zhuǎn)表翻譯模式;

當(dāng)至少存在1個(gè)分支求值表達(dá)式是多個(gè)常量或常量區(qū)間時(shí),采用短路求值和跳轉(zhuǎn)表混合的翻譯模式。

進(jìn)一步地,當(dāng)case(選擇)語(yǔ)句的各個(gè)分支求值表達(dá)式都是單個(gè)常量值時(shí),基于直接跳轉(zhuǎn)表翻譯模式的實(shí)現(xiàn)步驟為:

a)在翻譯每個(gè)分支前,記錄當(dāng)前分支的指令的行號(hào);

b)記錄當(dāng)前分支與分支標(biāo)號(hào)的對(duì)應(yīng)關(guān)系;

c)在一遍掃描過(guò)程中,形成各個(gè)分支的執(zhí)行指令;

d)掃描完畢后,將b步驟中得到的分支與分支標(biāo)號(hào)的對(duì)應(yīng)關(guān)系生成跳轉(zhuǎn)表(跳轉(zhuǎn)表由跳轉(zhuǎn)指令及其他指令組成),并將跳轉(zhuǎn)指令插入到執(zhí)行指令前面。

進(jìn)一步地,當(dāng)存在1個(gè)分支求值表達(dá)式是多個(gè)變量時(shí)(即分支表達(dá)式存在逗號(hào),或連續(xù)2個(gè)點(diǎn)號(hào)..),將該分支的求值表達(dá)式進(jìn)行短路求值計(jì)算,在跳轉(zhuǎn)表中插入短路求值指令,包括:

a)對(duì)于形如“casevarofa,b:”基于逗號(hào)并列的求值表達(dá)式,形成或序列的短路求值跳轉(zhuǎn)指令;

b)對(duì)于形如“casevarofa..b:”基于區(qū)間的求值表達(dá)式,形成與序列的

短路求值跳轉(zhuǎn)指令;

c)對(duì)于形如“casevarofa,b,c..d”存在多個(gè)逗號(hào)的求值表達(dá)式,以逗號(hào)為間隔,間隔之間形成或序列的短路求值跳轉(zhuǎn)指令。

讀取st代碼文本,進(jìn)行詞法、語(yǔ)法、語(yǔ)義分析,針對(duì)“caseexpressionof…end_case;”的文法,提取各case選擇語(yǔ)句序列,獲取case選擇語(yǔ)句的各個(gè)分支的求值表達(dá)式,判斷各個(gè)分支求值表達(dá)式類型。

case選擇語(yǔ)句翻譯后的指令包括跳轉(zhuǎn)表和執(zhí)行指令。

跳轉(zhuǎn)表中的標(biāo)號(hào)和某個(gè)分支的執(zhí)行指令標(biāo)號(hào)對(duì)應(yīng);按照case選擇語(yǔ)句分支的順序,進(jìn)行逐個(gè)求值表達(dá)式計(jì)算和判斷,當(dāng)條件滿足時(shí)跳轉(zhuǎn)到指定的執(zhí)行指令處執(zhí)行。

采用上述方案后,本發(fā)明具有如下有益效果:在語(yǔ)義分析階段,判斷case分支的表達(dá)式類型,當(dāng)所有分支為單個(gè)常量時(shí),采用直接跳轉(zhuǎn)表的高效翻譯方法,當(dāng)存在復(fù)合表達(dá)式時(shí),轉(zhuǎn)換為邏輯表達(dá)式進(jìn)行短路求值,在跳轉(zhuǎn)表中插入短路求值指令,顯著提高了st語(yǔ)言中case語(yǔ)句翻譯后指令序列的執(zhí)行效率,適用于對(duì)實(shí)時(shí)性要求高的工業(yè)控制領(lǐng)域。

附圖說(shuō)明

圖1是本發(fā)明中case(選擇)語(yǔ)句優(yōu)化編譯原理圖;

圖2是本發(fā)明中case(選擇)語(yǔ)句的跳轉(zhuǎn)表原理圖;

圖3是本發(fā)明中case分支基于短路求值的表達(dá)式跳轉(zhuǎn)表指令示例圖。

具體實(shí)施方式

以下將結(jié)合附圖,對(duì)本發(fā)明的技術(shù)方案進(jìn)行詳細(xì)說(shuō)明。

先定義一套中間指令集,優(yōu)選地,采用三地址碼方式。例如je為相等跳轉(zhuǎn)指令,使用示例為jevara,lablex,var表示源變量地址,a為比較變量地址,labelx為跳轉(zhuǎn)標(biāo)號(hào)值。ge為大于比較指令,le為小于比較指令,and為邏輯與運(yùn)算指令,or為邏輯或運(yùn)算指令。

具體實(shí)現(xiàn)方式如圖1所示,讀取st代碼文本,進(jìn)行詞法、語(yǔ)法、語(yǔ)義分析,

針對(duì)“caseexpressionof…end_case;”的文法,提取各case語(yǔ)句序列,獲取case分支的求值表達(dá)式,判斷各個(gè)分支求值表達(dá)式類型,當(dāng)各個(gè)分支求值表達(dá)式都是單個(gè)常量時(shí),采用直接跳轉(zhuǎn)表翻譯模式;當(dāng)存在1個(gè)分支求值表達(dá)式是多個(gè)常量或常量區(qū)間時(shí),采用短路求值和跳轉(zhuǎn)表混合的翻譯模式。

case(選擇)語(yǔ)句的跳轉(zhuǎn)表原理如圖2所示,case語(yǔ)句翻譯后的指令包括跳轉(zhuǎn)表和執(zhí)行指令。跳轉(zhuǎn)表中的標(biāo)號(hào)和某個(gè)分支的執(zhí)行指令標(biāo)號(hào)對(duì)應(yīng)。按照case分支的順序,進(jìn)行逐個(gè)求值表達(dá)式計(jì)算和判斷,當(dāng)條件滿足時(shí)跳轉(zhuǎn)到指定的執(zhí)行語(yǔ)句指令處執(zhí)行。

在語(yǔ)義分析階段,分析出選擇語(yǔ)句(case)的各個(gè)分支都是單個(gè)常量值時(shí),可采用高效率的基于直接跳轉(zhuǎn)表翻譯模式,其實(shí)現(xiàn)步驟為:

a)在翻譯每個(gè)分支前,記錄當(dāng)前分支的指令的行號(hào);

b)記錄當(dāng)前分支與分支標(biāo)號(hào)的對(duì)應(yīng)關(guān)系;

c)在一遍掃描過(guò)程中,形成各個(gè)分支的執(zhí)行指令;

d)掃描完畢后,將b)步驟中得到的分支與分支標(biāo)號(hào)的對(duì)應(yīng)關(guān)系生成跳轉(zhuǎn)表(跳轉(zhuǎn)表由跳轉(zhuǎn)指令及其他指令組成),并將跳轉(zhuǎn)指令插入到執(zhí)行指令前面。

優(yōu)選地,單個(gè)變量求值的跳轉(zhuǎn)表指令范式為:(je,var,a,labelx),其中je為相等跳轉(zhuǎn)指令,即當(dāng)變量var的值為a時(shí)跳轉(zhuǎn)到標(biāo)號(hào)為labelx的指令處執(zhí)行。

在語(yǔ)義分析階段,分析出存在至少1個(gè)分支求值表達(dá)式是多個(gè)常量或常量區(qū)間時(shí)(即分支表達(dá)式存在逗號(hào),或連續(xù)2個(gè)點(diǎn)號(hào)..),將該分支的求值表達(dá)式進(jìn)行短路求值計(jì)算,在跳轉(zhuǎn)表中插入短路求值指令,包括:

a)對(duì)于形如“casevarofa,b:”基于逗號(hào)并列的求值表達(dá)式,形成或序列的短路求值跳轉(zhuǎn)指令。優(yōu)選地,2個(gè)序列并列的求值的跳轉(zhuǎn)表指令范式為:

(je,var,a,labelx)

(je,var,b,labelx)

只要有1個(gè)條件滿足,就短路求值,直接跳轉(zhuǎn)。

b)對(duì)于形如“casevarofa..b:”基于區(qū)間的求值表達(dá)式,形成與序列的

短路求值跳轉(zhuǎn)指令。優(yōu)選地,基于區(qū)間的求值表達(dá)式的跳轉(zhuǎn)表指令范式為:

(ge,temp1,var,a)

(le,temp2,var,b)

(and,temp3,temp1,temp2)

(jz,temp3,labelx)

其中g(shù)e為大于指令,le為小于指令,and為邏輯與指令,jz為非0跳轉(zhuǎn)指令,temp1、temp2、temp3為臨時(shí)變量,通過(guò)臨時(shí)變量緩存中間計(jì)算結(jié)果。

c)對(duì)于形如“casevarofa,b,c..d”存在多個(gè)逗號(hào)的求值表達(dá)式,以逗號(hào)為間隔,間隔之間形成或序列的短路求值跳轉(zhuǎn)指令。優(yōu)選地,“casea,b,c..d:”模式的等價(jià)表達(dá)式中間指令輸出算法:

1)根據(jù)逗號(hào),進(jìn)行拆分,獲取匹配判斷子序列seq[n]:abc..d

2)基于短路求值形成計(jì)算子序列的指令

intnum=0;//臨時(shí)變量個(gè)數(shù)

intseqlab[n];//各個(gè)子序列語(yǔ)句執(zhí)行入口標(biāo)簽

initlab(&seqlab,n);//給各個(gè)分支分配標(biāo)簽號(hào)

for(i=0;i<n;i++){

2.1)如果seq[i]是單變量,則輸出形如

(je,var,a,seqlabel[i]);

num+=1;

2.2)如果seq[i]是區(qū)間表達(dá)式,則輸出形如

(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;}

以上實(shí)施例僅為說(shuō)明本發(fā)明的技術(shù)思想,不能以此限定本發(fā)明的保護(hù)范圍,凡是按照本發(fā)明提出的技術(shù)思想,在技術(shù)方案基礎(chǔ)上所做的任何改動(dòng),均落入本發(fā)明保護(hù)范圍之內(nèi)。

當(dāng)前第1頁(yè)1 2 
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
康乐县| 南城县| 电白县| 五指山市| 柳州市| 巨野县| 澄迈县| 上犹县| 苏尼特左旗| 临邑县| 大港区| 鄂托克前旗| 南陵县| 嘉黎县| 图木舒克市| 盈江县| 巴彦县| 汉源县| 麟游县| 屯留县| 丽江市| 沁水县| 镇远县| 张掖市| 栖霞市| 夹江县| 江城| 嘉祥县| 曲周县| 安阳县| 永靖县| 株洲县| 广州市| 绥宁县| 长岛县| 新绛县| 建湖县| 绥芬河市| 弋阳县| 德安县| 晋江市|