CN104484192B - 一种复杂多分支结构代码自动生成的方法 - Google Patents
一种复杂多分支结构代码自动生成的方法 Download PDFInfo
- Publication number
- CN104484192B CN104484192B CN201510006578.2A CN201510006578A CN104484192B CN 104484192 B CN104484192 B CN 104484192B CN 201510006578 A CN201510006578 A CN 201510006578A CN 104484192 B CN104484192 B CN 104484192B
- Authority
- CN
- China
- Prior art keywords
- state
- program
- object language
- source program
- statement
- 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
Links
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
本发明提供一种复杂多分支结构代码自动生成的方法,包括:用户使用类开关语句编写源程序;用户填写目标语言模板;编译器通过总控程序读入所述源程序,并根据状态堆栈中的栈顶状态确定对应的语义子程序,从而将源程序中的类开关语句依照目标语言模板转换生成相应的目标语言程序。本发明的优点在于,用户只需按语法要求书写类开关语句和目标语言模板,编译器即可生成复杂条件下的多分支目标语言程序,且用户修改目标语言模板中的内容,就能改变生成的目标语言程序。本发明解决了多分支程序难于设计、执行效率低、可读性差等问题,改善了代码的可维护性和鲁棒性,实现了复杂条件下多分支结构代码的自动生成。
Description
技术领域
本发明涉及计算机软件编译系统领域,更具体地说,涉及一种复杂多分支结构代码自动生成的方法。
背景技术
目前,在C++、C#或Java编程中,对于多分支的业务需求,只能用开关语句(switch-case)或条件判断语句(if-then-else)来解决。开关语句的选择因子只能是常量,因此对复杂的条件判断无能为力。用条件判断语句能解决复杂条件的多分支结构,但是,只能运用多重嵌套形式完成。
以C++为例,复杂条件的多分支程序设计:判断读入的字符类型,其典型范例是:
这种结构,随着条件判断分支的增加,嵌套也随之增加,从而导致句式冗长,可读性很差且调试困难,程序的鲁棒性难以得到保证。
所以,本发明人对复杂条件的多分支结构程序设计进行了深入研究,由此产生本案。
发明内容
本发明要解决的技术问题,在于提供一种复杂多分支结构代码自动生成的方法,通过提供一种类开关语句的结构和编译器,用户只需按语法要求书写类开关语句和目标语言模板,编译器即可生成复杂条件下的多分支目标语言程序,且用户修改目标语言模板中的内容,就能改变生成的目标语言程序。解决了多分支程序难于设计、执行效率低、可读性差等问题,改善了代码的可维护性和鲁棒性,实现了复杂条件下多分支结构代码的自动生成。
本发明是这样实现的:一种复杂多分支结构代码自动生成的方法,包括如下步骤:
步骤11、用户使用类开关语句编写源程序,所述类开关语句的结构包括:类开关语句头部、类开关语句分支部和类开关语句尾部,其中,类开关语句分支部包括分支条件表达式、分支处理语句及分支结束语句,类开关语句尾部包括缺省处理语句和循环结束语句;
步骤12、用户填写目标语言模板,所述目标语言模板由语言说明、永真循环说明、条件说明、跳出循环说明和终止循环说明构成;
步骤13、编译器通过总控程序读入所述源程序,并根据状态堆栈中的栈顶状态确定对应的语义子程序,从而将源程序中的类开关语句依照所述目标语言模板转换生成相应的目标语言程序;所述编译器包括目标语言模板、总控程序、状态堆栈和语义子程序集,其中,所述语义子程序集由复数个用于转换类开关语句的语义子程序组成。
进一步的,所述编译器执行的编译过程具体为:
步骤21、读入目标语言模板;
步骤22、初始状态进栈;
步骤23、读入源程序,开始编译;
步骤24、判断源程序是否终止:若是,则退出编译;若否,则跳转步骤25;
步骤25、读状态堆栈当前的栈顶状态;
步骤26、根据当前的栈顶状态确定对应的语义子程序,进行类开关语句的转换,生成相应的目标语言程序并修改栈顶状态;
步骤27、返回步骤23。
进一步的,所述用户修改目标语言模板中的内容,所述编译器将对应更换生成的目标语言程序。
采用上述方案后,本发明具有如下优点:
1、通过提供一种类开关语句的结构,利用开关语句头部实现循环结构、开关语句分支部实现各分支条件和跳出循环的判断,开关语句尾部实现循环的终止,从而完成复杂多分支语句的程序设计;
2、依照目标语言模板生成的目标语言程序,每一个条件分支处理完毕,即刻跳出循环,同时,在整个循环的终点,执行缺省处理后也跳出循环,终止语句,既保证了程序不会陷入死循环之中,又提高了程序的执行效率;
3、编译器通过执行总控程序的算法,可快速生成目标语言程序,提高复杂多分支程序设计的效率,并极大改善代码的可维护性和鲁棒性;
4、用户只需改变目标语言模板的内容,编译器即可生成相应的目标语言程序,适用性高,可以广泛应用于C++,Java,C#等程序设计语言。
附图说明
下面参照附图结合实施例对本发明作进一步的说明。
图1为本发明方法执行流程图。
图2为本发明方法一实施例的目标语言程序结构示意图。
图3为本发明方法一实施例的编译过程流程图。
具体实施方式
请参阅图1,本发明,一种复杂多分支结构代码自动生成的方法,包括如下步骤:
步骤11、用户使用类开关语句编写源程序,所述类开关语句的结构包括:类开关语句头部、类开关语句分支部和类开关语句尾部,其中,类开关语句分支部包括分支条件表达式、分支处理语句及分支结束语句,类开关语句尾部包括缺省处理语句和循环结束语句;
以一类开关语句为例,其结构如下所示:
步骤12、用户填写目标语言模板,所述目标语言模板由语言说明、永真循环说明、条件说明、跳出循环说明和终止循环说明构成;
例如,以C++为目标语言的的目标语言模板说明如下:
步骤13、编译器通过总控程序读入所述源程序,并根据状态堆栈中的栈顶状态确定对应的语义子程序,从而将源程序中的类开关语句依照所述目标语言模板转换生成相应的目标语言程序;所述编译器包括目标语言模板、总控程序、状态堆栈和语义子程序集,其中,所述语义子程序集由复数个用于转换类开关语句的语义子程序组成。例如,有以下六个状态:S0、S1、S11、S12、Serror和Send,相应的,语义子程序集也包括六个语义子程序为P0、P1、P11、P12、Perror和Pend;可对各状态定义如下:
S0:为初始状态,当读入的是非类开关语句,则原样输出并保持原状态S0;当读入的是类开关语句头部“switchH”,则转入S1状态;
S1:用于类开关语句头部处理:当读入的是类开关语句分支部“caseH”,转入S11状态;当读入的是类开关语句尾部“defaultH”,则转入S12状态;
S11:用于类开关语句分支部处理;当读入的是分支结束语句“breakH”时,表明该分支结束,状态变为S1;否则,输出源程序语句;
S12:用于类关开语句尾部处理,当读入的是循环结束语句“breakH”时,表明循环结束,状态变为S0;
Serror:用于错误处理;
Send:为源程序处理完毕状态,用于判断源程序是否终止;
以上述C++目标语言模板为例,则编译器生成的目标语言程序的结构如图2所示:
在循环体中,若条件1满足,则执行语句串1,并跳出循环;若条件2满足,则执行语句串2,并跳出循环,如此顺序执行,直至各个分支完成;终止循环处理即缺省处理:执行语句串n+1,并跳出循环;依照目标语言模板生成的目标语言程序,每一个条件分支处理完毕,即刻跳出循环,同时,在整个循环的终点,执行缺省处理后也跳出循环,终止语句,既保证了程序不会陷入死循环之中,又提高了程序的执行效率。
通过步骤11到步骤13,提供一种类开关语句的结构,实现复杂多分支语句的程序设计,同时由编译器执行总控程序的算法,依据目标语言模板快速生成目标语言程序,提高了复杂多分支程序设计的效率,极大改善代码的可维护性和鲁棒性。
如图3所示,所述编译器执行的编译过程具体为:
步骤21、读入目标语言模板;
步骤22、初始状态进栈;
步骤23、读入源程序,开始编译;
步骤24、判断源程序是否终止:若是,则退出编译;若否,则跳转步骤25;
步骤25、读状态堆栈当前的栈顶状态;
步骤26、根据当前的栈顶状态确定对应的语义子程序,进行类开关语句的转换,生成相应的目标语言程序并修改栈顶状态;
步骤27、返回步骤23;
例如,若此时的栈顶状态为S0,则确定相应的语义子程序为P0,执行以下步骤:
(1):判断源程序语句是否是类开关语句头部switchH:若是,则跳转(2),否则跳转(4);
(2):根据目标语言模板,生成永真循环“while(1){”;
(3):S0退出状态堆栈,状态S1进栈,跳转(5);
(4):输出源程序语句;
(5):返回主程序;
若此时的栈顶状态为S1,则确定相应的语义子程序为P1,执行以下步骤:
(1):判断源程序语句是否是类开关语句分支部caseH:若是,则跳转(2),否则跳转(4);
(2):根据目标语言模板,生成条件语句“if(条件式){”;
(3):S1退出状态堆栈,状态S11进栈,跳转(7);
(4):判断源程序语句是否是类开关语句尾部defaultH:若是,则跳转(5),否则跳转(6);
(5):S1退出状态堆栈,状态S12进栈,跳转(7);
(6):输出源程序语句;
(7):返回主程序;
若此时的栈顶状态为S11,则确定相应的语义子程序为P11,执行以下步骤:
(1):判断源程序语句是否是分支结束语句breakH:若是,则跳转(2),否则跳转(4);
(2):根据目标语言模板,生成跳出循环语句“break;}”;
(3):S11退出状态堆栈,状态S1进栈,跳转(5);
(4):输出源程序语句;
(5):返回主程序;
若此时的栈顶状态为S12,则确定相应的语义子程序为P12,执行以下步骤:
(1):判断源程序语句是否是循环结束语句breakH:若是,则跳转(2),否则跳转(4);
(2):根据目标语言模板,生成终止循环语句“break;}”;
(3):S12退出状态堆栈,状态S0进栈,跳转(5);
(4):输出源程序语句;
(5):返回主程序;
若此时的栈顶状态为Serror,则确定相应的语义子程序为Perror:标注源程序中的错误语句;
若此时的栈顶状态为Send,则确定相应的语义子程序为Pend:源程序终止,退出编译。
所述用户修改目标语言模板中的内容,所述编译器将对应更换生成的目标语言程序;这样用户只需改变目标语言模板的内容,编译器即可生成相应的目标语言程序,适用性高,可以广泛应用于C++,Java,C#等程序设计语言。
本发明通过提供一种类开关语句的结构和编译器,用户只需按语法要求书写类开关语句和目标语言模板,编译器即可生成复杂条件下的多分支目标语言程序,且用户修改目标语言模板中的内容,就能改变生成的目标语言程序。本发明解决了多分支程序难于设计、执行效率低、可读性差等问题,改善了代码的可维护性和鲁棒性,实现了复杂条件下多分支结构代码的自动生成。
虽然以上描述了本发明的具体实施方式,但是熟悉本技术领域的技术人员应当理解,我们所描述的具体的实施例只是说明性的,而不是用于对本发明的范围的限定,熟悉本领域的技术人员在依照本发明的精神所作的等效的修饰以及变化,都应当涵盖在本发明的权利要求所保护的范围内。
Claims (3)
1.一种复杂多分支结构代码自动生成的方法,其特征在于:所述方法包括如下步骤:
步骤11、用户使用类开关语句编写源程序,所述类开关语句的结构包括:类开关语句头部、类开关语句分支部和类开关语句尾部,其中,类开关语句分支部包括分支条件表达式、分支处理语句及分支结束语句,类开关语句尾部包括缺省处理语句和循环结束语句;
步骤12、用户填写目标语言模板,所述用户在目标语言模板中填写的内容由语言说明、永真循环说明、条件说明、跳出循环说明和终止循环说明构成;
步骤13、编译器通过总控程序读入所述源程序,并根据状态堆栈中的栈顶状态确定对应的语义子程序,从而将源程序中的类开关语句依照所述目标语言模板转换生成相应的目标语言程序;所述编译器包括目标语言模板、总控程序、状态堆栈和语义子程序集,其中,所述语义子程序集由多个用于转换类开关语句的语义子程序组成;
所述的栈顶状态有以下六个状态:S0、S1、S11、S12、Serror和Send,相应的,语义子程序集也包括六个语义子程序为P0、P1、P11、P12、Perror和Pend;对各栈顶状态定义如下:
S0:为初始状态,当读入的是非类开关语句,则原样输出并保持原状态S0;当读入的是类开关语句头部“switchH”,则转入S1状态;
S1:用于类开关语句头部处理:当读入的是类开关语句分支部“caseH”,转入S11状态;当读入的是类开关语句尾部“defaultH”,则转入S12状态;
S11:用于类开关语句分支部处理;当读入的是分支结束语句“breakH”时,表明该分支结束,状态变为S1;否则,输出源程序语句;
S12:用于类关开语句尾部处理,当读入的是循环结束语句“breakH”时,表明循环结束,状态变为S0;
Serror:用于错误处理;
Send:为源程序处理完毕状态,用于判断源程序是否终止;
若此时的栈顶状态为S0,则确定相应的语义子程序为P0,执行以下步骤:
(1)判断源程序语句是否是类开关语句头部switchH:若是,则跳转(2),否则跳转(4);
(2)根据目标语言模板,生成永真循环“while(1){”;
(3)S0退出状态堆栈,状态S1进栈,跳转(5);
(4)输出源程序语句;
(5)返回主程序;
若此时的栈顶状态为S1,则确定相应的语义子程序为P1,执行以下步骤:
(1)判断源程序语句是否是类开关语句分支部caseH:若是,则跳转(2),否则跳转(4);
(2)根据目标语言模板,生成条件语句“if(条件式){”;
(3)S1退出状态堆栈,状态S11进栈,跳转(7);
(4)判断源程序语句是否是类开关语句尾部defaultH:若是,则跳转(5),否则跳转(6);
(5)S1退出状态堆栈,状态S12进栈,跳转(7);
(6)输出源程序语句;
(7)返回主程序;
若此时的栈顶状态为S11,则确定相应的语义子程序为P11,执行以下步骤:
(1)判断源程序语句是否是分支结束语句breakH:若是,则跳转(2),否则跳转(4);
(2)根据目标语言模板,生成跳出循环语句“break;}”;
(3)S11退出状态堆栈,状态S1进栈,跳转(5);
(4)输出源程序语句;
(5)返回主程序;
若此时的栈顶状态为S12,则确定相应的语义子程序为P12,执行以下步骤:
(1)判断源程序语句是否是循环结束语句breakH:若是,则跳转(2),否则跳转(4);
(2)根据目标语言模板,生成终止循环语句“break;}”;
(3)S12退出状态堆栈,状态S0进栈,跳转(5);
(4)输出源程序语句;
(5)返回主程序;
若此时的栈顶状态为Serror,则确定相应的语义子程序为Perror:标注源程序中的错误语句;
若此时的栈顶状态为Send,则确定相应的语义子程序为Pend:源程序终止,退出编译。
2.根据权利要求1所述的一种复杂多分支结构代码自动生成的方法,其特征在于:所述编译器执行的编译过程具体为:
步骤21、读入目标语言模板;
步骤22、初始状态进栈;
步骤23、读入源程序,开始编译;
步骤24、判断源程序是否终止:若是,则退出编译;若否,则跳转步骤25;
步骤25、读状态堆栈当前的栈顶状态;
步骤26、根据当前的栈顶状态确定对应的语义子程序,进行类开关语句的转换,生成相应的目标语言程序并修改栈顶状态;
步骤27、返回步骤23。
3.根据权利要求1或2所述的一种复杂多分支结构代码自动生成的方法,其特征在于:所述用户修改目标语言模板中的内容,所述编译器将对应更换生成的目标语言程序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510006578.2A CN104484192B (zh) | 2015-01-07 | 2015-01-07 | 一种复杂多分支结构代码自动生成的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510006578.2A CN104484192B (zh) | 2015-01-07 | 2015-01-07 | 一种复杂多分支结构代码自动生成的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104484192A CN104484192A (zh) | 2015-04-01 |
CN104484192B true CN104484192B (zh) | 2017-11-14 |
Family
ID=52758736
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510006578.2A Active CN104484192B (zh) | 2015-01-07 | 2015-01-07 | 一种复杂多分支结构代码自动生成的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104484192B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105487912B (zh) * | 2015-11-30 | 2020-01-10 | 无锡闻泰信息技术有限公司 | 公共问题修改多分支维护系统及方法 |
CN106886408A (zh) * | 2017-01-22 | 2017-06-23 | 广州真诺电子科技有限公司 | 应用于机器人软件工程师的智能决策系统 |
JP2020526811A (ja) * | 2017-07-07 | 2020-08-31 | エヌチェーン ホールディングス リミテッドNchain Holdings Limited | ブロックチェーンスクリプトにおける制御フロー |
CN108829024B (zh) * | 2018-05-30 | 2020-10-27 | 广州明珞软控信息技术有限公司 | 一种plc程序生成方法及系统 |
CN115357252B (zh) * | 2022-10-08 | 2022-12-27 | 成都数联云算科技有限公司 | 源码文件生成方法、装置、电子设备和存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6412105B1 (en) * | 1997-12-31 | 2002-06-25 | Elbrus International Limited | Computer method and apparatus for compilation of multi-way decisions |
CN1841328A (zh) * | 2005-04-02 | 2006-10-04 | 华为技术有限公司 | 脚本语言的自动机方法 |
CN101208660A (zh) * | 2005-06-27 | 2008-06-25 | 奎朴兹有限公司 | 代码转换 |
CN101256492A (zh) * | 2008-03-31 | 2008-09-03 | 宋乃辉 | 一种进行模型驱动架构的软件开发方法及其系统 |
US7496905B2 (en) * | 2003-07-18 | 2009-02-24 | Bea Systems, Inc. | System and method for generating state machines |
CN101937343A (zh) * | 2010-09-17 | 2011-01-05 | 上海交通大学 | 异构多核虚拟执行环境的后端翻译框架实现的方法 |
-
2015
- 2015-01-07 CN CN201510006578.2A patent/CN104484192B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6412105B1 (en) * | 1997-12-31 | 2002-06-25 | Elbrus International Limited | Computer method and apparatus for compilation of multi-way decisions |
US7496905B2 (en) * | 2003-07-18 | 2009-02-24 | Bea Systems, Inc. | System and method for generating state machines |
CN1841328A (zh) * | 2005-04-02 | 2006-10-04 | 华为技术有限公司 | 脚本语言的自动机方法 |
CN101208660A (zh) * | 2005-06-27 | 2008-06-25 | 奎朴兹有限公司 | 代码转换 |
CN101256492A (zh) * | 2008-03-31 | 2008-09-03 | 宋乃辉 | 一种进行模型驱动架构的软件开发方法及其系统 |
CN101937343A (zh) * | 2010-09-17 | 2011-01-05 | 上海交通大学 | 异构多核虚拟执行环境的后端翻译框架实现的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN104484192A (zh) | 2015-04-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104484192B (zh) | 一种复杂多分支结构代码自动生成的方法 | |
CN110187885A (zh) | 一种量子程序编译的中间代码生成方法及装置 | |
CN104106049B (zh) | 计算着色器的栅格化 | |
Katz et al. | Towards neural decompilation | |
CN104820613B (zh) | 一种异构多核程序的编译方法 | |
TWI455028B (zh) | 用於產生建議訊息的臆測編譯 | |
Helbling et al. | Juniper: a functional reactive programming language for the Arduino | |
CN104932905A (zh) | 一种aadl到c语言的代码自动生成方法 | |
CN106547520B (zh) | 一种代码路径分析方法及装置 | |
Mokhov et al. | Selective applicative functors | |
CN107515739A (zh) | 提高代码执行性能的方法及装置 | |
André et al. | Formalizing non-concurrent UML state machines using colored Petri nets | |
CN103838616A (zh) | 基于树型程序分支的计算机程序即时编译方法 | |
CN110032363A (zh) | 一种用于机器人编程的数据结构构造方法及系统 | |
CN113791770B (zh) | 代码编译器、代码编译方法、代码编译系统和计算机介质 | |
Li et al. | Efficient Bottom-Up Synthesis for Programs with Local Variables | |
CN107203406A (zh) | 一种面向分布式存储结构的处理方法 | |
CN104657190B (zh) | 一种基于c语言家族的增强开关语句功能的方法 | |
Zambon et al. | Recipes for coffee: Compositional construction of JAVA control flow graphs in GROOVE | |
Yang et al. | M2Coder: A Fully Automated Translator from Matlab M-functions to C/C++ Codes for ACS Motion Controllers | |
CLEOPHAS | Process-Based Aho-Corasick Failure Function Construction | |
Gåsland | Features of a dream programming language: 2nd draft | |
Elsaid | Social Networking Platform Using C+ | |
Smelik et al. | Specification and construction of control flow semantics | |
Roesch | Principled Optimization of Dynamic Neural Networks |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |