CN115469875B - 基于遥控作业的领域专用语言dsl的编译方法及装置 - Google Patents
基于遥控作业的领域专用语言dsl的编译方法及装置 Download PDFInfo
- Publication number
- CN115469875B CN115469875B CN202211007503.2A CN202211007503A CN115469875B CN 115469875 B CN115469875 B CN 115469875B CN 202211007503 A CN202211007503 A CN 202211007503A CN 115469875 B CN115469875 B CN 115469875B
- Authority
- CN
- China
- Prior art keywords
- interface
- grammar
- analyzer
- compiling
- domain
- 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
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/42—Syntactic analysis
- G06F8/427—Parsing
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
本公开提供一种基于遥控作业的领域专用语言DSL的编译方法及装置。所述方法包括:通过Antlr4工具,获得词法分析器和语法分析器;通过Antlr4工具的解析接口功能,获得编译解析器接口;通过词法分析器、语法分析器和编译解析器接口,对领域专用语言DSL脚本进行解析并执行,获得执行结果。根据本公开,可通过Antlr4工具,自主定义语法规则,增加了语法检查的灵活性和扩展性,并将领域专用语言DSL脚本转换为可执行的单行模式下的语法包,便于跨平台执行,提升编译的适用性。
Description
技术领域
本公开涉及计算机技术领域,尤其涉及一种基于遥控作业的领域专用语言DSL的编译方法及装置。
背景技术
相关技术中的遥控作业语言是一种语句和命令混合使用的专用语言,它既包括程序执行语句,也包含一些操作命令,部分语句可以作为命令在操作平台上使用,与操作命令等效,因此该语言也称为航天器控制命令语言(Spacecraft Control command Language)。
遥控作业语言与完整的语言不同。它不是完整的语言,而只是为了简化领域专家的操作,将最常用的操作、功能与思想通过简洁有力的领域语言来实现,从而极大的解放生产力。如何正确识别遥控作业语言,并通过程序正确执行描述的活动和规则,是遥控作业正确执行的前提条件。
然而,遥控作业语言通常使用Fortran语言编译,功能简单,不能跨平台运行,也不支持语法检验和类型检查。
公开于本申请背景技术部分的信息仅仅旨在加深对本申请的一般背景技术的理解,而不应当被视为承认或以任何形式暗示该信息构成已为本领域技术人员所公知的现有技术。
发明内容
本公开实施例提供一种基于遥控作业的领域专用语言DSL的编译方法及装置。能够通过Ant l r4工具,自主定义语法规则,增加了语法检查的灵活性和扩展性,并将领域专用语言DSL脚本转换为可执行的单行模式下的语法包,便于跨平台执行,提升编译的适用性。
本公开实施例的第一方面,提供一种基于遥控作业的领域专用语言DSL的编译方法,包括:
通过Antlr4工具,获得词法分析器和语法分析器;
通过Antlr4工具的解析接口功能,获得编译解析器接口;
通过所述词法分析器、所述语法分析器和所述编译解析器接口,对领域专用语言DSL脚本进行解析并执行,获得执行结果。
根据本公开的实施例,通过Antlr4工具的解析接口功能,获得编译解析器接口,包括:
通过所述Antlr4工具的观察者模式,重构每个语法节点的enter和exit函数,获得类实现接口,所述编译解析器接口包括所述类实现接口。
根据本公开的实施例,通过Antlr4工具的解析接口功能,获得编译解析器接口,包括:
通过所述Antlr4工具的访问者模式中的构建模式,重构每个语法节点的visit函数,并将visit函数存入结构体;
将所述结构体进行递归解析,获得单行模式的指令;
根据所述单行模式的指令,获得解析接口,其中,所述编译解析器接口包括所述解析接口。
根据本公开的实施例,通过Antlr4工具的解析接口功能,获得编译解析器接口,包括:
通过所述Antlr4工具的访问者模式中的执行模式,生成Visitor类;
在所述Visitor类的扩展类中重构visit函数,并存入结果类;
通过ONE_LINE模式对所述结果类进行解析,获得解析接口,其中,所述编译解析器接口包括所述解析接口。
根据本公开的实施例,通过所述词法分析器、所述语法分析器和所述编译解析器接口,对领域专用语言DSL脚本进行解析并执行,获得执行结果,包括:
获取预设语法规则的领域专用语言DSL脚本;
通过所述词法分析器和所述语法分析器,生成所述领域专用语言DSL脚本的抽象语法树;
通过所述编译解析器接口,对所述抽象语法树进行语法检查;
在语法无误的情况下,通过编译解析器接口,解析所述抽象语法树的语法结构;
根据所述语法结构,通过编译解析器接口,执行所述领域专用语言DSL脚本,获得执行结果。
根据本公开的实施例,通过所述编译解析器接口,对所述抽象语法树进行语法检查,包括:
通过所述Antlr4工具的ALTAR4-RUNTIME库,定义ParseTreeWalker类;
通过所述编译解析器接口中的类实现接口,执行所述ParseTreeWalker类,以对所述抽象语法树进行遍历,确定语法是否有误。
根据本公开的实施例,在语法无误的情况下,通过编译解析器接口,解析所述抽象语法树的语法结构,包括:
通过所述编译解析器接口中的解析接口,调用visit函数;
通过visit函数解析抽象语法树的语法节点,获得所述语法结构。
根据本公开的实施例,根据所述语法结构,通过编译解析器接口,执行所述领域专用语言DSL脚本,获得执行结果,包括:
通过所述编译解析器接口中的解析接口,调用visit函数;
通过visit函数,根据所述语法结构,按照单行模式逐行执行所述领域专用语言DSL脚本,获得所述执行结果。
根据本公开的第二方面,提供一种基于遥控作业的领域专用语言DSL的编译装置,所述装置包括:
分析器模块,用于通过Antlr4工具,获得词法分析器和语法分析器;
接口模块,用于通过Antlr4工具的解析接口功能,获得编译解析器接口;
执行模块,用于通过所述词法分析器、所述语法分析器和所述编译解析器接口,对领域专用语言DSL脚本进行解析并执行,获得执行结果。
根据本公开的实施例,所述接口模块进一步用于:通过所述Antlr4工具的观察者模式,重构每个语法节点的enter和exit函数,获得类实现接口,所述编译解析器接口包括所述类实现接口。
根据本公开的实施例,所述接口模块进一步用于:通过所述Antlr4工具的访问者模式中的构建模式,重构每个语法节点的visit函数,并将visit函数存入结构体;将所述结构体进行递归解析,获得单行模式的指令;根据所述单行模式的指令,获得解析接口,其中,所述编译解析器接口包括所述解析接口。
根据本公开的实施例,所述接口模块进一步用于:通过所述Antlr4工具的访问者模式中的执行模式,生成Visitor类;在所述Visitor类的扩展类中重构visit函数,并存入结果类;通过ONE_LINE模式对所述结果类进行解析,获得解析接口,其中,所述编译解析器接口包括所述解析接口。
根据本公开的实施例,所述执行模块进一步用于:获取预设语法规则的领域专用语言DSL脚本;通过所述词法分析器和所述语法分析器,生成所述领域专用语言DSL脚本的抽象语法树;通过所述编译解析器接口,对所述抽象语法树进行语法检查;在语法无误的情况下,通过编译解析器接口,解析所述抽象语法树的语法结构;根据所述语法结构,通过编译解析器接口,执行所述领域专用语言DSL脚本,获得执行结果。
根据本公开的实施例,所述执行模块进一步用于:通过所述Antlr4工具的ALTAR4-RUNTIME库,定义ParseTreeWalker类;通过所述编译解析器接口中的类实现接口,执行所述ParseTreeWalker类,以对所述抽象语法树进行遍历,确定语法是否有误。
根据本公开的实施例,所述执行模块进一步用于:通过所述编译解析器接口中的解析接口,调用visit函数;通过visit函数解析抽象语法树的语法节点,获得所述语法结构。
根据本公开的实施例,所述执行模块进一步用于:通过所述编译解析器接口中的解析接口,调用visit函数;通过visit函数,根据所述语法结构,按照单行模式逐行执行所述领域专用语言DSL脚本,获得所述执行结果。
本公开实施例的第三方面,提供一种基于遥控作业的领域专用语言DSL的编译设备,包括:处理器;用于存储处理器可执行指令的存储器;其中,所述处理器被配置为调用所述存储器存储的指令,以执行上述方法。
本公开实施例的第四方面,提供一种计算机可读存储介质,其上存储有计算机程序指令,其特征在于,所述计算机程序指令被处理器执行时实现上述方法。
附图说明
图1示例性地示出本公开实施例的基于遥控作业的领域专用语言DSL的编译方法的流程示意图;
图2示例性地示出本公开实施例的基于遥控作业的领域专用语言DSL的编译装置的框图;
图3是根据一示例性实施例示出的一种基于遥控作业的领域专用语言DSL的编译设备的框图。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。基于本公开中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。
本公开的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本公开的实施例能够以除了在这里图示或描述的那些以外的顺序实施。
应当理解,在本公开的各种实施例中,各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本公开实施例的实施过程构成任何限定。
应当理解,在本公开中,“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
应当理解,在本公开中,“多个”是指两个或两个以上。“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。“包含A、B和C”、“包含A、B、C”是指A、B、C三者都包含,“包含A、B或C”是指包含A、B、C三者之一,“包含A、B和/或C”是指包含A、B、C三者中任1个或任2个或3个。
应当理解,在本公开中,“与A对应的B”、“与A相对应的B”、“A与B相对应”或者“B与A相对应”,表示B与A相关联,根据A可以确定B。根据A确定B并不意味着仅仅根据A确定B,还可以根据A和/或其他信息确定B。A与B的匹配,是A与B的相似度大于或等于预设的阈值。
取决于语境,如在此所使用的“若”可以被解释成为“在……时”或“当……时”或“响应于确定”或“响应于检测”。
下面以具体地实施例对本公开的技术方案进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例不再赘述。
图1示例性地示出本公开实施例的基于遥控作业的领域专用语言DSL的编译方法的流程示意图,如图1所示,所述方法包括:
步骤S101,通过Antlr4工具,获得词法分析器和语法分析器;
步骤S102,通过Antlr4工具的解析接口功能,获得编译解析器接口;
步骤S103,通过所述词法分析器、所述语法分析器和所述编译解析器接口,对领域专用语言DSL脚本进行解析并执行,获得执行结果。
根据本公开的实施例,遥控作业语言属于领域专用语言(Domain SpecificLanguage,DSL),是为解决某一类任务而专门设计的计算机语言。在遥控、遥测领域的领域专用语言可为所述遥控作业语言。
根据本公开的实施例,Antlr4工具为跨语言语法解析工具,可以用来读取、处理、执行或翻译结构化文本或二进制文件。
根据本公开的实施例,在步骤S101中,可获得Antlr4工具的词法分析器和语法分析器。所述词法分析器和语法分析器为Antlr4工具的两个功能。
根据本公开的实施例,在步骤S102中,通过Antlr4工具的解析接口功能,获得编译解析器接口。Antlr4工具具有两种方式来进行语言解析,一种是节点监听、触发处理的方式,该方式为观察者模式。另一种是主动遍历的方法,该方式为访问者模式。
根据本公开的实施例,可采用观察者模式进行领域专用语言的编译检查,并采用访问者模式进行领域专用语言的解析。
根据本公开的实施例,在通过观察者模式进行领域专用语言的编译检查时,不需要显式定义遍历语法树的顺序,实现方式简单。并且代码与文法产生式解耦,利于文法产生式的重用。观察者模式没有返回值,需要使用map、栈等结构在节点间传递值。
根据本公开的实施例,在通过观察者模式进行领域专用语言的编译检查时,可通过Antlr4工具提供的语法规则检查,这方面的检查会在语法编译时自动执行。
根据本公开的实施例,进一步地,还可检查非系统规则,步骤S102可包括:通过所述Antlr4工具的观察者模式,重构每个语法节点的enter和exit函数,获得类实现接口,所述编译解析器接口包括所述类实现接口。
根据本公开的实施例,可在观察者模式下,可对观察的每个语法节点的的enter和exit函数进行重写,可在上述两个函数中加入执行代码,例如,在作业系统参数的enter函数中,可加入数据库检查系统参数的写法是否合法的代码。从而利用重构后的enter函数,获得类实现接口。
根据本公开的实施例,可采用访问者模式进行作业功能的解析,通过访问者模式,可直接对语法树进行操作,可显式定义遍历语法树的顺序;并且,动作代码与文法产生式解耦,利于文法产生式的重用,且访问者模式可直接返回值,只要求返回值的类型必须一致,没有具体的类型限制要求,可以根据实现的需要确定,甚至可以自定义返回类型。
根据本公开的实施例,步骤S102可包括:通过所述Antlr4工具的访问者模式中的构建模式,重构每个语法节点的visit函数,并将visit函数存入结构体;将所述结构体进行递归解析,获得单行模式的指令;根据所述单行模式的指令,获得解析接口,其中,所述编译解析器接口包括所述解析接口。
根据本公开的实施例,访问者模式中包括构建模式,可利用构建模式重构每个语法节点的visit函数,并存入结构体,例如,可重构visit函数,定义语法节点的上下文语法规则,类型,作业中的起始行号、结束行号,父节点和子节点等,并存入结构体。结构体的类型包括BODY(作业的语法体)、FUNCTION(作业自定义函数)、ONE_LINE(单行模式功能)、IF(条件判断)、FOR(for循环)、BLOCK(语句块模式)、CALL(函数调用)等,本公开对结构体的具体类型不做限制。
根据本公开的实施例,可将上述结构体进行递归解析,获得单行模式的指令,利用ONE_LINE功能,对结构体进行递归解析,获得单行模式的指令,获得解析接口。
根据本公开的实施例,步骤S102可包括:通过所述Antlr4工具的访问者模式中的执行模式,生成Visitor类;在所述Visitor类的扩展类中重构visit函数,并存入结果类;通过ONE_LINE模式对所述结果类进行解析,获得解析接口,其中,所述编译解析器接口包括所述解析接口。
根据本公开的实施例,可采用访问者模式中的执行模式,例如,Antlr4工具根据语法文件生成Visitor类,并定义Visitor类的扩展类,其返回值为节点执行结果类,如果无返回值,则返回null。
根据本公开的实施例,可在如上定义的Visitor类的扩展类中,重构visit函数,即,具有遍历功能的函数,并将其执行结果存入结果类。
根据本公开的实施例,进一步地,可通过ONE_LINE功能对结果类进行解析,将结果类解析为单行模式,获得解析接口。对于FUNCTION、ONE_LINE、IF、FOR、BLOCK等结构体,由于在构建模式中已解析成单行模式,在此无需再重复。
根据本公开的实施例,在步骤S103中,可通过所述词法分析器、所述语法分析器和所述编译解析器接口,对领域专用语言DSL脚本进行解析并执行,获得执行结果。
根据本公开的实施例,步骤S103可包括:获取预设语法规则的领域专用语言DSL脚本;通过所述词法分析器和所述语法分析器,生成所述领域专用语言DSL脚本的抽象语法树;通过所述编译解析器接口,对所述抽象语法树进行语法检查;在语法无误的情况下,通过编译解析器接口,解析所述抽象语法树的语法结构;根据所述语法结构,通过编译解析器接口,执行所述领域专用语言DSL脚本,获得执行结果。
根据本公开的实施例,预设语法规则的领域专用语言DSL脚本可以是用户根据领域功能需要编写的DSL作业文件,例如,遥控作业语言的作业文件等。
根据本公开的实施例,可通过步骤S101中确定的词法分析器和语法分析器生成所述领域专用语言DSL脚本的抽象语法树。例如,可通过词法分析器和语法分析器对领域专用语言DSL脚本进行解析,确定领域专用语言DSL脚本的抽象语法树。
根据本公开的实施例,可通过所述编译解析器接口,对所述抽象语法树进行语法检查。该步骤可包括:通过所述Antlr4工具的ALTAR4-RUNTIME库,定义ParseTreeWalker类;通过所述编译解析器接口中的类实现接口,执行所述ParseTreeWalker类,以对所述抽象语法树进行遍历,确定语法是否有误。
在示例中,可通过所述Antlr4工具的ALTAR4-RUNTIME库,定义ParseTreeWalker类的一个实例,并通过walk函数,通过编译解析器接口中的类实现接口来执行ParseTreeWalker类,遍历抽象语法树,从而检查语法是否有误。
在示例中,由于walk函数和编译解析器接口中的类实现接口没有返回值,可将语法检查结果存放在ALTAR4-RUNTIME提供的对象中,并可将其中的信息转存至消息列表中,从而获得语法是否有误的输出结果。
根据本公开的实施例,该列表可以是语法错误的列表,如果列表为空,则语法无误,反之,则语法有误。在语法有误的情况下,可中止处理,并返回解析失败的信息。
根据本公开的实施例,在语法无误的情况下,则可通过编译解析器接口,解析所述抽象语法树的语法结构。该步骤包括:通过所述编译解析器接口中的解析接口,调用visit函数;通过visit函数解析抽象语法树的语法节点,获得所述语法结构。
根据本公开的实施例,可获取Visitor类的扩展类中重构的visit函数,并调用visit函数,解析抽象语法树的各个语法节点,即,对各个语法节点进行遍历,获得语法结构。
根据本公开的实施例,在获得语法结构后,可根据所述语法结构,通过编译解析器接口,执行所述领域专用语言DSL脚本,获得执行结果。该步骤包括:通过所述编译解析器接口中的解析接口,调用visit函数;通过visit函数,根据所述语法结构,按照单行模式逐行执行所述领域专用语言DSL脚本,获得所述执行结果。
根据本公开的实施例,调用上述visit函数,即,编译解析器接口中的解析接口对应的visit函数,并通过ONE_LINE功能,按照以上获得的语法结构,解析领域专用语言DSL脚本,将其解析为单行模式,并利用visit函数遍历并执行单行模式下的领域专用语言DSL脚本的各个语句,即,按照单行模式,顺序执行单行模式下的领域专用语言DSL脚本的各个语句,在执行完毕后,可获得执行结果。
根据本公开,可通过Antlr4工具,自主定义语法规则,增加了语法检查的灵活性和扩展性,并将领域专用语言DSL脚本转换为可执行的单行模式下的语法包,便于跨平台执行,提升编译的适用性。
图2示例性地示出本公开实施例的基于遥控作业的领域专用语言DSL的编译装置的框图,如图2所示,所述装置包括:
分析器模块,用于通过Antlr4工具,获得词法分析器和语法分析器;
接口模块,用于通过Antlr4工具的解析接口功能,获得编译解析器接口;
执行模块,用于通过所述词法分析器、所述语法分析器和所述编译解析器接口,对领域专用语言DSL脚本进行解析并执行,获得执行结果。
根据本公开的实施例,所述接口模块进一步用于:通过所述Antlr4工具的观察者模式,重构每个语法节点的enter和exit函数,获得类实现接口,所述编译解析器接口包括所述类实现接口。
根据本公开的实施例,所述接口模块进一步用于:通过所述Antlr4工具的访问者模式中的构建模式,重构每个语法节点的visit函数,并将visit函数存入结构体;将所述结构体进行递归解析,获得单行模式的指令;根据所述单行模式的指令,获得解析接口,其中,所述编译解析器接口包括所述解析接口。
根据本公开的实施例,所述接口模块进一步用于:通过所述Antlr4工具的访问者模式中的执行模式,生成Visitor类;在所述Visitor类的扩展类中重构visit函数,并存入结果类;通过ONE_LINE模式对所述结果类进行解析,获得解析接口,其中,所述编译解析器接口包括所述解析接口。
根据本公开的实施例,所述执行模块进一步用于:获取预设语法规则的领域专用语言DSL脚本;通过所述词法分析器和所述语法分析器,生成所述领域专用语言DSL脚本的抽象语法树;通过所述编译解析器接口,对所述抽象语法树进行语法检查;在语法无误的情况下,通过编译解析器接口,解析所述抽象语法树的语法结构;根据所述语法结构,通过编译解析器接口,执行所述领域专用语言DSL脚本,获得执行结果。
根据本公开的实施例,所述执行模块进一步用于:通过所述Antlr4工具的ALTAR4-RUNTIME库,定义ParseTreeWalker类;通过所述编译解析器接口中的类实现接口,执行所述ParseTreeWalker类,以对所述抽象语法树进行遍历,确定语法是否有误。
根据本公开的实施例,所述执行模块进一步用于:通过所述编译解析器接口中的解析接口,调用visit函数;通过visit函数解析抽象语法树的语法节点,获得所述语法结构。
根据本公开的实施例,所述执行模块进一步用于:通过所述编译解析器接口中的解析接口,调用visit函数;通过visit函数,根据所述语法结构,按照单行模式逐行执行所述领域专用语言DSL脚本,获得所述执行结果。
图3是根据一示例性实施例示出的一种基于遥控作业的领域专用语言DSL的编译设备的框图。例如,所述设备1600可以被提供为一终端或服务器。设备1600包括处理组件1602,以及由存储器1603所代表的存储器资源,用于存储可由处理组件1602的执行的指令,例如应用程序。存储器1603中存储的应用程序可以包括一个或一个以上的每一个对应于一组指令的模块。此外,处理组件1602被配置为执行指令,以执行上述方法。
设备1600还可以包括一个电源组件1606被配置为执行设备1600的电源管理,一个有线或无线网络接口1605被配置为将设备1600连接到网络,和一个输入输出(I/O)接口1608。设备1600可以操作基于存储在存储器1603的操作系统,例如Windows ServerTM,MacOS XTM,UnixTM,LinuxTM,FreeBSDTM或类似。
本发明可以是方法、装置、系统和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于执行本发明的各个方面的计算机可读程序指令。
计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是――但不限于――电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、静态随机存取存储器(SRAM)、便携式压缩盘只读存储器(CD-ROM)、数字多功能盘(DVD)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其他自由传播的电磁波、通过波导或其他传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输的电信号。
这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。
用于执行本发明操作的计算机程序指令可以是汇编指令、指令集架构(ISA)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码,所述编程语言包括面向对象的编程语言—诸如Smalltalk、C++等,以及常规的过程式编程语言—诸如“C”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实施例中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(FPGA)或可编程逻辑阵列(PLA),该电子电路可以执行计算机可读程序指令,从而实现本发明的各个方面。
这里参照根据本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本发明的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。
这些计算机可读程序指令可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理单元,从而生产出一种机器,使得这些指令在通过计算机或其他可编程数据处理装置的处理单元执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,从而,存储有指令的计算机可读介质则包括一个制造品,其包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。
也可以把计算机可读程序指令加载到计算机、其他可编程数据处理装置、或其他设备上,使得在计算机、其他可编程数据处理装置或其他设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机、其他可编程数据处理装置、或其他设备上执行的指令实现流程图和/或框图中的一个或多个方框中规定的功能/动作。
附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,所述模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
注意,除非另有直接说明,否则本说明书(包含任何所附权利要求、摘要和附图)中所揭示的所有特征皆可由用于达到相同、等效或类似目的的可替代特征来替换。因此,除非另有明确说明,否则所公开的每一个特征仅是一组等效或类似特征的一个示例。在使用到的情况下,进一步地、较优地、更进一步地和更优地是在前述实施例基础上进行另一实施例阐述的简单起头,该进一步地、较优地、更进一步地或更优地后带的内容与前述实施例的结合作为另一实施例的完整构成。在同一实施例后带的若干个进一步地、较优地、更进一步地或更优地设置之间可任意组合的组成又一实施例。
本领域的技术人员应理解,上述描述及附图中所示的本发明的实施例只作为举例而并不限制本发明。本发明的目的已经完整并有效地实现。本发明的功能及结构原理已在实施例中展示和说明,在没有背离所述原理下,本发明的实施方式可以有任何变形或修改。
最后应说明的是:以上各实施例仅用以说明本公开的技术方案,而非对其限制;尽管参照前述各实施例对本公开进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本公开各实施例技术方案的范围。
Claims (6)
1.一种基于遥控作业的领域专用语言DSL的编译方法,其特征在于,包括:
通过Antlr4工具,获得词法分析器和语法分析器;
通过Antlr4工具的解析接口功能,获得编译解析器接口;
通过所述词法分析器、所述语法分析器和所述编译解析器接口,对领域专用语言DSL脚本进行解析并执行,获得执行结果;
通过Antlr4工具的解析接口功能,获得编译解析器接口,包括:
通过所述Antlr4工具的访问者模式中的构建模式,重构每个语法节点的visit函数,并将visit函数存入结构体;
将所述结构体进行递归解析,获得单行模式的指令;
根据所述单行模式的指令,获得解析接口,其中,所述编译解析器接口包括所述解析接口;
通过Antlr4工具的解析接口功能,获得编译解析器接口,包括:
通过所述Antlr4工具的观察者模式,重构每个语法节点的enter和exit函数,获得类实现接口,所述编译解析器接口包括所述类实现接口;
通过Antlr4工具的解析接口功能,获得编译解析器接口,包括:
通过所述Antlr4工具的访问者模式中的执行模式,生成Visitor类;
在所述Visitor类的扩展类中重构visit函数,并存入结果类;
通过单行模式对所述结果类进行解析,获得解析接口,其中,所述编译解析器接口包括所述解析接口;
通过所述词法分析器、所述语法分析器和所述编译解析器接口,对领域专用语言DSL脚本进行解析并执行,获得执行结果,包括:
获取预设语法规则的领域专用语言DSL脚本;
通过所述词法分析器和所述语法分析器,生成所述领域专用语言DSL脚本的抽象语法树;
通过所述编译解析器接口,对所述抽象语法树进行语法检查;
在语法无误的情况下,通过编译解析器接口,解析所述抽象语法树的语法结构;
根据所述语法结构,通过编译解析器接口,执行所述领域专用语言DSL脚本,获得执行结果。
2.根据权利要求1所述的方法,其特征在于,通过所述编译解析器接口,对所述抽象语法树进行语法检查,包括:
通过所述Antlr4工具的ALTAR4-RUNTIME库,定义ParseTreeWalker类;
通过所述编译解析器接口中的类实现接口,执行所述ParseTreeWalker类,以对所述抽象语法树进行遍历,确定语法是否有误。
3.根据权利要求1所述的方法,其特征在于,在语法无误的情况下,通过编译解析器接口,解析所述抽象语法树的语法结构,包括:
通过所述编译解析器接口中的解析接口,调用visit函数;
通过visit函数解析抽象语法树的语法节点,获得所述语法结构。
4.根据权利要求1所述的方法,其特征在于,根据所述语法结构,通过编译解析器接口,执行所述领域专用语言DSL脚本,获得执行结果,包括:
通过所述编译解析器接口中的解析接口,调用visit函数;
通过visit函数,根据所述语法结构,按照单行模式逐行执行所述领域专用语言DSL脚本,获得所述执行结果。
5.一种基于遥控作业的领域专用语言DSL的编译装置,其特征在于,包括:
分析器模块,用于通过Antlr4工具,获得词法分析器和语法分析器;
接口模块,用于通过Antlr4工具的解析接口功能,获得编译解析器接口;
执行模块,用于通过所述词法分析器、所述语法分析器和所述编译解析器接口,对领域专用语言DSL脚本进行解析并执行,获得执行结果;
通过Antlr4工具的解析接口功能,获得编译解析器接口,包括:
通过所述Antlr4工具的访问者模式中的构建模式,重构每个语法节点的visit函数,并将visit函数存入结构体;
将所述结构体进行递归解析,获得单行模式的指令;
根据所述单行模式的指令,获得解析接口,其中,所述编译解析器接口包括所述解析接口;
通过Antlr4工具的解析接口功能,获得编译解析器接口,包括:
通过所述Antlr4工具的观察者模式,重构每个语法节点的enter和exit函数,获得类实现接口,所述编译解析器接口包括所述类实现接口;
通过Antlr4工具的解析接口功能,获得编译解析器接口,包括:
通过所述Antlr4工具的访问者模式中的执行模式,生成Visitor类;
在所述Visitor类的扩展类中重构visit函数,并存入结果类;
通过单行模式对所述结果类进行解析,获得解析接口,其中,所述编译解析器接口包括所述解析接口;
通过所述词法分析器、所述语法分析器和所述编译解析器接口,对领域专用语言DSL脚本进行解析并执行,获得执行结果,包括:
获取预设语法规则的领域专用语言DSL脚本;
通过所述词法分析器和所述语法分析器,生成所述领域专用语言DSL脚本的抽象语法树;
通过所述编译解析器接口,对所述抽象语法树进行语法检查;
在语法无误的情况下,通过编译解析器接口,解析所述抽象语法树的语法结构;
根据所述语法结构,通过编译解析器接口,执行所述领域专用语言DSL脚本,获得执行结果。
6.一种基于遥控作业的领域专用语言DSL的编译设备,其特征在于,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器被配置为调用所述存储器存储的指令,以执行权利要求1至4中任意一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211007503.2A CN115469875B (zh) | 2022-08-22 | 2022-08-22 | 基于遥控作业的领域专用语言dsl的编译方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211007503.2A CN115469875B (zh) | 2022-08-22 | 2022-08-22 | 基于遥控作业的领域专用语言dsl的编译方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115469875A CN115469875A (zh) | 2022-12-13 |
CN115469875B true CN115469875B (zh) | 2023-08-15 |
Family
ID=84365757
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211007503.2A Active CN115469875B (zh) | 2022-08-22 | 2022-08-22 | 基于遥控作业的领域专用语言dsl的编译方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115469875B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111309752A (zh) * | 2019-11-26 | 2020-06-19 | 上海金融期货信息技术有限公司 | 面向业务流式数据处理的领域特定语言组件及其运作方法 |
CN111488154A (zh) * | 2020-04-23 | 2020-08-04 | 北京东土科技股份有限公司 | St语言源代码编译方法、装置、计算机设备及介质 |
CN112015396A (zh) * | 2020-08-28 | 2020-12-01 | 平安国际智慧城市科技股份有限公司 | 基于dsl的智能合约代码生成方法、装置、设备及存储介质 |
CN112541002A (zh) * | 2020-12-09 | 2021-03-23 | 北京奇艺世纪科技有限公司 | 程序语言转换方法、装置、电子设备及存储介质 |
CN114168622A (zh) * | 2020-09-10 | 2022-03-11 | 北京达佳互联信息技术有限公司 | 一种基于领域特定语言的数据查询方法及装置 |
CN114443041A (zh) * | 2021-11-30 | 2022-05-06 | 阿里云计算有限公司 | 抽象语法树的解析方法及计算机程序产品 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8732667B2 (en) * | 2009-11-13 | 2014-05-20 | Microsoft Corporation | Debugging services for domain specific languages |
-
2022
- 2022-08-22 CN CN202211007503.2A patent/CN115469875B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111309752A (zh) * | 2019-11-26 | 2020-06-19 | 上海金融期货信息技术有限公司 | 面向业务流式数据处理的领域特定语言组件及其运作方法 |
CN111488154A (zh) * | 2020-04-23 | 2020-08-04 | 北京东土科技股份有限公司 | St语言源代码编译方法、装置、计算机设备及介质 |
CN112015396A (zh) * | 2020-08-28 | 2020-12-01 | 平安国际智慧城市科技股份有限公司 | 基于dsl的智能合约代码生成方法、装置、设备及存储介质 |
CN114168622A (zh) * | 2020-09-10 | 2022-03-11 | 北京达佳互联信息技术有限公司 | 一种基于领域特定语言的数据查询方法及装置 |
CN112541002A (zh) * | 2020-12-09 | 2021-03-23 | 北京奇艺世纪科技有限公司 | 程序语言转换方法、装置、电子设备及存储介质 |
CN114443041A (zh) * | 2021-11-30 | 2022-05-06 | 阿里云计算有限公司 | 抽象语法树的解析方法及计算机程序产品 |
Non-Patent Citations (1)
Title |
---|
分组密码专用描述语言及编译技术研究;李盛;《中国博士学位论文全文数据库 全文数据库 信息科技辑》;第51页到第64页 * |
Also Published As
Publication number | Publication date |
---|---|
CN115469875A (zh) | 2022-12-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3740863B1 (en) | Code suggestion based on machine learning | |
US9298427B2 (en) | Creating inferred symbols from code usage | |
Cánovas Izquierdo et al. | Extracting models from source code in software modernization | |
US10628130B2 (en) | Code completion of custom classes with machine learning | |
CN110149800B (zh) | 一种用于处理与源程序的源代码相关联的抽象语法树的装置 | |
US9928156B2 (en) | Missing include suggestions for external files | |
US9122540B2 (en) | Transformation of computer programs and eliminating errors | |
US10055399B2 (en) | Method and system for linear generalized LL recognition and context-aware parsing | |
CN108595334B (zh) | 一种计算Java程序动态切片的方法、装置及可读存储介质 | |
Brahmakshatriya et al. | Buildit: A type-based multi-stage programming framework for code generation in C++ | |
CN117113347A (zh) | 一种大规模代码数据特征提取方法及系统 | |
JP2021192282A (ja) | 深層学習フレームワークにおけるパターン変換方法、装置、電子デバイス、コンピューター記憶媒体およびコンピュータープログラム製品 | |
Zhang et al. | Automated extraction of grammar optimization rule configurations for metamodel-grammar co-evolution | |
US20030233640A1 (en) | Structuring program code | |
CN114115884B (zh) | 一种编程服务的管理方法以及相关装置 | |
Gotti et al. | UML executable: A comparative study of UML compilers and interpreters | |
CN115469875B (zh) | 基于遥控作业的领域专用语言dsl的编译方法及装置 | |
JP2879099B1 (ja) | 抽象構文木処理方法、抽象構文木処理プログラムを記録したコンピュータ読み取り可能な記録媒体、抽象構文木データを記録したコンピュータ読み取り可能な記録媒体、及び、抽象構文木処理装置 | |
Marin et al. | Towards a framework for generating program dependence graphs from source code | |
CN112579065A (zh) | 一种将图形组态画面生成跨平台代码的方法及系统 | |
CN116595533A (zh) | 一种针对Java Web应用的注入型漏洞检测方法及系统 | |
EP3872663A1 (en) | Method and device for symbolic analysis of a software program | |
Moser et al. | Towards attribute grammar mining by symbolic execution | |
CN117520191B (zh) | 一种基于程序路径的测试完备性检查方法、设备及存储介质 | |
CN114265582A (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 |