CN115167860A - 将程序码于不同程序语言间进行转换及优化的方法 - Google Patents
将程序码于不同程序语言间进行转换及优化的方法 Download PDFInfo
- Publication number
- CN115167860A CN115167860A CN202110356595.4A CN202110356595A CN115167860A CN 115167860 A CN115167860 A CN 115167860A CN 202110356595 A CN202110356595 A CN 202110356595A CN 115167860 A CN115167860 A CN 115167860A
- Authority
- CN
- China
- Prior art keywords
- block
- program
- statement
- blocks
- condition
- 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.)
- Pending
Links
Images
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
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
本发明涉及一种将程序码于不同程序语言间进行转换及优化的方法。一种程序码的转换及优化方法,包括:取得来源程序片段;取得来源程序片段对应的抽象语法树;通过语法标记解析器递回巡访抽象语法树中的多个节点;依据被巡访的节点查询语法标记对应表以产生对应至目的程序语言的语法标记;通过语意组合器递回巡访抽象语法树中的多个区块;将区块的内容及语法标记与上一个被巡访的区块的内容及语法标记进行组合以产生并更新中间结果;于递回结束后基于中间结果产生目的程序片段;及,通过语意优化器巡访目的程序片段中的复数语意组合,并对复数语意组合进行化简以产生优化后目的程序片段。
Description
技术领域
本发明涉及程序语言,尤其涉及一种将程序码于不同的程序语言架构之间进行转换并且进行优化的方法。
背景技术
目前在工业自动化领域中,开发人员可以使用多种不同的程序语言来进行开发,而各种程序语言是分别针对不同学科背景人士与不同产业领域所各别提供的。
具体地,工业自动化领域中一般常见的程序语言,包括有传统阶梯图(LadderDiagram)、功能块图(Function Block Diagram)、连续功能图(Continuous FunctionChart)、顺序功能图(Sequential Function Chart)、结构化文字(Structured Text)、PASCAL、Java、C/C++/C#、Python、Objective-C、Lua等,并且一般可被区分为图形程序语言及文字程序语言。
如上所述,各种不同的程序语言是分别具有不同的使用族群,因此并非所有的开发人员都会使用全部的程序语言。为了克服上述问题,目前市面上有部分的工控产品提供了可将程序码在少数图形程序语言之间进行转换的转换程序。
然而,现今市面上可见的转换程序主要仅针对图形程序语言所设计,无法将基于图形程序语言架构所编写完成的程序码逻辑转换为符合文字程序语言的架构并且具有同质性语意的程序码,无法将基于文字程序语言架构所编写完成的程序码逻辑转换为符合图形程序语言的架构并且具有同质性语意的程序码,并且也无法将程序码在不同的文字程序语言架构之间进行互换。
再者,上述转换程序仅能以一个完整的程序单元(Program Organization Units,POU)做为一个转换单位,而无法进行程序片段的转换,并且亦无法在转换后对目的程序码进行优化。因此,可能在语言转换后产生较不恰当的程序码,造成可编程逻辑控制器(Programmable Logic Controller,PLC)的暂存器、I/O点或存储器的浪费,并且使得所产生的PLC文件容量过大,进而提高了工业自动化产线整体的开发成本。
发明内容
本发明的主要目的,在于提供一种将程序码于不同程序语言间进行转换及优化的方法,可令使用者获取程序片段并在图形程序语言与文字程序语言之间任意进行转换以产生目的程序码,并于转换后自动对目的程序码执行优化。
为了实现上述的目的,本发明的转换及优化方法主要是应用于程序语言编辑器,并且包括下列步骤:
a)取得基于一来源程序语言所编写的一程序片段,其中该来源程序语言为图形程序语言或文字程序语言;
b)取得该程序片段对应的一抽象语法树(Abstract Syntax Tree,AST),其中该抽象语法树包括多个区块;
c)通过一语法标记解析器巡访该抽象语法树中的该多个区块的其中之一;
d)依据该被巡访的区块查询一语法标记对应表,以为该区块产生对应至一目的程序语言的一语法标记,其中该语法标记对应表记录该来源程序语言的复数语法与该目的程序语言的复数语法间的一对应关系,该目的程序语言为图形程序语言或文字程序语言;
e)于该多个区块皆被该语法标记解析器巡访并且产生该语法标记前,重复执行该步骤c及该步骤d;
f)于该多个区块皆被该语法标记解析器巡访并且产生该语法标记后,通过一语意组合器巡访该抽象语法树中的该多个区块的其中之一;
g)将该被巡访的区块的内容及该语法标记与上一个被巡访的区块的内容及该语法标记进行组合以产生一中间结果;
h)于该多个区块皆被该语意组合器巡访前,重复执行该步骤f及该步骤g以更新该中间结果;
i)于该多个区块皆被该语意组合器巡访后,依据更新后的该中间结果产生一目的程序片段;
j)通过一语意优化器巡访该目的程序片段中的多个语意组合,于该多个语意组合符合一条件等式时执行一等价置换程序并产生一优化后目的程序片段;及
k)于该程序语言编辑器上输出该优化后目的程序片段,其中该优化目的程序片段符合该目的程序语言。
相较于相关技术,本发明可将基于图形程序语言或文字程序语言编写的来源程序片段直接转换为符合其他程序语言的架构的目的程序片段,并且令目的程序片段与来源程序片段具有同质性的语意。借此,可大幅降低不同学科背景的人士进入工业自动化产业中的程序设计领域的门限,并且,提高可编程逻辑控制器(Programmable Logic Controller,PLC)的编程效率,同时益于缩短专案的整合时间整本。
并且,本发明自动对转换后的目的程序片段执行优化,借此还可有效节省PLC的暂存器、I/O点的使用量以及存储器的空间,缩小所产生的PLC配置文件的容量,降低了工业自动化产线整体的开发成本。
附图说明
图1为本发明的转换及优化流程图的第一具体实施例。
图2为本发明的转换情境示意图。
图3为程序语言的区块示意图。
图4A为程序语言的条件陈述示意图。
图4B为程序语言的条件运算示意图。
图4C为程序语言的一般陈述示意图。
图5为本发明的转换及优化流程图的第二具体实施例。
图6为本发明的递回巡访示意图的第一具体实施例。
图7为本发明的抽象语法树的示意图的第一具体实施例。
图8A为本发明的语法标记的第一流程图的第一具体实施例。
图8B为本发明的语法标记的第二流程图的第一具体实施例。
图9A为本发明的语意组合的第一流程图的第一具体实施例。
图9B为本发明的语意组合的第二流程图的第一具体实施例。
图10为本发明的转换示意图的第一具体实施例。
图11为不同程序语言的转换示意图。
图12为本发明的优化流程图的第一具体实施例。
图13为本发明的优化示意图的第一具体实施例。
图14A为本发明的优化流程图的第二具体实施例。
图14B为本发明的优化流程图的第三具体实施例。
图14C为本发明的优化流程图的第四具体实施例。
附图标记说明:
1…来源程序片段
11…第一巡访区块
12…第二巡访区块
13…第三巡访区块
14…语法标记
2…目的程序片段
21…第一节点
22…第二节点
23…第三节点
24…第四节点
25…第五节点
31…一般区块
32…连续区块
33…分支区块
41…条件陈述
42…条件运算
43…一般陈述
5…抽象语法树
6…目的程序片段
61…第一网络
62…第二网络
63…第三网络
64…第四网络
65…第五网络
71、73、75…优化前目的程序片段
72、74、76…优化后目的程序片段
S10~S15、S21~S31…转换及优化步骤
S41~S57…标记步骤
S60~S77…组合步骤
S80~S82…优化步骤
具体实施方式
兹就本发明的一优选实施例,配合附图,详细说明如后。
本发明公开了一种将程序码于不同程序语言间进行转换及优化的方法(下面将于说明书中简称为优化方法),所述优化方法主要应用于任一种程序语言的程序语言编辑器中,并且通过附加在所述程序语言编辑器中一支应用程序来实现。
具体地,本发明的优化方法是以程序码的方式撰写成一支可以独立运行并且可对程序码进行分析与处理的应用程序,并且,基于优化方法所要实现的功能,可将所述应用程序逻辑分割成做为语法标记解析器使用的第一子程序、做为语意组合器使用的第二子程序、以及做为语意优化器使用的第三子程序。值得一提的是,本发明中的上述语法标记解析器及语意组合器主要是对要进行分析与处理的程序码的抽象逻辑树(Abstract SyntaxTree,AST)进行分析与处理,但并不以此为限。
参阅图1及图2,其中图1为本发明的转换及优化流程图的第一具体实施例,图2为本发明的转换情境示意图。如图1所示,本发明的优化方法是先从程序语言编辑器中取得以来源程序语言的架构编写而成的待转换程序码(步骤S10),接着通过所述语法标记解析器对待转换程序码进行解析与处理(步骤S11),以替待转换程序码中的各个程序元件分别记录上对应至目的程序语言的架构的语法标记。接着,所述优化方法再通过所述语意组合器来对待转换程序码进行解析与处理(步骤S12),以对各个已完成语法标记的程序元件进行组合,进而产生符合目的程序语言的架构的转换后程序码(步骤S13)。
步骤S13后,本发明的优化方法再通过所述语意优化器对转换后程序码进行解析与处理(步骤S14),以对转换后程序码中包含的复数程序元件进行化简。最后,再于所述程序语言编辑器上输出化简后程序码(步骤S15)。
本发明的优化方法通过所述语意优化器来对转换后程序码进行化简,可以避免在转换过程中为了符合正规化的转换规则而产生较为复杂、冗长的转换后程序码。如此一来,可以有效节省可编程逻辑控制器(Programmable Logic Controller,PLC)的暂存器、I/O点的使用率以及存储器的空间。
如上所述,本发明的优化方法主要是针对程序码的抽象逻辑树(Abstract SyntaxTree,AST)进行分析与处理,而非直接对程序码的内容进行分析与处理,因此,可以达到将以图形程序语言编写的程序码转换为符合文字程序语言的架构或另一种图形程序语言的架构的程序码,并可将以文字程序语言编写的程序码转换为符合图形程序语言的架构或另一种文字程序语言的架构的程序码的主要目的。
于一实施例中,所述图形程序语言可例如包括传统阶梯图(Ladder Diagram)程序语言、功能块图(Function Block Diagram)程序语言、连续功能图(Continuous FunctionChart)程序语言与顺序功能图(Sequential Function Chart)程序语言等,所述文字程序语言可例如包括结构化文字(Structured Text)程序语言、PASCAL程序语言、Java程序语言、C/C++/C#程序语言、Python程序语言、Objective-C程序语言与Lua程序语言等,但不加以限定。
更具体地,所述语法标记解析器记录有至少一个正规化的语法标记对应表(图未标记),所述语法标记对应表中记录了一个程序语言的复数语法与其他多种程序语言的复数语法间的对应关系。通过所述语法标记对应表的查询,语法标记解析器可以将一段程序码中使用的多种语法于上述多种不同的程序语言之间进行转换。并且,当有新的程序语言出现时,只需要增添所述语法标记对应表的内容,即可令本发明的优化方法进一步适用于新的程序语言。借此,有效提高的本发明的优化方法的扩增弹性。
并且,如上述所,本发明的优化方法主要是对程序码中包含的各个程序元件分别进行分析与处理(即,对所述抽象语法树中的各个节点分别进行分析与处理,容后详述),因此,不但可将程序码中的一个完整的程序单元(Program Organization Units,POU)做为转换单位,亦可直接将逻辑完整的一个程序片段做为转换单元。借此,可有效提高所述优化方法的使用弹性以及使用效率。
值得一提的是,于部分实施例中,程序编辑人员并不需要将一个程序片段由来源程序语言的架构转换成目的程序语言的架构。于此情况下,本发明的优化方法仍可通过所述语意优化器直接对来源程序码进行分析与处理,借此在不执行转换程序的情况下,直接对来源程序码进行化简以产生优化后的目的程序码。
如图2所示,程序编辑人员可于电脑设备上开启第一程序语言编辑器。于第一程序语言编辑器上,程序编辑人员可以基于第一程序语言(图2中以阶梯图程序语言为例)开启或编写一段程序单元。并且,程序编辑人员还可于相同或不同电脑设备上开启第二程序语言编辑器。于第二程序语言编辑器上,程序编辑人员可基于第二程序语言(图2中以结构化文字程序语言为例)来开启另一种程序语言的专案。其中电脑设备可以是台式电脑、笔记本电脑、平板电脑或其他智能装置等,但本发明不限于此。
于此作业环境下,程序编辑人员可通过第一操作指令(例如通过键盘或鼠标进行复制或剪下),由第一程序语言编辑器上的程序单元中复制所需的一段逻辑完整的来源程序片段1,并且再通过第二操作指令(例如通过键盘或鼠标进行贴上),将所述来源程序片段1贴上至第二程序语言编辑器上的所述专案中。本发明的其中一个技术特征在于,于进行所述贴上程序时,本发明的优化方法可自动检测所述专案采用的第二程序语言,自动将所述来源程序片段1转换为符合第二程序语言的架构的目的程序片段2并且进行优化后,再将转换并优化后的目的程序片段2贴上至所述专案中,以令程序编辑人员在所述专案中可以直接使用转换并优化后的目的程序片段2。
如前文所述,本发明的优化方法是通过一或多个语法标记对应表来进行不同程序语言间的语法的对应,进而达到在不同程序语言架构之间转换程序码的目的。因此,转换前的来源程序片段1与转换后的目的程序片段2,为具有同质性语意的两个程序片段2。换句话说,在所述第二程序语言编辑器上执行所述目的程序片段2后,可达到与在所述第一程序语言编辑器上执行所述来源程序片段1完全相同的结果。
续请同时参阅图3及图4A至图4C,其中图3为程序语言的区块示意图,图4A至图4C分别为程序语言的条件陈述示意图、条件运算示意图与一般陈述示意图。
于开始对本发明的优化方法进行详细说明前,先通过图3及图4A至图4C的实施例对后续说明中采用的技术名词进行定义。具体地,图3及图4A至图4C是以阶梯图程序语言为例,进行说明,但相同概念可直接套用于其他各种不同的程序语言。
于图3的实施例中,单一个区块被视为一般区块(Normal Block)31,由两个或两个以上的物件(包括一般区块31或分支区块(Branch Block)33)串联而成的被视为连续区块(Continuous Block)32,而由两个或两个以上的物件(包括一般区块31或连续区块32)并联而成的被视为分支区块33。并且,于图3的实施例中,虚线部分的分支区块33为虚线部分的连续区块32的上层,而虚线部分的连续区块32为虚线部分的一般区块31的上层。
具体地,上述每一个一般区块31皆可包含一个物件内容(即,区块上方的问号部分)。
接着请参阅图4A至图4C。图4A公开了条件陈述41的语法,并且图4A中是以“IF……THEN……END_IF;”的条件陈述41为例,但不以此为限。图4B公开了条件运算42的语法,并且图4B的第(1)实施例是以“AND”及“NOT”为例,图4B的第(2)实施例是以“OR”为例,但不以此为限。图4C公开了一般陈述43的语法,并且图4C的第(1)实施例是以结尾陈述的“Out:=TRUE;”为例,图4C的第(2)实施例是以功能陈述的“FB_Inst(InA,InB)”为例,图4C的第(3)实施例是以布林陈述的“OR逻辑陈述”为例,但不以此为限。
具体地,上述条件陈述41、条件运算42与一般陈述43的语法,属于程序设计技术领域的公知技术,于此不再赘述。
参阅图5,为本发明的转换及优化流程图的第二具体实施例。具体地,如图5所示,要执行本发明的优化方法,首先,于所述程序语言编辑器上取得基于来源程序语言编写而成的来源程序片段1(步骤S21),并且获取所述来源程序片段1的抽象语法树(步骤S22)。于一实施例中,所述来源程序片段1为逻辑完整的程序片段、完整的程序单元(POU)或已经编写完成的应用程序,不加以限定。
所述抽象语法树是基于来源程序片段1的内容而具有多个区块(或称为节点),其中包含所述一般区块31、连续区块32或分支区块33。于一实施例中,所述一般区块31可包含一个物件内容,所述物件内容可例如包括条件物件、功能物件或结尾物件等。并且,程序语言编辑器会为各个区块分别配置一个对应的节点暂存器,并且将各个区块的物件内容以及所述语法标记解析器分析后产生的语法标记分别记录于各个区块被配置的节点暂存器中。
请同时参阅图6及图7,其中图6为本发明的递回巡访示意图的第一具体实施例,图7为本发明的抽象语法树的示意图的第一具体实施例。
图6公开了一组来源程序片段1(以阶梯图程序语言为例),以及经过本发明的优化方法后所得的一组目的程序片段2(以结构化文字程序语言为例),图7则公开了一个抽象语法树5。本技术领域中技术人员可看出,所述抽象语法树5同时对应至所述来源程序片段1以及目的程序片段2的语意,因此通过对抽象语法树5中的多个区块(即,节点)进行巡访,本发明的优化方法可以按序取得来源程序片段1中包含的各个程序元件,并且进行同质性语意的转换后,再组合而成所述目的程序片段2。
回到图5。于步骤S22后,所述程序语言编辑器通过语法标记解析器来巡访抽象语法树5中的多个区块的其中之一(步骤S23)。于执行巡访动作时,语法标记解析器取得被巡访的区块的物件内容以及此区块与相邻区块的连接关系,并且依据所述物件内容与连接关系来查询所述语法标记对应表,借此产生对应至目的程序语言的语法标记,并且记录于此区块被分配的节点暂存器中(步骤S24)。
如前文所述,所述语法标记对应表中记录了来源程序语言(可为图形程序语言或文字程序语言)的复数语法与目的程序语言(可为图形程序语言或文字程序语言)的复数语法间的对应关系。于图6的实施例中,来源程序片段1采用的是阶梯图程序语言,目的程序片段2采用的是结构化文字程序语言。于上述步骤S24中,语法标记解析器主要是查询一个记录有阶梯图程序语言的复数语法与结构化文字程序语言的复数语法的对应关系的第一语法标记对应表,借此为来源程序片段1中的各个区块产生语法标记。其中,所述语法标记主要是记录来源程序片段1中的各个区块的物件内容以及连接关系在目的程序片段2中所应该具备的表达方式。
步骤S24后,语法标记解析器判断来源程序片段1中的所有区块是否皆已巡访完毕(步骤S25),并且于所有区块皆巡访完毕前重复执行步骤S23及步骤S24,以巡访来源程序片段1中的下一个区块,并且为下一个区块产生对应的语法标记。换句话说,本发明的语法标记解析器主要是以递回的方式来巡访来源程序片段1中所包含的所有区块。
值得一提的是,基于来源程序片段1的复杂度,可能无法通过单一次的递回巡访动作就完成所有区块的语法标记。举例来说,若来源程序片段1中包含了复杂的结尾陈述(例如具有多个ELSE或ELSEIF),则语法标记解析器需要执行至少两次的递回巡访,才能完成语法标记动作。具体地,于上述实施例中,语法标记解析器需于第一次递回巡访动作时取得后方的所有结尾陈述,并且于第二次递回巡访动作时,基于各个区块的物件内容、与相邻区块间的连接关系以及后方的所有结尾陈述来进行语法标记。
有鉴于上述问题,于另一实施例中,本发明的语法标记解析器可以于来源程序语言为文字程序语言时,以正向递回方式来巡访抽象语法树5中的多个区块(即,依据图6中所示的第一巡访区块11、第二巡访区块12、第三巡访区块13的顺序执行语法标记动作)。若来源程序语言为图形程序语言,则语法标记解析器可以反向递回方式来巡访抽象语法树5中的多个区块(即,依据图6中所示的第三巡访区块13、第二巡访区块12、第一巡访区块11的顺序执行语法标记动作)。通过将后方的结尾陈述带到下一个巡访动作中进行参考,可以确保在单一次的递回巡访动作中即完成来源程序片段1中的所有区块的语法标记。
回到图5。若语法标记解析器于步骤S25中判断来源程序片段1中的所有区块皆已巡访完毕,则程序语言编辑器进一步通过所述语意组合器来巡访所述抽象语法树5中的多个区块的其中之一(步骤S26)。具体地,于步骤S26中,语意组合器主要是巡访已经具备有语法标记的区块。
步骤S26后,语意组合器从被巡访的区块的节点暂存器中取出此区块的物件内容以及语法标记,并且将此区块的物件内容以及语法标记与上一个被巡访的区块的物件内容及语法标记进行组合,以产生中间结果(步骤S27)。值得一提的是,于第一次执行巡访动作,或是本次巡访动作无法与上一次的巡访动作进行组合时,语意组合器直接将当前被巡访的区块的物件内容及语法标记进行组合,以产生初始的中间结果。
步骤S27后,语意组合器判断来源程序片段1中的所有区块是否皆已巡访完毕(步骤S28),并且于所有区块皆巡访完毕前重复执行步骤S26及步骤S27,以通过下一个区块的物件内容与语法标记来更新所述中间结果。换句话说,本发明的语意组合器同样是以递回的方式来巡访来源程序片段1中所包含的所有区块。
值得一提的是,本发明的语意组合器的主要功能是将各个区块的物件内容以及语法标记进行组合,因此,无论来源程序语言为文字程序语言或图形程序语言,语意组合器都可以决定以正向递回方式来巡访抽象语法树5中的各个区块,或是以反向递回方式来巡访抽象语法树5中的各个区块,并不加以限定。
若语法标记解析器于步骤S28中判断来源程序片段1中的所有区块皆已巡访完毕,所述语意组合器即可通过最后更新的中间结果来产生目的程序片段2(步骤S29)。本发明的语法标记解析器是基于目的程序语言所采用的语法来产生各个区块的语法标记,而语意组合器是直接将各个区块的物件内容与语法标记进行组合。因此,步骤S29中产生的目的程序片段2,是会符合目的程序语言的架构。
步骤S29后,程序语言编辑器进一步通过所述语意优化器巡访目的程序片段2中包含的一或多个语意组合(步骤S30),并且于一或多个语意组合符合条件等式时,执行等价置换程序,以产生优化后目的程序片段(步骤S31)。最后,程序语言编辑器即可于其页面上输出转换并且优化完成的所述优化后目的程序片段,以供程序编辑人员于目的程序语言的专案中直接使用。
本发明中,所述等价置换程序主要是对目的程序片段2中的一或多个语意组合进行化简(例如利用代数恒等式中的结合律、分配律、德摩根定理或是曼诺图等),以减少目的程序片段2中包含的区块的数量,借此节省PLC中的节点暂存器与I/O点位的使用率,进而降低开发成本(容后详述)。
续请同时参阅图6、图8A及图8B,其中图8A与图8B为本发明的语法标记的第一流程图及第二流程图的第一具体实施例,用以具体说明本发明的语法标记解析器所执行的递回巡访动作。
首先,语法标记解析器于来源程序片段1中取得尚未巡访的一个区块(步骤S41),并且判断此区块是否为分支区块33(步骤S42)。若此区块为分支区块33,进一步判断此分支区块33中是否为上层区块中最后一个具有条件执行的区块(步骤S43)。若此分支区块33确实为上层区块中最后一个具有条件执行的区块,则语法标记解析器依据此分支区块33与相邻区块的连接关系取得对应的条件陈述41(例如THEN、END_IF等),依此条件陈述41查询所述语法标记对应表以取得目的程序语言对于此条件陈述41的语法标记,并将此语法标记记录于此分支区块33的节点暂存器中(步骤S44)。
并且,语法标记解析器于判断当前巡访的区块为分支区块33时,无论此分支区块33是否符合上述步骤S43的判断,都会基于分支区块33的功能而取得对应的一个条件运算42(即,OR条件运算),依据此条件运算42查询所述语法标记对应表以取得目的程序语言对于此条件运算42的语法标记,并且同样将此语法标记记录于此分支区块33的节点暂存器中(步骤S45)。于步骤S45后,语法标记解析器即完成了一个分支区块33的巡访动作。
值得一提的是,若语法标记解析器是采用反向递回的方式巡访抽象语法树5中的多个区块,则语法标记解析器在巡访了一个包含有结尾物件的一般区块31后(例如后续步骤S56所示),会将此结尾物件所指出的结尾陈述(例如Out)带入下一次巡访动作中。
若语法标记解析器是采用反向递回的方式进行巡访,则于上述步骤S45中,语法标记解析器进一步带入在上一次巡访动作中所得到的结尾陈述的记录。借此,在本次巡访动作中,语法标记解析器可以基于此结尾陈述的记录来判断当前巡访的分支区块33的语法标记(例如,依据结尾陈述的记录,判断本次巡访的分析区块33中的条件物件为条件陈述41“THEN”、“ELSE”或“ELSEIF”等)。
而,上述说明仅为本发明的其中一种具体实施范例,但并不以此为限。
若于步骤S42中判断当前巡访的区块不是分支区块33,则语法标记解析器进一步判断此区块是否为连续区块32(步骤S46)。若此区块为连续区块32,语法标记解析器进一步判断此连续区块32是否为上层区块中最后一个有条件执行的区块(步骤S47)。若此连续区块32确实为上层区块中最后一个有条件执行的区块,则语法标记解析器依据此连续区块32与相邻区块的连接关系取得对应的条件陈述41(例如THEN、END_IF等),依此条件陈述41查询所述语法标记对应表以取得目的程序语言对于此条件陈述41的语法标记,并将语法标记记录于此连续区块32的节点暂存器中(步骤S48)。
同样的,若语法标记解析器是采用反向递回的方式进行巡访动作,则无论当前巡访的连续区块32是否为上层区块中最后一个具有条件执行的区块,语法标记解析器在步骤S49中皆会带入在上一次巡访动作中所得到的结尾陈述的记录,理由同上。于步骤S49后,语法标记解析器即完成了一个连续区块32的巡访动作。
若当前巡访的区块不是分支区块33,也不是连续区块32,则语法标记解析器认定当前巡访的区块为一般区块31。据此,语法标记解析器判断此一般区块31是否包含条件物件(步骤S50)、是否包含功能物件(步骤S54)、或是否包含结尾物件(步骤S56)。
若于步骤S50中判断当前巡访的一般区块31包含条件物件,语法标记解析器接着判断此条件物件是否为连续条件物件中的第一个条件物件或最后一个条件物件(步骤S51)。若判断此条件物件为连续条件物件中的第一个条件物件或最后一个条件物件,则语法标记解析器依据此一般区块31与相邻区块的连接关系取得对应的条件陈述41,依此条件陈述41查询所述语法标记对应表以取得目的程序语言对于此条件陈述41的语法标记,并且将此语法标记记录于此一般区块31的节点暂存器中(步骤S52)。
举例来说,于图6的实施例中条件物件“D”为连续条件物件中的第一个条件物件,因此在巡访到包含条件物件“D”的一般区块31时,语法标记解析器会依据条件陈述“IF”来查询语法标记对应表,并将查表后取得的语法标记记录于具有此一般区块31的节点暂存器中。再例如,图6中的分支区块33为连续条件物件中的最后一个条件物件(连续条件物件不计入结尾物件),在巡访到这个分支区块33时,语法标记解析器会依据条件陈述“THEN”查询语法标记对应表,并将查表后取得的语法标记记录于此分支区块33的节点暂存器中。
并且,若当前巡访的一般区块31中包含条件物件(步骤S50),语法标记解析器还会依据此一般区块31与相邻区块的连接关系取得对应的条件运算42,依据此条件运算42查询语法标记对应表以取得目标程序语言对于此条件运算42的语法标记,并将此语法标记记录于此一般区块31的节点暂存器中(步骤S53)。
举例来说,于图6的实施例中条件物件“B”本身包含了条件运算“NOT”,因此在巡访到包含条件物件“B”的一般区块31时,语法标记解析器会依据条件运算“NOT”查询语法标记对应表,并将查表后取得的语法标记记录于此一般区块31的节点暂存器中。再例如,图6中的条件物件“D”与后方区块间的连接关为串联,因此在巡访到包含有条件物件“D”的一般区块31时,语法标记解析器会依据条件运算“AND”查询语法标记对应表,并将查表后取得的语法标记记录于此一般区块31的节点暂存器中。
值得一提的是,若语法标记解析器采用反向递回的方式进行巡访动作,则语法标记解析器在巡访了一个包含有结尾物件的一般区块31后(例如后续步骤S56所示),会将此结尾物件所指出的结尾陈述(例如Out)带入下一次巡访动作中。于上述步骤S53中,语法标记解析器进一步带入在上一次巡访动作中所得的结尾陈述的记录,理由同前文所述。
于步骤S53后,语法标记解析器即完成了一个包含条件物件的一般区块31的巡访动作。
值得一提的是,若一个分支区块32中包含了多个一般区块31(即,此分支区块32为多个一般区块31的上层),则所述语法标记解析器除了需巡访此分支区块32之外,还需按序巡访此分支区块32中所包含的各个一般区块31。举例来说,图6中的分支区块32包含了两个一般区块31,因此,语法标记解析器需要依据图8A、图8B的流程来依序执行三次的巡访动作,才能完成对整个分支区块32的语法标记动作。
若判断当前巡访的一般区块31包含功能物件(步骤S54),则语法标记解析器直接取得此功能物件的功能陈述,依此功能陈述查询所述语法标记对应表以取得目的程序语言对于此功能陈述的语法标记,并将此语法标记记录于此一般区块31的节点暂存器中(步骤S55)。于步骤S55后,语法标记解析器即完成了一个包含功能物件的一般区块31的巡访动作。
若判断当前巡访的一般区块31包含结尾物件(步骤S56),则语法标记解析器依据此一般区块31与相邻区块的连接关系取得对应的条件陈述41(例如ELSEIF、END_IF等),并且依据此结尾物件的结尾陈述(例如Out)以及此条件陈述41查询语法标记对应表以取得目的程序语言对于此结尾陈述以及条件陈述41的语法标记,并且将此语法标记记录于此一般区块31的节点暂存器中(步骤S57)。
值得一提的是,若语法标记解析器是采用反向递回的方式进行巡访动作,则语法标记解析器于判断当前巡访的一般区块31中包含结尾物件时,会将此结尾陈述的记录带入下一次的巡访动作(步骤S57),理由同前文所述。于步骤S57后,语法标记解析器即完成了一个包含结尾物件的一般区块31的巡访动作。
下面结合图6与图8A及图8B来进行上述巡访动作的具体说明。于图6的实施例中,由于来源程序片段1是基于图形程序语言所编写的,因此下面将以反向递回的方式进行说明,但并不以此为限。如前文所述,无论来源程序片段1是基于图形程序语言或是文字程序语言所编写,语法标记解析器都可以正向递回或是反向递回的方式来进行多个区块的巡访动作。
如图6所示,于开始进行巡访动作时,语法标记解析器首先取得第三巡访区块13(即,基于反向递回的顺序,从来源程序片段1的最后一个区块开始巡访),并且判断第三巡访区块13为一般区块31并且包含了结尾物件(Out)。于此情况下,语法标记解析器依此一般区块31与相邻区块间的连接关系(为上层区块中的最后一个区块)取得对应的条件陈述41,并且依据此结尾物件的结尾陈述以及此条件陈述41查询所述语法标记对应表,以取得目的程序语言对于此结尾陈述以及条件陈述41的语法标记(本实施例中为“END_IF;”以及“Out:=TRUE;”)。并且,语法标记解析器将此语法标记记录于此一般区块31的节点暂存器中。
并且,由于第三巡访区块13包含了结尾物件,因此语法标记解析器将上述结尾陈述带入下一次的巡访动作中。
接着,语法标记解析器取得来源程序片段1中的第二巡访区块12,判断第二巡访区块12为分支区块33,并且判断此分支区块33具有条件运算42“OR”、此分支区块33为上层区块中的最后一个具有条件执行的区块、并且基于上一次巡访动作的记录可知此分支区块33的后方连接了一个结尾物件。据此,语法标记解析器基于上述信息查询语法标记对应表,以取得目的程序语言对于所述条件运算42以及条件陈述41的语法标记(本实施例中为“OR”以及“THEN”),并将此语法标记记录于此分支区块33的节点暂存器中。
由于第二巡访区块12(即,上述分支区块33)中包含了两个一般区块31,因此语法标记解析器接着会按序(反向递回)巡访分支区块33中的两个一般区块31。
首先,语法标记解析器取得第二巡访区块12中的最后一个一般区块31,判断此一般区块31包含了条件物件“B”以及条件运算42“NOT”、此一般区块31不是连续条件物件中的最后一个条件物件、并且此一般区块31为上层的分支区块33中的最后一个区块(即,后方不需要连接条件运算42“OR”)。据此,语法标记解析器可以基于上述信息查询语法标记对应表,以取得目的程序语言对于条件运算42“NOT”的语法标记,并将此语法标记记录于此一般区块31的节点暂存器中。
接着,语法标记解析器取得第二巡访区块12中的第一个一般区块31,判断此一般区块31包含了条件物件“A”、此一般区块31不是连续条件物件中的最后一个条件物件、并且此一般区块31并非为上层的分支区块33中的最后一个区块(即,后方需要连接条件运算42“OR”)。据此,语法标记解析器可以基于上述信息查询语法标记对应表,以取得目的程序语言对于条件运算42“OR”的语法标记,并将此语法标记记录于此一般区块31的节点暂存器中。
于第二巡访区块12巡访完毕后(包含分支区块33本身以及内部包含的所有区块),语法标记解析器接着取得来源程序片段1中的第一巡访区块11。
接着,语法标记解析器可判断第一巡访区块11为一般区块31,并且判断此一般区块31包含了条件物件“D”、此一般区块31并非为上层的连续区块32中的最后一个区块(即,后方需要连接42条件运算“AND”)、并且此一般区块31为连续条件区块中的第一个区块(即,前方需要连接条件陈述41“IF”)。据此,语法标记解析器可以基于上述信息查询语法标记对应表,以取得目的程序语言对于条件运算42“AND”以及条件陈述41“IF”的语法标记,并将此语法标记记录于此一般区块31的节点暂存器中。
据此,语法标记解析器即完成了来源程序片段1中的所有区块的巡访动作,并且为所有区块分别产生了相对于目的程序语言的语法标记。
值得一提的是,无论来源程序语言是图形程序语言或文字程序语言、目的程序语言是图形程序语言或文字程序语言、语法标记解析器采用正向递回或反向递回,本发明的语法标记解析器都可采用与上述相同的逻辑来对来源程序片段1中的多个区块进行巡访动作,下面将不再加以赘述。
如前文所述,本发明中语法标记解析器主要是对来源程序片段1所对应的抽象语法树5进行递回巡访,因此于图6的实施例中,语法标记解析器在巡访结束后会将所产生的语法标记分别记录在第一节点(条件物件“D”)21、第二节点(分支区块33)22、第三节点(条件物件“A”)33、第四节点(条件物件“B”)34以及第五节点(结尾物件“Out”)35的节点暂存器中。借此,于前述图5的步骤S27中,语意组合器可以基于这些节点21-25的节点暂存器中记录的信息,将各个区块的物件内容以及语法标记组合成目的程序片段2,并于组合完成后径行输出。
续请同时参阅图6、图9A及图9B,其中图9A与图9B为本发明的语意组合的第一流程图及第二流程图的第一具体实施例,用以具体说明本发明的语意组合器所执行的递回巡访动作。
如图9A与图9B所示,于语法标记解析器完成了来源程序片段1中的所有区块的语法标记后,本发明的优化方法由语意组合器对标记完成的来源程序片段1重新进行巡访,并且取得来源程序片段1中尚未巡访的一个区块(步骤S60),并且判断此区块是否为分支区块33(步骤S61)。若此区块为分支区块33,语意组合器进一步判断此分支区块33的内部是否已经巡访完毕(步骤S62)。
于此分支区块33的内部尚未巡访完毕时,语意组合器先组合此分支区块33的节点暂存器中记录的物件内容以及语法标记,以产生一笔中间结果(步骤S63)。而若此分支区块33的内部已经巡访完毕,则语意组合器组合上一次巡访动作所得的结果以及目前的中间结果,以对中间结果进行更新(步骤S64)。
并且,语意组合器进一步判断此分支区块33的节点暂存器中是否存在一个条件陈述41的语法标记(步骤S65),并且于条件陈述41存在时,进一步组合条件陈述41以及目前的中间结果,以对中间结果进行更新(步骤S66)。于步骤S66后,语意组合器即完成了一个分析区块33的巡访动作。
语意组合器取得来源程序片段1中的一个尚未巡访的区块后(步骤S60),还可判断此区块是否为连续区块32(步骤S67)。若此区块为连续区块32,则语意组合器进一步判断此连续区块32的内部是否已经巡访完毕(步骤S68)。
于此连续区块32的内部尚未巡访完毕时,语意组合器继续进行此连续区块32的内部其他区块的巡访动作。
于此连续区块32的内部巡访完毕时,语意组合器组合上一次巡访动作所得的结果以及目前的中间结果,以对中间结果进行更新(步骤S69)。于步骤S69后,语意组合器即完成了一个连续区块32的巡访动作。
若语意组合器判断于前述步骤S60中取得的区块不是分支区块33,也不是连续区块32,则语意组合器判断当前巡访的区块为一般区块31。此时,语意组合器判断此一般区块31的节点暂存器中是否存在条件陈述41的语法标记(步骤S70)。若此节点暂存器中存在条件陈述41(例如IF、THEN等),则语意组合器组合此节点暂存器中记录的物件内容以及条件陈述41,以对当前的中间内容进行更新(步骤S71)。
并且,语意组合器还判断当前巡访的一般区块31的节点暂存器中是否存在条件运算42的语法标记(步骤S72)。若此节点暂存器中存在条件运算42(例如AND、OR、NOT等),则语意组合器组合此节点暂存器中记录的物件内容以及条件运算42,以对当前的中间内容进行更新(步骤S73)。
并且,语意组合器还判断当前巡访的一般区块31的节点暂存器中是否存在结尾陈述的语法标记(步骤S74)。具体地,所述结尾陈述为一般陈述43的其中一种实施方式。若此节点暂存器中存在结尾陈述(例如OUT:=TRUE),则语意组合器组合上一次巡访动作所得的结果、结尾陈述的内容以及目前的中间结果,以对中间内容进行更新(步骤S75)。
并且,语意组合器还判断当前巡访的一般区块31的上层区块是否为分支区块33,并且判断此一般区块31是否为上层的分支区块33中的最后一个区块(步骤S76)。若当前巡访的一般区块31为上层的分支区块33中的最后一个区块,则因为此一般区块31的后方不需要添加条件运算42“OR”,因此语意组合器进一步于目前的中间结果中去除在上述步骤S73中冗余添加的条件运算,以对当前的中间结果进行更新(步骤S77)。
于步骤S77后,语意组合器即完成了一个一般区块31的巡访动作。并且,于来源程序片段1中的所有区块皆完成了巡访动作后,语意组合器即可依据最后更新的中间结果来输出目的程序片段2。
下列结合图10、图9A及图9B来进行上述巡访动作的具体说明,其中图10为本发明的转换示意图的第一具体实施例。
如图10所示,首先,语意组合器从来源程序片段1中取得第一巡访区块11,判断第一巡访区块11为一般区块31、此一般区块31的节点暂存器中存在物件内容“D”、条件陈述41“IF”及条件运算42“AND”,因此语意组合器组合所述物件内容、条件陈述41以及条件运算42,更新中间结果为“IF D AND”,并且完成本次的巡访动作。
接着,语意组合器从来源程序片段1中取得第二巡访区块12,判断第二巡访区块12为分支区块33,并且此分支区块33的内部尚未巡访完毕。因此,语意组合器先于分支区块33的节点暂存器中取得分支区块33的物件内容(即,尚未巡访的区块)以及语法标记(本实施例中为条件运算42“OR”),并且组合此物件内容与语法标记以更新中间结果为“__OR__”。
接着,语意组合器巡访此分支区块33内部的第一个区块,判断此区块为一般区块31,并且此一般区块31的节点暂存器中存在物件内容“A”以及条件运算42“OR”。因此,语意组合器组合所述物件内容以及条件运算42,更新中间结果为“A OR”,并且完成本次的巡访动作。
接着,语意组合器巡访分支区块33内部的第二个区块,判断此区块为一般区块31,并且此一般区块31的节点暂存器中存在物件内容“B”、条件运算42“NOT”以及条件运算42“OR”。因此,语意组合器组合所述物件内容以及条件运算42,更新中间结果为“A OR NOT BOR”。并且,语意组合器判断此一般区块31为上层的分支区块33中的最后一个区块,因此进一步从中间结果中去除冗余的条件运算42“OR”,以更新中间结果为“A OR NOT B”,并且完成本次的巡访动作。
值得一提的是,于图10的实施例中,目的程序片段2采用的是结构化文字程序语言,因此语意组合器会进一步为所述中间结果加上括号,形成“(A OR NOT B)”的结果。
此时,语意组合器完成了第二巡访区块12(即,分支区块33)内部的所有区块的巡访动作,因此将上一次巡访动作的记录(即,“IF D AND”)与当前的中间结果(即,“(A ORNOT B)”)进行组合,以将中间结果更新为“IF D AND(A OR NOT B)”。并且,由于第二巡访区块12的节点暂存器中还存在条件陈述41“THEN”,因此语意组合器进一步将此条件陈述41与当前的中间结果进行组合,以更新中间结果为“IF D AND(A OR NOT B)THEN”。
于第二巡访区块12本身以及内部的复数区块皆巡访完毕后,语意组合器进一步从来源程序片段1取得第三巡访区块13,判断第三巡访区块13为一般区块31,并且此一般区块31的节点暂存器中存在结尾物件“Out:=TRUE”。因此,语意组合器组合上一巡访动作所得的记录(即,“IF D AND(A OR NOT B)THEN”)与当前的中间结果,以更新中间结果为:
IF D AND(A OR NOT B)THEN
Out:=TRUE;
并且,语意组合器判断此一般区块31的节点暂存器中还包括有条件陈述41“END_IF”,因此语意组合器还会组合此条件陈述41以及当前的中间结果,以更新中间结果为:
IF D AND(A OR NOT B)THEN
Out:=TRUE;
END_IF;
于此,语意组合器可完成本次的巡访动作。
如上所述,本发明的优化方法通过语法标记解析器对来源程序片段1中的各个区块分别进行语法的对应以及标记,并且通过语意组合器将转换且标记完成的各个区块的语意进行组合。借此,可将来源程序片段1转换成符合目的程序语言的架构的目的程序片段2。并且,上述是以将以图形程序语言架构(阶梯图程序语言)编写而成的程序片段转换为符合文字程序语言架构(结构化文字程序语言)的程序片段为例,举例说明,然而通过本发明的优化方法,实可将程序片段于各式不同的程序语言之间任意进行转换。
请参阅图11,为不同程序语言的转换示意图。如图11所示,其中,范例(1)为符合阶梯图程序语言的架构的程序片段,范例(2)为符合功能块图程序语言的架构的程序片段,范例(3)为符合连续功能图程序语言的架构的程序片段,范例(4)为符合结构化文字程序语言的架构的程序片段,范例(5)为符合JAVA程序语言的架构的程序片段,范例(6)为符合Python程序语言的架构的程序片段。
本发明所属技术领域中技术人员皆可看出,上述范例(1)至范例(6)虽然分别属于不同的程序语言架构,但是其中所显示的程序片段皆具有同质性的语意。通过本发明的上述优化方法,无论来源程序片段1是基于哪一种程序语言所编写的,程序编辑者皆可直接将来源程序片段1转换成符合另外一种程序语言的架构的目的程序片段2。借此,程序编辑者不需要重新编写程序,并且也不需要理解其他程序语言的撰写方式与逻辑。
然而,虽然本发明通过语法标记解析器与语意组合器即可将来源程序片段1转换为目的程序片段2,但本发明的技术方案主要是通过正规化的语法标记对应表来将一个语法于不同的程序语言之间进行转换,因此有可能在转换后产生较不恰当的目的程序片段2(例如行数过多,或是语法过于冗长)。因此,本发明进一步通过语意优化器来对所产生的目的程序片段2进行化简动作。
参阅图12,为本发明的优化流程图的第一具体实施例。图12用以具体说明本发明的语意优化器所执行的递回巡访动作。
如图12所示,于语意组合器产生了目的程序片段2后,本发明的优化方法通过语意优化器以递回方式取得目的程序片段2中的一或多个语意组合(步骤S80),并且判断当前取得的一或多个语意组合是否具有符合代数恒等条件的两个或两个以上的区块(步骤S81)。
若于步骤S81中判断当前取得的语意组合中并不存在符合代数恒等条件的两个或两个以上的区块,则语意优化器不执行任何化简程序。于此情况下,语意优化器回到步骤S80,以于目的程序片段2中取得其他的语意组合。具体地,本发明中指的语意组合,指的是同一网络(或称为阶层)中的多个相邻区块所构成的语意组合,或是相邻网络间的多个区块所构成的语意组合。
若于步骤S81中判断当前取得的语意组合中存在符合代数恒等条件的两个或两个以上的区块,则语意优化器对符合代数恒等条件的两个或两个以上的区块进行代数化简程序(步骤S82),借此对目的程序片段2中的一或多个语意组合进行更新。
本发明中,语意优化器是以递回的方式巡访目的程序片段2中的所有语意组合,并且于所有语意组合都巡访完毕后,结束等价置换程序的执行动作,并且将所述目的程序片段2转换为优化后的目的程序片段。最后,程序语言编辑器可于程序编辑者所指定的位置上输出优化后目的程序片段,以令程序编辑者直接使用。
值得一提的是,由于代数恒等的情况常常出现在相邻的程序网络之间(例如,将上一个网络的输出做为下一个网络的输入),因此,于一实施例中,本发明的语意优化器可以反向递回的方式来执行图10所述的巡访动作,但并不以此为限。
续请同时参阅图13,为本发明的优化示意图的第一具体实施例。图13公开了另一目的程序片段6,并且此目的程序片段6包含了第一网络61、第二网络62以及第三网络63,其中各个网络61-63分别由多个区块组成。
于本实施例中,语意优化器若采用反向递回的方式巡访此目的程序片段6中的一或多个语意组合,会发现第二网络62的输出(包含结尾物件「M2」的一般区块)为第三网络63的输入(包含条件物件「M2」的一般区块)。因此,语意优化器首先通过德摩根定理(DeMorgan`s laws)对第二网络62与第三网络63进行化简,并且产生图13中所示的第四网络64。所述德摩根定理为数学领域的通常知识,于此不再赘述。
由图13可看出,将第二网络62与第三网络63化简为第四网络64后,包含了物件内容“M2”的一般区块(或称为节点)消失了。借此,可以节省一个节点暂存器的使用,进而可节省PLC上的一个I/O点位的使用,同时可节省存储器空间。
并且,当语意优化器取得下一个语意组合(例如图13中第一网络61与相邻的第四网络64的语意组合)后,会发现第一网络61的输出(包含了结尾物件“M1”的一般区块)为第四网络64的输入(包含了条件物件“M1”的一般区块)。于此实施例中,语意优化器可通过结合律(Associate laws)对第一网络61与第四网络64进行化简,并且产生图13中所示的第五网络65。所述结合律为数学领域的通常知识,于此不再赘述。
如图13所示,优化前的目的程序片段6具有三组网络(即,第一网络61、第二网络62及第三网络63),这三组网络61-63共包含了九个区块(包括八个一般区块及一个分支区块)。相对的,优化后的目的程序片段仅具有一组网络(即,第五网络65),而这组第五网络65仅包含了四个一般区块。相较于优化前的目的程序片段6,优化后的目的程序片段总共节省了五个区块的节点暂存器,对于程序的编辑与使用来说,实具有相当大的经济效益。
续请同时参阅图14A至图14C,分别为本发明的优化流程图的第二具体实施例、第三具体实施例与第四具体实施例。
于图14A的实施例中,优化前目的程序片段71具有两个网络,其中下一个网络的其中一个输入区块为上一个网络的输出区块(即,包含结尾物件“M1”的一般区块)。于此实施例中,语意优化器于取得了对应的语意组合后,可通过结合律将两个网络结合成单一个网络,并且输出优化后目的程序片段72。
如图14A所示,优化前目的程序片段71需使用八个节点暂存器(包含六个一般区块及两个分支区块),而优化后目的程序片段72仅需使用五个节点暂存器(包含四个一般区块及一个分支区块)。由此可看出,优化后目的程序片段72与优化前目的程序片段71相比,节省了三个区块的节点暂存器。
于图14B的实施例中,优化前目的程序片段73于同一个网络中使用了两个包含条件物件“X”的一般区块。于此实施例中,语意优化器于取得了对应的语意组合后,可通过分配律来对这个网络进行化简,并且输出优化后目的程序片段74。
如图14B所示,优化前目的程序片段73需使用六个节点暂存器(包含五个一般区块及一个分支区块),而优化后目的程序片段74仅需使用五个节点暂存器(包含四个一般区块及一个分支区块)。由此可看出,优化后目的程序片段74与优化前目的程序片段73相比,节省了一个区块的节点暂存器。
于图14C的实施例中,优化前目的程序片段75具有两个网络,其中下一个网络的输入区块为上一个网络的输出区块(即,包含结尾物件“M1”的一般区块)。于此实施例中,语意优化器于取得了对应的语意组合后,可通过德摩根定理将两个网络结合成单一个网络,并且输出优化后目的程序片段76。
如图14C所示,优化前目的程序片段75需使用六个节点暂存器(包含五个一般区块及一个分支区块),而优化后目的程序片段76仅需使用三个节点暂存器(包含三个一般区块)。由此可看出,优化后目的程序片段76与优化前目的程序片段75相比,节省了三个区块的节点暂存器。
除了上述所述的代数恒等式之外,本发明的语意优化器还可通过其他的化简方式来产生优化后目的程序片段,例如自补律、等幂性、补数性、同一性、消去性、曼诺图等,而不以上述者为限。上述化简方式皆为数学相关领域的常用技术手段,于此不再赘述。
通过本发明的技术方案,则产品固件的编译器仅需采用任意一种图形或文字程序语言,即可通过上述优化方法来提供终端使用者其他程序语言的前端应用。如此一来,市面上各种不同的语言设计平台的终端产品皆可被视为是潜在的工控产品可编程逻辑控制的编译载体。借此,可以大幅降低工控产品的开发时间以及成本,同时降低不同学科背景的人士进行工业自动化中的程序设计领域的门限。
以上所述仅为本发明的优选具体实例,非因此即局限本发明的权利要求,故举凡运用本发明内容所为的等效变化,均同理皆包含于本发明的范围内,合予陈明。
Claims (11)
1.一种将程序码于不同程序语言间进行转换及优化的方法,应用于一程序语言编辑器,包括:
a)取得基于一来源程序语言所编写的一程序片段,其中该来源程序语言为图形程序语言或文字程序语言;
b)取得该程序片段对应的一抽象语法树,其中该抽象语法树包括多个区块;
c)通过一语法标记解析器巡访该抽象语法树的该多个区块的其中之一;
d)依据该被巡访的区块的一物件内容及与相邻区块的连接关系查询一语法标记对应表,以产生对应至一目的程序语言的一语法标记,其中该语法标记对应表记录该来源程序语言的复数语法与该目的程序语言的复数语法间的一对应关系,该目的程序语言为图形程序语言或文字程序语言;
e)于该多个区块皆被该语法标记解析器巡访并且产生该语法标记前,重复执行该步骤c及该步骤d;
f)于该多个区块皆被该语法标记解析器巡访后,通过一语意组合器巡访该抽象语法树中的该多个区块的其中之一;
g)将该被巡访的区块的该物件内容及该语法标记与上一个被巡访的区块的该物件内容及该语法标记进行组合以产生一中间结果;
h)于该多个区块皆被该语意组合器巡访前,重复执行该步骤f及该步骤g以更新该中间结果;
i)于该多个区块皆被该语意组合器巡访后,依据更新后的该中间结果产生一目的程序片段,其中该目的程序片段符合该目的程序语言的架构;
j)通过一语意优化器巡访该目的程序片段中的一或多个语意组合,并且于该一或多个语意组合符合一条件等式时执行一等价置换程序并产生一优化后目的程序片段;及
k)于该程序语言编辑器上输出该优化后目的程序片段。
2.如权利要求1所述的方法,其中该抽象语法树中的该多个区块包括一分支区块、一连续区块或一般区块,该分支区块包括至少两个并联的区块,该连续区块包括至少两个串联的区块,该一般区块记录一条件物件、一功能物件或一结尾物件,并且各该区块分别对应一个节点暂存器,各该区块的该物件内容及该语法标记记录于该节点暂存器中。
3.如权利要求2所述的方法,其中该步骤c于该来源程序语言为文字程序语言时,以一正向递回方式巡访该抽象语法树中的该多个区块,并于该来源程序语言为图形程序语言时,以一反向递回方式巡访该抽象语法树中的该多个区块。
4.如权利要求2所述的方法,其中该步骤d包括下列步骤:
d11)于当前巡访的该区块为该分支区块,并且该分支区块为上层区块中最后一个具有条件执行的区块时,依据该分支区块与相邻区块的连接关系取得对应的一条件陈述,依据该条件陈述查询该语法标记对应表以取得对应至该目的程序语言的该条件陈述的该语法标记,并将该语法标记记录于该分支区块的该节点暂存器中;及
d11)于当前巡访的该区块为该分支区块时,依据一OR条件运算查询该语法标记对应表以取得对应至该目的程序语言的该OR条件运算的该语法标记,并将该语法标记记录于该分支区块的该节点暂存器中。
5.如权利要求4所述的方法,其中该步骤d更一步骤d21):
于当前巡访的该区块为该连续区块,且该连续区块为上层区块中最后一个具有条件执行的区块时,依据该连续区块与相邻区块的连接关系取得对应的该条件陈述,依据该条件陈述查询该语法标记对应表以取得对应至该目的程序语言的该条件陈述的该语法标记,并将该语法标记记录于该连续区块的该节点暂存器中。
6.如权利要求5所述的方法,其中该步骤d还包括下列步骤:
d31)于当前巡访的该区块为该一般区块、该一般区块的该物件内容包含一条件物件,且该条件物件为连续条件物件中的第一个条件物件或最后一个条件物件时,依据该一般区块与相邻区块的连接关系取得对应的该条件陈述,依据该条件陈述查询该语法标记对应表以取得对应至该目的程序语言的该条件陈述的该语法标记,并将该语法标记记录于包含该条件物件的该一般区块的该节点暂存器中;
d32)于当前巡访的该区块为该一般区块时,依据该一般区块与相邻区块的连接关系取得对应的一条件运算,依据该条件运算查询该语法标记对应表以取得对应至该目的程序语言的该条件运算的该语法标记,并将该语法标记记录于包含该条件物件的该一般区块的该节点暂存器中;
d4)于当前巡访的该区块为该一般区块,且该一般区块的该物件内容包含一功能物件时,依据该功能物件指出的一功能陈述查询该语法标记对应表以取得对应至该目的程序语言的该功能陈述的该语法标记,并将该语法标记记录于包含该功能物件的该一般区块的该节点暂存器中;及
d5)于当前巡访的该区块为该一般区块,且该一般区块的该物件内容包含一结尾物件时,依据该一般区块与相邻区块的连接关系取得对应的该条件陈述,依据该结尾物件指出的一结尾陈述及该条件陈述查询该语法标记对应表以取得对应至该目的程序语言的该结尾陈述及该条件陈述的该语法标记,并将该语法标记记录于包含该结尾物件的该一般区块的该节点暂存器中。
7.如权利要求6所述的方法,其中该步骤c是以一反向递回方式巡访该抽象语法树中的该多个区块,该步骤d11)同时带入上一次巡访动作所得的该结尾陈述的记录;该步骤d32)同时带入上一次巡访动作所得的该结尾陈述的记录;该步骤d还包括一步骤d22):于当前巡访的该区块为该连续区块时,带入上一次巡访动作所得的该结尾陈述的记录;该步骤d5)将该结尾陈述的记录带入下一次的巡访动作。
8.如权利要求2所述的方法,其中该步骤g包括下列步骤:
g11)于当前巡访的该区块为该分支区块,且该分支区块的内部尚未巡访完毕时,组合该分支区块的该节点暂存器中记录的该物件内容及该语法标记,以产生该中间结果;
g12)于当前巡访的该区块为该分支区块,且该分支区块的内部巡访完毕时,组合上一个巡访动作所得的结果与当前的该中间结果,以对该中间结果进行更新;及
g13)于当前巡访的该区块为该分支区块,且该分支区块的该节点暂存器中存在该条件陈述时,组合该条件陈述与当前的该中间结果,以对该中间结果进行更新。
9.如权利要求8所述的方法,其中该步骤g包括一步骤g21):
于当前巡访的该区块为该连续区块,且该连续区块的内部巡访完毕时,组合上一个巡访动作所得的结果与当前的该中间结果,以对该中间结果进行更新。
10.如权利要求9所述的方法,其中该步骤g包括下列步骤:
g31)于判断当前巡访的该区块为该一般区块,且该一般区块的该节点暂存器中存在该条件陈述时,组合该节点暂存器中记录的该物件内容及该条件陈述,以对该中间结果进行更新;
g32)于判断当前巡访的该区块为该一般区块,且该一般区块的该节点暂存器中存在该条件运算时,组合该节点暂存器中记录的该物件内容及该条件运算,以对该中间结果进行更新;
g33)于判断当前巡访的该区块为该一般区块,且该一般区块的该节点暂存器中存在该结尾陈述时,组合上一个巡访动作所得的结果、该结尾陈述的内容以及当前的该中间结果,以对该中间结果进行更新;及
g34)于判断当前巡访的该区块为该一般区块,该一般区块的上层为该分支区块,并且该一般区块为该分支区块中的最后一个一般区块时,去除该步骤g32)冗余添加的该条件运算,以对该中间结果进行更新。
11.如权利要求2所述的方法,其中该步骤j包括下列步骤:
j1)取得该目的程序片段中的一或多组该语意组合;
j2)对符合代数恒等的两个或两个以上的该区块进行一代数代简程序,以更新该一或多个语意组合;
j3)于该目的程序片段中所有相邻的该语意组合皆判断完毕前重复执行该步骤j1至该步骤j2;及
j4)于该目的程序片段中所有相邻的该语意组合皆判断完毕后,停止该等价置换程序并产生该优化后目的程序片段。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110356595.4A CN115167860A (zh) | 2021-04-01 | 2021-04-01 | 将程序码于不同程序语言间进行转换及优化的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110356595.4A CN115167860A (zh) | 2021-04-01 | 2021-04-01 | 将程序码于不同程序语言间进行转换及优化的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115167860A true CN115167860A (zh) | 2022-10-11 |
Family
ID=83475548
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110356595.4A Pending CN115167860A (zh) | 2021-04-01 | 2021-04-01 | 将程序码于不同程序语言间进行转换及优化的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115167860A (zh) |
-
2021
- 2021-04-01 CN CN202110356595.4A patent/CN115167860A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110187885B (zh) | 一种量子程序编译的中间代码生成方法及装置 | |
US9916145B2 (en) | Utilizing special purpose elements to implement a FSM | |
US9298437B2 (en) | Unrolling quantifications to control in-degree and/or out-degree of automaton | |
US7251777B1 (en) | Method and system for automated structuring of textual documents | |
CN100465895C (zh) | 编译器、编译方法 | |
JP5381710B2 (ja) | ε遷移を含まない非決定性有限オートマトン生成システムと方法およびプログラム | |
CN110471666A (zh) | 代码自动转换方法和装置、代码转换器及介质 | |
US8346697B2 (en) | Direct construction of finite state machines | |
JP2506991B2 (ja) | 回路変換システムと回路変換方法と反転論理生成方法および論理設計システム | |
JPS6375835A (ja) | 目的コ−ド、プログラム・リスト及び設計文書を生成する装置 | |
CN113508385B (zh) | 使用子例程图谱进行形式语言处理的方法和系统 | |
CN115033896B (zh) | 以太坊智能合约漏洞检测方法、装置、系统与介质 | |
CN112631604B (zh) | 一种前端框架实现方法及装置 | |
US5946490A (en) | Automata-theoretic approach compiler for adaptive software | |
US20090064092A1 (en) | Visual programming language optimization | |
CN112527304A (zh) | 基于异构平台的自适应节点融合编译优化方法 | |
CN115167860A (zh) | 将程序码于不同程序语言间进行转换及优化的方法 | |
TWI801836B (zh) | 將程式碼於不同程式語言間進行轉換及優化的方法 | |
CN116414396A (zh) | 一种llvm的目标定义文件生成方法、装置和电子设备 | |
JP2007122187A (ja) | プログラム・コード生成装置 | |
Ghamarian et al. | Incremental pattern matching in graph-based state space exploration | |
Mailund | Domain-Specific Languages in R: Advanced Statistical Programming | |
CN114490928B (zh) | 一种语义搜索的实现方法、系统、计算机设备和存储介质 | |
CN118426752B (zh) | 一种基于网络编程语言的逻辑表示的转换方法和装置 | |
JP4741313B2 (ja) | プログラム生成装置、プログラム生成方法及びコンパイラ |
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 |