CN116501330A - 一种基于解耦架构的文本类编程语言编译方法 - Google Patents
一种基于解耦架构的文本类编程语言编译方法 Download PDFInfo
- Publication number
- CN116501330A CN116501330A CN202310440088.8A CN202310440088A CN116501330A CN 116501330 A CN116501330 A CN 116501330A CN 202310440088 A CN202310440088 A CN 202310440088A CN 116501330 A CN116501330 A CN 116501330A
- Authority
- CN
- China
- Prior art keywords
- programming language
- node
- grammar
- abstract syntax
- compiling
- 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
- 238000000034 method Methods 0.000 title claims abstract description 32
- 230000014509 gene expression Effects 0.000 claims description 11
- 238000005457 optimization Methods 0.000 claims description 6
- 238000012790 confirmation Methods 0.000 claims description 3
- 230000008030 elimination Effects 0.000 claims description 3
- 238000003379 elimination reaction Methods 0.000 claims description 3
- 239000003999 initiator Substances 0.000 claims description 3
- 230000003068 static effect Effects 0.000 claims description 3
- 238000010586 diagram Methods 0.000 description 4
- 230000006870 function Effects 0.000 description 4
- 230000000007 visual effect Effects 0.000 description 2
- 230000007547 defect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
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/42—Syntactic analysis
- G06F8/425—Lexical analysis
-
- 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/42—Syntactic analysis
-
- 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/43—Checking; Contextual analysis
- G06F8/436—Semantic checking
-
- 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
-
- 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/447—Target code generation
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明涉及一种基于解耦架构的文本类编程语言编译方法,针对目标文本类编程语言的目标源代码,首先执行词法分析获得对应符号流,接着执行语法分析获得对应语法解析树,然后创建相对应的抽象语法树AST,再进行语义分析更新抽象语法树AST,最后将抽象语法树AST转换为目标编程语言代码进行编译,实现执行;整个方案设计编译器前后端解耦架构,编译器前端只需关注目标文本类编程语言的语法规则,执行效率至少提高两倍,实现了高效编译。
Description
技术领域
本发明涉及一种基于解耦架构的文本类编程语言编译方法,属于编程语言编译技术领域。
背景技术
IEC61131-3编程语言标准是第一个为工业控制***提供标准化编程语言的国际标准,该标准规定三种可视化编程语言和两种文本类编程语言。指定表(IL)语言和结构化文本(ST)语言属于文本类编程语言;梯形图(LD)语言、功能块图(FBD)语言和顺序功能图(SFC)语言属于可视化编程语言。其中只有ST编程语言属于高级编程语言,适用于在大型PLC***中编写功能复杂的PLC程序。
ST编程语言采用高度压缩化的表达形式,因此,程序紧凑,结构清楚;ST语言具有强有力的控制命令流结构,有选择语句,循环语句,其他模块调用语句等;ST语言格式自由,可以在关键字与标识符之间任何地方***制表符,换行符,空格或者注释等;但ST语言对编程人员的技能有一定的要求,需要有高级编程语言知识和编程技巧。好在PLC编程中,其他四种语言都可以转换为ST语言,因此实现ST语言编译器就可以编译所有PLC项目。
PLC程序有解释执行和编译执行两种运行方式,解释执行是指直接将应用程序下载至CPU,CPU将应用程序逐行转换为机器码并运行的过程;其优点是不生成目标文件,所以是可以跨平台的,其缺点是逐行解释执行导致运行效率低。编译执行是将应用程序一次性转换为机器码的过程,将机器码保存为目标文件,运行的时候直接运行机器码;其优点是执行效率高,缺点是编译出的目标文件具有平台相关性,移植性较差。
如何在保证执行高效率的同时,增加PLC工程的可移植性,是各大PLC厂商亟待解决的课题。
目前国内外,大多数PLC控制器都采用解释执行的方式;一些采用编译执行方式的厂商也使用传统的编译器架构,即编译器前端,优化器和编译器后端;编译器前端负责生成中间代码,优化器负责优化中间代码,编译器后端将中间代码转换为机器码。传统的编译器后端缺乏通用性,并且设计依赖中间代码与硬件平台,编译器前后端和优化器之间耦合在一起,当需要支持新的硬件设备时,编译器前后端就需要重新实现。
发明内容
本发明所要解决的技术问题是提供一种基于解耦架构的文本类编程语言编译方法,基于编译器前后端解耦架构,针对目标文本类编程语言的目标源代码,实现高效编译、并执行。
本发明为了解决上述技术问题采用以下技术方案:本发明设计了一种基于解耦架构的文本类编程语言编译方法,执行如下步骤A至步骤E,对目标PLC程序对应目标文本类编程语言的目标源代码实现编译执行;
步骤A. 基于IEC61131-3编程语言标准下目标文本类编程语言所对应的词法规则,针对目标源代码进行词法分析,获得目标源代码所对应由各个词法单元组成的符号流,然后进入步骤B;
步骤B. 基于IEC61131-3编程语言标准下目标文本类编程语言所对应的语法规则,针对符号流进行语法分析,获得符号流所对应的语法解析树,然后进入步骤C;
步骤C. 基于预设编译要求定义的抽象语法树AST数据结构,创建语法解析树所对应的抽象语法树AST,然后进入步骤D;
步骤D. 针对抽象语法树AST进行语义分析,填充抽象语法树AST中各节点的节点数据类型、以及常量值,更新抽象语法树AST,然后进入步骤E;
步骤E. 将抽象语法树AST转换为目标编程语言代码,并应用目标编译器针对目标编程语言代码进行编译,获得用于在相应硬件上执行的应用程序实现执行。
作为本发明的一种优选技术方案:还包括步骤DE如下,执行完步骤D之后进入步骤DE;
步骤DE. 应用优化器针对抽象语法树AST进行包括常量折叠和无用代码消除的优化更新处理,获得优化更新后的抽象语法树AST,然后进入步骤E。
作为本发明的一种优选技术方案:所述步骤A包括步骤A1至步骤A2;
步骤A1. 根据IEC61131-3编程语言标准,应用ANTLR4工具编写目标文本类编程语言对应的词法规则,并生成该词法规则对应的词法分析器,并进入步骤A2;
步骤A2. 应用词法分析器针对目标源代码进行词法分析,获得源代码所对应包含各个词法单元的符号流。
作为本发明的一种优选技术方案:所述步骤B包括步骤B1至步骤B2;
步骤B1. 根据IEC61131-3编程语言标准,应用ANTLR4工具编写目标文本类编程语言对应的语法规则,并生成该语法规则对应包含预设文法分析手段与预设语法解析规则的语法分析器,并进入步骤B2;
步骤B2. 应用语法分析器针对符号流进行语法分析,获得符号流所对应的语法解析树。
作为本发明的一种优选技术方案:所述语法分析器包含的预设文法分析手段为上下文无关文法分析手段,语法分析器包含的预设语法解析规则为LL(k)递归下降语法。
作为本发明的一种优选技术方案:所述步骤C包括步骤C1至步骤C3;
步骤C1. 基于预设编译要求,创建由抽象语法树AST中各节点之间预设相同各属性组成的基类CSymbol;
并创建继承基类CSymbol、且包含除基类CSymbol中各属性以外的第一预设属性的符号节点基类CToken;
以及创建继承基类CSymbol、且包含除基类CSymbol中各属性以外的第二预设属性的符号列表基类CSymlist,然后进入步骤C2;
步骤C2. 根据IEC61131-3编程语言标准下目标文本类编程语言的语法结构,以及基类CSymbol、符号节点基类CToken、符号列表基类CSymlist,采用自顶向下方法定义抽象语法树AST中各节点的数据结构类,各节点的数据结构类都是这三个基类其中之一的子类,然后进入步骤C3;
步骤C3. 基于抽象语法树AST,词法单元保存在以符号节点基类CToken为基类的子类中,作为AST的叶子节点,抽象语法树AST节点列表保存在以符号列表基类CSymlist为基类的子类中,抽象语法树AST其他节点保存在以基类CSymbol为基类的子类中,创建语法解析树所对应的抽象语法树AST。
作为本发明的一种优选技术方案:所述步骤C还包括步骤C4如下,执行完步骤C3后进入步骤C4;
步骤C4. 定义用于抽象语法树AST的遍历器基类Visitor,用于访问者设计模式对抽象语法树AST进行遍历。
作为本发明的一种优选技术方案:所述抽象语法树AST中各节点之间预设相同各属性包括词法单元的位置信息、所在作用域、父节点、节点数据类型、常量值、符号节点指针,其中,位置信息包括节点所匹配的词法单元所在的起始行、起始列、结束行和结束列,用于错误跟踪与定位;所在作用域用于表示词法单元内部变量的作用域;父节点为当前节点的上一个节点,且除根节点外,抽象语法树AST中每个节点有且只有一个父节点,根节点为起始节点,没有父节点;节点数据类型用于语义分析时对表达式类型安全的检查;常量值包括数值常量、整型、实型和布尔型;符号节点指针表示指向符号节点基类CToken的节点的指针;所述第一预设属性为匹配的词法单元字符串,所述第二预设属性为抽象语法树AST节点元素列表。
作为本发明的一种优选技术方案:所述步骤D中针对抽象语法树AST进行语义分析包括枚举类型中重复值检查、常量值填充、数组越界检查、case表达式范围检查、左值变量检查、以及各节点数据类型填充,节点数据类型填充包括包括自动类型提升、静态类型检查、最终类型确认、表达式结果溢出检查。
作为本发明的一种优选技术方案:所述步骤E中,将抽象语法树AST转换为标准C++代码,并应用GCC交叉编译器针对标准C++代码进行编译,获得用于在相应硬件上执行的应用程序实现执行。
本发明所述一种基于解耦架构的文本类编程语言编译方法,采用以上技术方案与现有技术相比,具有以下技术效果:
(1)本发明所设计基于解耦架构的文本类编程语言编译方法,针对目标文本类编程语言的目标源代码,首先执行词法分析获得对应符号流,接着执行语法分析获得对应语法解析树,然后创建相对应的抽象语法树AST,再进行语义分析更新抽象语法树AST,最后将抽象语法树AST转换为目标编程语言代码进行编译,实现执行;整个方案设计编译器前后端解耦架构,编译器前端只需关注目标文本类编程语言的语法规则,执行效率至少提高两倍,实现了高效编译;
(2)本发明所设计基于解耦架构的文本类编程语言编译方法中,将目标文本类编程语言转换常用的目标编程语言代码,诸如C++,通用性更强,便于用户查看和对比纠错,也为后续直接调用GCC交叉编译器和优化提供基础文件,并且充分利用了GCC交叉编译器的安全、稳定、多平台支持的优点,只需将生成的目标编程语言代码通过GCC交叉编译器,即可直接生成目标平台的可执行文件,移植性好。
附图说明
图1是本发明设计基于解耦架构的文本类编程语言编译方法的流程图;
图2是本发明应用中词法规则定义的部分源码示意图;
图3是本发明应用中语法规则中关于函数声明以及错误跟踪的部分源码示意图。
具体实施方式
下面结合说明书附图对本发明的具体实施方式作进一步详细的说明。
本发明所设计一种基于解耦架构的文本类编程语言编译方法,实际应用当中,如图1所示,由词法解析模块、语法解析模块、抽象语法树生成模块、语义分析模块、优化器模块、目标编程语言代码生成模块、目标编译模块共计7个模块,执行如下步骤A至步骤E,对目标PLC程序对应目标文本类编程语言的目标源代码实现编译执行。
步骤A. 基于IEC61131-3编程语言标准下目标文本类编程语言所对应的词法规则,诸如图2所示词法规则中所定义的部分源码,针对目标源代码进行词法分析,获得目标源代码所对应由各个词法单元组成的符号流,然后进入步骤B。
实际应用当中,上述步骤A具体设计执行如下步骤A1至步骤A2。
步骤A1. 根据IEC61131-3编程语言标准,应用ANTLR4工具编写目标文本类编程语言对应的词法规则,并生成该词法规则对应的词法分析器,并进入步骤A2。
步骤A2. 应用词法分析器针对目标源代码进行词法分析,获得源代码所对应包含各个词法单元的符号流。
所获符号流中包括关键字,运算符,字面量,标识符,地址表示的直接变量,注释和一些特殊符号,其中,所述关键字是由IEC61131-3标准定义的,所述运算符包括加减乘除等以及一些对标准扩展的运算符如’+=’、‘-=’等,所述字面量包含数字、字符串、以及各种时间值等,所述标识符包括变量名、函数名等,所述地址表示的直接变量为AT %开头的变量,所述注释为IEC61131-3标准定义的注释和兼容C++以’//’开头的行注释,所述特殊符号为包括转义符号’$’在内的各种其他符号。
步骤B. 基于IEC61131-3编程语言标准下目标文本类编程语言所对应的语法规则,诸如图3所示语法规则中关于函数声明以及错误跟踪的部分源码,针对符号流进行语法分析,获得符号流所对应的语法解析树,然后进入步骤C。
实际应用当中,上述步骤B具体设计执行如下步骤B1至步骤B2。
步骤B1. 根据IEC61131-3编程语言标准,应用ANTLR4工具编写目标文本类编程语言对应的语法规则,并生成该语法规则对应包含上下文无关文法分析手段与LL(k)递归下降语法的语法分析器,并进入步骤B2。
步骤B2. 应用语法分析器针对符号流进行语法分析,获得符号流所对应的语法解析树。
所获语法解析树记录了语法分析器调用语法规则的次序、以及匹配的词法符号,其内节点的语法规则,叶子节点是匹配的词法符号。
上述词法规则与语法规则都使用ANTLR4工具完成,ANTLR4降低了语法中内嵌动作的重要性,取而代之的是***和访问器模式。
步骤C. 基于预设编译要求定义的抽象语法树AST数据结构,创建语法解析树所对应的抽象语法树AST,然后进入步骤D。
实际应用当中,上述步骤C具体设计执行如下步骤C1至步骤C4。
步骤C1. 基于预设编译要求,创建由抽象语法树AST中各节点之间预设相同各属性组成的基类CSymbol;这里,抽象语法树AST中各节点之间预设相同各属性包括词法单元的位置信息、所在作用域、父节点、节点数据类型、常量值、符号节点指针,其中,位置信息包括节点所匹配的词法单元所在的起始行、起始列、结束行和结束列,用于错误跟踪与定位;所在作用域用于表示词法单元内部变量的作用域,主要针对POU,这个值将在语义分析的时候填充;父节点为当前节点的上一个节点,且除根节点外,抽象语法树AST中每个节点有且只有一个父节点,根节点为起始节点,没有父节点;节点数据类型用于语义分析时对表达式类型安全的检查,在语义分析时填充其值;常量值包括数值常量、整型、实型和布尔型;符号节点指针表示指向符号节点基类CToken的节点的指针。
进一步创建继承基类CSymbol、且包含除基类CSymbol中各属性以外的匹配的词法单元字符串的符号节点基类CToken;以及创建继承基类CSymbol、且包含除基类CSymbol中各属性以外的抽象语法树AST节点元素列表的符号列表基类CSymlist,然后进入步骤C2。
步骤C2. 根据IEC61131-3编程语言标准下目标文本类编程语言的语法结构,以及基类CSymbol、符号节点基类CToken、符号列表基类CSymlist,采用自顶向下方法定义抽象语法树AST中各节点的数据结构类,各节点的数据结构类都是这三个基类其中之一的子类,然后进入步骤C3。
步骤C3. 基于抽象语法树AST,词法单元保存在以符号节点基类CToken为基类的子类中,作为AST的叶子节点,抽象语法树AST节点列表保存在以符号列表基类CSymlist为基类的子类中,抽象语法树AST其他节点保存在以基类CSymbol为基类的子类中,创建语法解析树所对应的抽象语法树AST,然后进入步骤C4。
步骤C4. 定义用于抽象语法树AST的遍历器基类Visitor,用于访问者设计模式对抽象语法树AST进行遍历。
步骤D. 针对抽象语法树AST进行语义分析,填充抽象语法树AST中各节点的节点数据类型、以及常量值,更新抽象语法树AST,然后进入步骤DE。
实际应用中,步骤D中针对抽象语法树AST进行语义分析包括枚举类型中重复值检查、常量值填充、数组越界检查、case表达式范围检查、左值变量检查、以及各节点数据类型填充,节点数据类型填充包括包括自动类型提升、静态类型检查、最终类型确认、表达式结果溢出检查。
步骤DE. 应用优化器针对抽象语法树AST进行包括常量折叠和无用代码消除的优化更新处理,获得优化更新后的抽象语法树AST,然后进入步骤E。
这里的优化操作具体为:(1)常量折叠,是将多个常量表达式计算成一个常量值;(2) 无用代码消除,是指从AST中移除未使用的变量声明或者代码区不可能被运行的代码段,例如RETURN关键字之后的代码段。
步骤E. 将抽象语法树AST转换为目标编程语言代码,并应用目标编译器针对目标编程语言代码进行编译,获得用于在相应硬件上执行的应用程序实现执行。
具体这里步骤E,将抽象语法树AST转换为标准C++代码,并应用GCC交叉编译器针对标准C++代码进行编译,获得用于在相应硬件上执行的应用程序实现执行。
GCC交叉编译器根据用户硬件平台选择;由于GCC交叉编译器的安全,稳定,多平台支持的优点,很容易生成用户硬件平台下的可执行应用程序。
实际应用当中,目标文本类编程语言可以为IL指定表语言或ST结构化文本语言,即可以针对这里任意一种文本类编程语言,执行上述步骤A至步骤E,对文本类编程语言的目标源代码实现编译执行,即对目标PLC程序的目标源代码实现编译执行。
上述技术方案所设计基于解耦架构的文本类编程语言编译方法,针对目标文本类编程语言的目标源代码,首先执行词法分析获得对应符号流,接着执行语法分析获得对应语法解析树,然后创建相对应的抽象语法树AST,再进行语义分析更新抽象语法树AST,最后将抽象语法树AST转换为目标编程语言代码进行编译,实现执行;整个方案设计编译器前后端解耦架构,编译器前端只需关注目标文本类编程语言的语法规则,执行效率至少提高两倍,实现了高效编译;并且在具体应用中,将目标文本类编程语言转换常用的目标编程语言代码,诸如C++,通用性更强,便于用户查看和对比纠错,也为后续直接调用GCC交叉编译器和优化提供基础文件,并且充分利用了GCC交叉编译器的安全、稳定、多平台支持的优点,只需将生成的目标编程语言代码通过GCC交叉编译器,即可直接生成目标平台的可执行文件,移植性好。
上面结合附图对本发明的实施方式作了详细说明,但是本发明并不限于上述实施方式,在本领域普通技术人员所具备的知识范围内,还可以在不脱离本发明宗旨的前提下做出各种变化。
Claims (10)
1.一种基于解耦架构的文本类编程语言编译方法,其特征在于:执行如下步骤A至步骤E,对目标PLC程序对应目标文本类编程语言的目标源代码实现编译执行;
步骤A. 基于IEC61131-3编程语言标准下目标文本类编程语言所对应的词法规则,针对目标源代码进行词法分析,获得目标源代码所对应由各个词法单元组成的符号流,然后进入步骤B;
步骤B. 基于IEC61131-3编程语言标准下目标文本类编程语言所对应的语法规则,针对符号流进行语法分析,获得符号流所对应的语法解析树,然后进入步骤C;
步骤C. 基于预设编译要求定义的抽象语法树AST数据结构,创建语法解析树所对应的抽象语法树AST,然后进入步骤D;
步骤D. 针对抽象语法树AST进行语义分析,填充抽象语法树AST中各节点的节点数据类型、以及常量值,更新抽象语法树AST,然后进入步骤E;
步骤E. 将抽象语法树AST转换为目标编程语言代码,并应用目标编译器针对目标编程语言代码进行编译,获得用于在相应硬件上执行的应用程序实现执行。
2.根据权利要求1所述一种基于解耦架构的文本类编程语言编译方法,其特征在于:还包括步骤DE如下,执行完步骤D之后进入步骤DE;
步骤DE. 应用优化器针对抽象语法树AST进行包括常量折叠和无用代码消除的优化更新处理,获得优化更新后的抽象语法树AST,然后进入步骤E。
3.根据权利要求1所述一种基于解耦架构的文本类编程语言编译方法,其特征在于:所述步骤A包括步骤A1至步骤A2;
步骤A1. 根据IEC61131-3编程语言标准,应用ANTLR4工具编写目标文本类编程语言对应的词法规则,并生成该词法规则对应的词法分析器,并进入步骤A2;
步骤A2. 应用词法分析器针对目标源代码进行词法分析,获得源代码所对应包含各个词法单元的符号流。
4.根据权利要求1所述一种基于解耦架构的文本类编程语言编译方法,其特征在于:所述步骤B包括步骤B1至步骤B2;
步骤B1. 根据IEC61131-3编程语言标准,应用ANTLR4工具编写目标文本类编程语言对应的语法规则,并生成该语法规则对应包含预设文法分析手段与预设语法解析规则的语法分析器,并进入步骤B2;
步骤B2. 应用语法分析器针对符号流进行语法分析,获得符号流所对应的语法解析树。
5.根据权利要求4所述一种基于解耦架构的文本类编程语言编译方法,其特征在于:所述语法分析器包含的预设文法分析手段为上下文无关文法分析手段,语法分析器包含的预设语法解析规则为LL(k)递归下降语法。
6.根据权利要求1所述一种基于解耦架构的文本类编程语言编译方法,其特征在于:所述步骤C包括步骤C1至步骤C3;
步骤C1. 基于预设编译要求,创建由抽象语法树AST中各节点之间预设相同各属性组成的基类CSymbol;
并创建继承基类CSymbol、且包含除基类CSymbol中各属性以外的第一预设属性的符号节点基类CToken;
以及创建继承基类CSymbol、且包含除基类CSymbol中各属性以外的第二预设属性的符号列表基类CSymlist,然后进入步骤C2;
步骤C2. 根据IEC61131-3编程语言标准下目标文本类编程语言的语法结构,以及基类CSymbol、符号节点基类CToken、符号列表基类CSymlist,采用自顶向下方法定义抽象语法树AST中各节点的数据结构类,各节点的数据结构类都是这三个基类其中之一的子类,然后进入步骤C3;
步骤C3. 基于抽象语法树AST,词法单元保存在以符号节点基类CToken为基类的子类中,作为AST的叶子节点,抽象语法树AST节点列表保存在以符号列表基类CSymlist为基类的子类中,抽象语法树AST其他节点保存在以基类CSymbol为基类的子类中,创建语法解析树所对应的抽象语法树AST。
7.根据权利要求6所述一种基于解耦架构的文本类编程语言编译方法,其特征在于:所述步骤C还包括步骤C4如下,执行完步骤C3后进入步骤C4;
步骤C4. 定义用于抽象语法树AST的遍历器基类Visitor,用于访问者设计模式对抽象语法树AST进行遍历。
8.根据权利要求6所述一种基于解耦架构的文本类编程语言编译方法,其特征在于:所述抽象语法树AST中各节点之间预设相同各属性包括词法单元的位置信息、所在作用域、父节点、节点数据类型、常量值、符号节点指针,其中,位置信息包括节点所匹配的词法单元所在的起始行、起始列、结束行和结束列,用于错误跟踪与定位;所在作用域用于表示词法单元内部变量的作用域;父节点为当前节点的上一个节点,且除根节点外,抽象语法树AST中每个节点有且只有一个父节点,根节点为起始节点,没有父节点;节点数据类型用于语义分析时对表达式类型安全的检查;常量值包括数值常量、整型、实型和布尔型;符号节点指针表示指向符号节点基类CToken的节点的指针;所述第一预设属性为匹配的词法单元字符串,所述第二预设属性为抽象语法树AST节点元素列表。
9.根据权利要求1所述一种基于解耦架构的文本类编程语言编译方法,其特征在于:所述步骤D中针对抽象语法树AST进行语义分析包括枚举类型中重复值检查、常量值填充、数组越界检查、case表达式范围检查、左值变量检查、以及各节点数据类型填充,节点数据类型填充包括包括自动类型提升、静态类型检查、最终类型确认、表达式结果溢出检查。
10.根据权利要求1至9中任意一项所述一种基于解耦架构的文本类编程语言编译方法,其特征在于:所述步骤E中,将抽象语法树AST转换为标准C++代码,并应用GCC交叉编译器针对标准C++代码进行编译,获得用于在相应硬件上执行的应用程序实现执行。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310440088.8A CN116501330A (zh) | 2023-04-23 | 2023-04-23 | 一种基于解耦架构的文本类编程语言编译方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310440088.8A CN116501330A (zh) | 2023-04-23 | 2023-04-23 | 一种基于解耦架构的文本类编程语言编译方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116501330A true CN116501330A (zh) | 2023-07-28 |
Family
ID=87317679
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310440088.8A Pending CN116501330A (zh) | 2023-04-23 | 2023-04-23 | 一种基于解耦架构的文本类编程语言编译方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116501330A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117075909A (zh) * | 2023-10-11 | 2023-11-17 | 沐曦集成电路(南京)有限公司 | 用于实现并行编程的编译方法、电子设备和介质 |
-
2023
- 2023-04-23 CN CN202310440088.8A patent/CN116501330A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117075909A (zh) * | 2023-10-11 | 2023-11-17 | 沐曦集成电路(南京)有限公司 | 用于实现并行编程的编译方法、电子设备和介质 |
CN117075909B (zh) * | 2023-10-11 | 2023-12-15 | 沐曦集成电路(南京)有限公司 | 用于实现并行编程的编译方法、电子设备和介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109254776B (zh) | 多语言代码编译方法及编译器 | |
CN110825384A (zh) | 一种基于llvm的st语言编译方法及编译***和编译器 | |
US6061513A (en) | Automated methods for constructing language specific systems for reverse engineering source code into abstract syntax trees with attributes in a form that can more easily be displayed, understood and/or modified | |
US8453126B1 (en) | System and method for converting base SAS runtime macro language scripts to JAVA target language | |
EP0643851B1 (en) | Debugger program which includes correlation of computer program source code with optimized objet code | |
US7657878B2 (en) | Compiler, method of compiling and program development tool | |
Mernik | An object-oriented approach to language compositions for software language engineering | |
US20070044066A1 (en) | Embedded multi-language programming | |
US20090144229A1 (en) | Static query optimization for linq | |
CN103077064B (zh) | 一种解析并执行程序语言方法及解释装置 | |
CN110673854A (zh) | Sas语言编译方法、装置、设备及可读存储介质 | |
CN101408849A (zh) | Ttcn-3语言的编译执行方法及*** | |
CN116501330A (zh) | 一种基于解耦架构的文本类编程语言编译方法 | |
CN113741869B (zh) | 一种高性能的可变语法编程语言的构造方法 | |
CN117075909B (zh) | 用于实现并行编程的编译方法、电子设备和介质 | |
Uhl et al. | An attribute grammar for the semantic analysis of Ada | |
US20230367569A1 (en) | Method of generating a representation of a program logic, decompilation apparatus, recompilation system and computer program products | |
US5701490A (en) | Method and apparatus for compiler symbol table organization with no lookup in semantic analysis | |
KR20090011974A (ko) | 컴파일 대상 파일 추출 방법 | |
CN110825433A (zh) | 一种边缘控制设备设计方法 | |
CN116257245A (zh) | 一种基于flex与bison语法分析的多输出编译方法及*** | |
CN115268918A (zh) | 一种基于规则模板的c++代码向c代码的自动转化方法 | |
CN111221519B (zh) | 一基于Python的CLI自动化导出方法 | |
CN113608748A (zh) | C语言转换Java语言的数据处理方法、装置及设备 | |
KR101422737B1 (ko) | 다중 언어 코드 동시 실행 장치와 그 방법 |
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 |