CN117008918A - 领域特定语言的处理方法、装置、介质及电子设备 - Google Patents
领域特定语言的处理方法、装置、介质及电子设备 Download PDFInfo
- Publication number
- CN117008918A CN117008918A CN202310909948.8A CN202310909948A CN117008918A CN 117008918 A CN117008918 A CN 117008918A CN 202310909948 A CN202310909948 A CN 202310909948A CN 117008918 A CN117008918 A CN 117008918A
- Authority
- CN
- China
- Prior art keywords
- domain
- specific language
- file
- grammar
- code file
- 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
- 238000003672 processing method Methods 0.000 title claims abstract description 22
- 238000012545 processing Methods 0.000 claims abstract description 77
- 238000000034 method Methods 0.000 claims abstract description 30
- 238000010845 search algorithm Methods 0.000 claims abstract description 18
- 238000004458 analytical method Methods 0.000 claims description 25
- 238000004590 computer program Methods 0.000 claims description 11
- 238000010276 construction Methods 0.000 claims description 9
- 230000011218 segmentation Effects 0.000 claims description 9
- 238000004806 packaging method and process Methods 0.000 claims description 8
- 238000011161 development Methods 0.000 abstract description 7
- 238000010586 diagram Methods 0.000 description 22
- 230000006870 function Effects 0.000 description 15
- 238000005516 engineering process Methods 0.000 description 8
- 230000008569 process Effects 0.000 description 8
- 230000006854 communication Effects 0.000 description 7
- 238000004891 communication Methods 0.000 description 6
- 230000018109 developmental process Effects 0.000 description 6
- 230000006399 behavior Effects 0.000 description 4
- 238000012423 maintenance Methods 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 4
- 238000012856 packing Methods 0.000 description 4
- 230000009471 action Effects 0.000 description 2
- 238000004422 calculation algorithm Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 239000004973 liquid crystal related substance Substances 0.000 description 2
- 230000000644 propagated effect Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 230000006978 adaptation Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 238000009434 installation Methods 0.000 description 1
- 238000011900 installation process Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 238000009941 weaving Methods 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/427—Parsing
-
- 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/423—Preprocessors
-
- 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)
- Devices For Executing Special Programs (AREA)
Abstract
本申请的实施例提供了一种领域特定语言的处理方法、装置、计算机可读介质及电子设备,该方法包括:基于元语法解释器从语法描述文件解析出第一抽象语法树,并根据深度优先搜索算法遍历执行所述第一抽象语法树,得到领域特定语言语法分析器的代码文件;将自定义代码文件存入所述语法描述文件所在目录,以将由自定义代码文件自定义的抽象语法树叶子节点织入到所述领域特定语言语法分析器;基于所述领域特定语言语法分析器的代码文件和所述自定义代码文件构造领域特定语言解析器;根据所述领域特定语言解析器对目标领域特定语言进行处理。本申请实施例可以提高可以提高DSL解释器的复用性和扩展性,易于进行二次开发。
Description
技术领域
本申请涉及计算机技术领域,具体而言,涉及一种领域特定语言的处理方法、装置、计算机可读介质及电子设备。
背景技术
领域特定语言(DSL)的字符流需要使用DSL解释器来进行解析,现有的DSL解释器采用的语法分析器的表达能力有限,部分的语法解析规则的实现需要和实际的实现代码强耦合,存在反直觉和反常规问题,对于维护人员的要求极高,难以上手,语法分析器难以快速二次开发,而且DSL解释器往往是基于基于脚本语言或者开源DSL工具进行二次开发得到的,通过定制化和二次开发得到DSL解释器的实现难度较大,复用性差。
发明内容
本申请的实施例提供了一种领域特定语言的处理方法、装置、计算机可读介质及电子设备,进而至少在一定程度上可以提高DSL解释器的复用性和扩展性,易于进行二次开发。
本申请的其他特性和优点将通过下面的详细描述变得显然,或部分地通过本申请的实践而习得。
根据本申请实施例的一个方面,提供了一种领域特定语言的处理方法,所述方法包括:基于元语法解释器从语法描述文件解析出第一抽象语法树,并根据深度优先搜索算法遍历执行所述第一抽象语法树,得到领域特定语言语法分析器的代码文件;将自定义代码文件存入所述语法描述文件所在目录,以将由所述自定义代码文件自定义的抽象语法树叶子节点织入到所述领域特定语言语法分析器,所述自定义代码文件用于定义所述语法描述文件中符号的行为;基于所述领域特定语言语法分析器的代码文件和所述自定义代码文件构造领域特定语言解析器;根据所述领域特定语言解析器对目标领域特定语言进行处理。
根据本申请实施例的一个方面,提供了一种领域特定语言的处理装置,所述装置包括:解析和遍历单元,用于基于元语法解释器从语法描述文件解析出第一抽象语法树,并根据深度优先搜索算法遍历执行所述第一抽象语法树,得到领域特定语言语法分析器的代码文件;保存单元,用于将自定义代码文件存入所述语法描述文件所在目录,以将由所述自定义代码文件自定义的抽象语法树叶子节点织入到所述领域特定语言语法分析器,所述自定义代码文件用于定义所述语法描述文件中符号的行为;构造单元,用于基于所述领域特定语言语法分析器的代码文件和所述自定义代码文件构造领域特定语言解析器;语言处理单元,用于根据所述领域特定语言解析器对目标领域特定语言进行处理。
在本申请的一些实施例中,基于前述方案,所述构造单元配置为:获取语法树遍历模块和至少一个自定义插件;所述语法树遍历模块用于遍历执行根据所述领域特定语言语法分析器的代码文件和所述自定义代码文件生成的第二抽象语法树,并将执行结果存入统一符号表中,所述统一符号表用于约束执行结果的格式;所述自定义插件用于根据所述统一符号表生成领域特定语言的处理结果;基于所述领域特定语言语法分析器的代码文件、所述自定义代码文件、所述语法树遍历模块和至少一个自定义插件构造领域特定语言解析器。
在本申请的一些实施例中,基于前述方案,所述构造单元配置为:基于打包程序将所述领域特定语言语法分析器的代码文件、所述自定义代码文件、所述语法树遍历模块和至少一个自定义插件打包为与目标平台匹配的二进制文件,得到领域特定语言解析器。
在本申请的一些实施例中,基于前述方案,所述语言处理单元配置为:根据所述领域特定语言解析器对目标领域特定语言进行处理,并以文件形式将处理结果输出至指定目录下。
在本申请的一些实施例中,基于前述方案,所述装置还包括添加单元,在以文件形式将处理结果输出至指定目录下之后,所述添加单元配置为:将文件形式的处理结果作为游戏资源文件添加到游戏项目工程中。
在本申请的一些实施例中,基于前述方案,所述领域特定语言语法分析器的代码文件包含叶子节点的占位符,所述保存单元配置为:按照领域特定语言语法分析器的代码文件中包含的叶子节点的占位符,将由所述自定义代码文件自定义的抽象语法树叶子节点织入到所述领域特定语言语法分析器。
在本申请的一些实施例中,基于前述方案,所述语法描述文件包括多种类型的规则集合,所述目标领域特定语言符合至少一种类型的规则集合。
在本申请的一些实施例中,基于前述方案,所述语言处理单元配置为:根据深度优先搜索算法对目标领域特定语言对应项目工程的目录下的所有文件进行遍历,生成与每个文件对应的抽象语法树,得到抽象语法森林;根据所述语法树遍历模块以深度优先搜索算法遍历执行所述抽象语法森林,得到统一符号表;基于所述自定义插件对所述统一符号表进行解析处理,得到对所述目标领域特定语言的处理结果。
在本申请的一些实施例中,基于前述方案,所述语言处理单元配置为:对每个文件的字符串进行词法分析,得到每个文件对应的分词序列;对每个文件对应的分词序列进行语法分析,得到每个文件对应的抽象语法树。
根据本申请实施例的一个方面,提供了一种计算机可读介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如上述实施例中所述的领域特定语言的处理方法。
根据本申请实施例的一个方面,提供了一种电子设备,包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现如上述实施例中所述的领域特定语言的处理方法。
根据本申请实施例的一个方面,提供了一种计算机程序产品,所述计算机程序产品包括计算机指令,所述计算机指令存储在计算机可读存储介质中,计算机设备的处理器从所述计算机可读存储介质读取所述计算机指令,所述处理器执行所述计算机指令,使得所述计算机设备执行如上述实施例中所述的领域特定语言的处理方法。
在本申请的一些实施例所提供的技术方案中,通过利用元语法解释器对语法描述文件进行解析得到第一抽象语法树,并根据深度优先搜索算法遍历执行该第一抽象语法树,从而得到领域特定语言语法分析器的代码文件,由于深度优先搜索算法更容易被开发人员理解,而且提供不同的语法描述文件便能够实现对不同语法的支持,因而,易于扩展和进行二次开发,同时,元语法解释器和语法描述文件的使用还可以增强在语法方面的约束,能提供快速准确的用法问题;在得到领域特定语言语法分析器的代码文件之后,通过将自定义代码文件存入所述领域特定语言语法分析器的代码文件所在目录,从而实现了将由自定义代码文件自定义的抽象语法树叶子节点织入到领域特定语言语法分析器中,自定义代码文件可以完全由开发人员进行控制,从而提高了定制能力和复用性。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1示出了可以应用本申请实施例的技术方案的示例性系统架构的示意图;
图2示出了根据本申请的一个实施例的领域特定语言的处理方法的流程图;
图3示出了根据本申请的一个实施例的图2实施例中步骤220的细节的流程图;
图4示出了根据本申请的一个实施例的第二抽象语法树的结构示意图;
图5示出了根据本申请的一个实施例的图2实施例中步骤230的细节的流程图;
图6示出了根据本申请的一个实施例的图5实施例中步骤232的细节的流程图;
图7示出了根据本申请的一个实施例的基于打包程序进行打包的原理示意图;
图8示出了根据本申请的一个实施例的根据领域特定语言解析器对目标领域特定语言进行处理的流程图;
图9示出了根据本申请的一个实施例的图8中生成与每个文件对应的抽象语法树的细节流程图;
图10示出了根据本申请的一个实施例的利用DSL解析器对DSL文件夹下的文件进行分析的流程图;
图11示出了根据本申请的一个实施例的整体流程示意图;
图12示出了根据本申请的一个实施例的领域特定语言的处理装置的框图;
图13示出了适于用来实现本申请实施例的电子设备的计算机系统的结构示意图。
具体实施方式
现在将参考附图更全面地描述示例实施方式。然而,示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施方式使得本申请将更加全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。
此外,所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施例中。在下面的描述中,提供许多具体细节从而给出对本申请的实施例的充分理解。然而,本领域技术人员将意识到,可以实践本申请的技术方案而没有特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知方法、装置、实现或者操作以避免模糊本申请的各方面。
附图中所示的方框图仅仅是功能实体,不一定必须与物理上独立的实体相对应。即,可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
附图中所示的流程图仅是示例性说明,不是必须包括所有的内容和操作/步骤,也不是必须按所描述的顺序执行。例如,有的操作/步骤还可以分解,而有的操作/步骤可以合并或部分合并,因此实际执行的顺序有可能根据实际情况改变。
领域特定语言(Domain-Specific Language,DSL)指的是专注于某个应用程序领域的计算机语言,通常需要利用DSL解析器对DSL字符流进行解析。
然而,在相关技术中,通常是基于脚本语言或者开源DSL工具进行二次开发,形成项目组自身的DSL解析器;并且,在DSL解析器中通常采用采用基于LL文法、LR文法的语法分析器或者简单的字符串匹配来对DSL字符流进行解析,而且,对DSL字符流的解析结果往往需要做规整处理;此外,相关技术采用的DSL解析器需要依赖大量的开源组件。
因此,相关技术的方案主要存在以下缺陷:
1.基于LL或者LR的语法分析器,其表达能力有限,部分的语法解析规则的实现需要和实际的实现代码强耦合,反直觉,反常规。这样对于维护人员的要求极高,难以上手,难以快速二次开发。
2.采用基于脚本语言或者开源DSL工具进行二次开发,DSL解析器本身的特性是二次改造出来的,是一种弱约束,这就导致误用频繁以及难以感知的依赖关系,导致开发者的困惑;此外,语法方面的约束是很难实现的,往往问题要到数据导出的时候才能发现,不好溯源;最后,脚本语言或者开源DSL工具往往是庞大的开源软件,对于二次开发来说,非常笨重以及难以驾驭。
3.不同DSL乃至于脚本语言,对于字符流文本的解析结果千差万别,进而导致了DSL解析器的功能模块相互间耦合,难以复用。
4.常见的DSL方案需要安装大量的依赖库,安装过程乃至类库升级都会带来工作流的停滞。
为此,本申请首先提供了一种领域特定语言的处理方法。基于本申请实施例提供的领域特定语言的处理方法可以克服上述缺陷,至少能够取得以下
有益效果:
1.可以通过符合元语法解释器的语法文件生成符合PEG的语法分析器,使得工具约束性强,能提供快速准确的用法问题,同时易于扩展以及二次开发。
2.采用Mixin技术,开发人员可以通过抽象语法树的叶子节点实现对整个语法分析流程的控制,扩展性强,复用性强。
3.基于PEG的语法分析是一个确定的语法分析过程,无二义性,容易扩展维护。
4.统一的符号空间、插件化的符号处理程序解耦了资源插件和语法分析过程,使得复用性极强。
5.跨平台打包使得版本控制,使用非常简单,工程化好。
图1示出了可以应用本申请实施例的技术方案的示例性系统架构的示意图。如图1所示,该系统架构100可以包括用户终端110、服务器120以及云端130,用户终端110与服务器120之间以及服务器120与云端130之间均建立了通信连接,服务器120上部署有元语法解释器和打包程序,并且服务器120的插件目录中存储有插件文件,云端130存储着游戏项目工程,服务器120为本申请实施例的执行主体。当本申请提供的一种领域特定语言的处理方法应用于图1所示的系统架构中时,一个过程可以是这样的:首先,用户通过用户终端110向服务器120提交格式为.grammar的语法描述文件,服务器120利用元语法解释器将语法描述文件解析为第一抽象语法树,并利用深度优先搜索算法遍历执行第一抽象语法树,从而得到DSL语法分析器的代码文件,服务器120会将DSL语法分析器的代码文件保存在服务器120的目标目录下;然后,用户通过用户终端110向服务器120提交自定义代码文件,服务器120会将该自定义代码文件也保存至该目标目录下;接着,服务器120会利用打包程序将目标目录下的自定义代码文件、DSL语法分析器的代码文件以及插件目录下的插件文件打包为DSL解释器的二进制文件;最后,服务器120将DSL解释器的二进制文件发送至云端130的游戏项目工程中的指定目录下,使得该DSL解释器的输出结果可以作用于游戏项目中。
在本申请的一些实施例中,游戏项目工程为模拟游戏(Simulation Game,SLG)的项目工程,即回合制策略游戏的项目工程。
在本申请的一些实施例中,服务器120的目标目录或其他目录中还存储有语法树遍历模块的代码文件,服务器120会利用打包程序将语法树遍历模块的代码文件、目标目录下的自定义代码文件、DSL语法分析器的代码文件以及插件目录下的插件文件打包为DSL解释器的二进制文件。
在本申请的一些实施例中,服务器120生成了DSL语法分析器的代码文件之后会向用户终端110返回通知信息,用户是根据该通知信息的提醒而通过用户终端110向服务器120提交自定义代码文件的。
应该理解,图1中的用户终端、服务器以及云端的数目仅仅是示意性的。根据实现需要,可以具有任意数目的用户终端、服务器以及云端,即用户终端、服务器以及云端均可以为多个,例如,服务器可以是由多个服务器组成的服务器集群等。
需要说明的是,图1示出的仅为本申请的一个实施例。虽然在图1实施例的方案中,生成的DSL解释器主要用于游戏领域,但在本申请的其他实施例中,还可以应用于其他各种需要DSL解释器的领域;虽然在图1实施例的方案中,在执行方案时,语法描述文件和自定义代码文件是由执行主体之外的其他终端向执行主体发送的,但在本申请的其他实施例中,语法描述文件和自定义代码文件还可以预先存储在执行主体的本地;虽然在图1实施例的方案中,用户终端为台式计算机,而执行主体为服务器,但在本申请的其他实施例中,用户终端和执行主体还可以为笔记本电脑、台式计算机、平板电脑、车载终端、便携式可穿戴设备、工作站等各种类型的终端设备;虽然在图1实施例的方案中,DSL解释器是在执行主体生成,并在执行主体之外的云端部署的,但在本申请的其他实施例中,DSL解释器的生成和部署可以是在同一个终端设备上进行的。本申请实施例对此不作任何限定,本申请的保护范围也不应因此而受到任何限制。
易于理解,本申请实施例所提供的领域特定语言的处理方法一般由服务器执行,相应地,领域特定语言的处理装置一般设置于服务器中。但是,在本申请的其它实施例中,终端设备也可以与服务器具有相似的功能,从而执行本申请实施例所提供的领域特定语言的处理方案。
因此,本申请实施例可以应用于终端或服务器中。服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN、以及大数据和人工智能平台等基础云计算服务的云服务器。终端可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表等,但并不局限于此。终端以及服务器可以通过有线或无线通信方式进行直接或间接地连接,本申请在此不做限制。
本申请实施例的方案可以应用于云计算领域。云计算(cloud computing)是一种计算模式,它将计算任务分布在大量计算机构成的资源池上,使各种应用系统能够根据需要获取计算力、存储空间和信息服务。提供资源的网络被称为“云”。“云”中的资源在使用者看来是可以无限扩展的,并且可以随时获取,按需使用,随时扩展,按使用付费。
作为云计算的基础能力提供商,会建立云计算资源池(简称云平台,一般称为IaaS(Infrastructure as a Service,基础设施即服务))平台,在资源池中部署多种类型的虚拟资源,供外部客户选择使用。云计算资源池中主要包括:计算设备(为虚拟化机器,包含操作系统)、存储设备、网络设备。
按照逻辑功能划分,在IaaS(Infrastructure as a Service,基础设施即服务)层上可以部署PaaS(Platform as a Service,平台即服务)层,PaaS层之上再部署SaaS(Software as a Service,软件即服务)层,也可以直接将SaaS部署在IaaS上。PaaS为软件运行的平台,如数据库、web容器等。SaaS为各式各样的业务软件,如web门户网站、短信群发器等。一般来说,SaaS和PaaS相对于IaaS是上层。
以下对本申请实施例的技术方案的实现细节进行详细阐述:
图2示出了根据本申请的一个实施例的领域特定语言的处理方法的流程图,该领域特定语言的处理方法可以由各种能够计算和处理的设备来执行,比如可以是用户终端或云服务器,用户终端包括但不限于手机、电脑、智能语音交互设备、智能家电、车载终端、飞行器、智能手表等。请参照图2所示,该领域特定语言的处理方法至少包括以下步骤:
在步骤210中,基于元语法解释器从语法描述文件解析出第一抽象语法树,并根据深度优先搜索算法遍历执行所述第一抽象语法树,得到领域特定语言语法分析器的代码文件。
语法描述文件的格式可以是.grammar,利用元语法解释器对语法描述文件进行解析,可以实现向抽象语法树的转换,从而得到第一抽象语法树。
抽象语法树(Abstract Syntax Tree,AST)是源代码的抽象语法结构的树状表示,树上的每个节点都表示源代码中的一种结构。
元语法解释器是用来生成DSL解释器的解释器,其是通过自举的方式生成DSL解释器的,即通过旧版本的元语法解释器生成新版本的DSL解释器。元语法解释器自身也包含一个格式为.grammar的语法描述文件,其界定了语法规则,元语法解释器解析的该语法描述文件必须符合由元语法解释器自身界定的语法规则。
本申请实施例中,元语法解释器采用的是PEG技术,PEG(Parsing ExpressionGrammar)是一种基于形式化文法理论的语法描述语言,它用一套识别语言中字符串的规则来描述一种形式语言,它可以被用于快速且方便地描述复杂的语法规则。PEG技术是采用DFS(深度优先搜索,Depth-First-Search)算法进行单词匹配的,更符合开发人员直觉,易于理解上手。
语法描述文件用来定义代码的表达方式。元语法解释器对语法描述文件解析,涉及词法分析(Lexical Analysis)和语法分析(Syntactic Analysis)两个阶段,在词法分析阶段,元语法解释器会扫描语法描述文件中的文本,产生分词序列;在语法分析阶段,元语法解释器会根据定义的文法规则(rules of grammar)对分词序列进行语法分析,从而输出第一抽象语法树。
领域特定语言语法分析器即DSL语法分析器。通过执行第一抽象语法树,可以生成DSL语法分析器的代码文件。DSL语法分析器的代码文件可以被存至目标目录下。
在本申请的一个实施例中,语法描述文件包括多种类型的规则集合。
每种类型的规则集合可以包括一个或多个匹配规则。
一个语法描述文件的内容的示例可以如下所示:
start:
|"print"n=plus{Print(n)};
plus:
|n1=NUMBER"+"n2=NUMBER{Plus(n1,n2)};
其中,start和plus分别代表一种类型的规则集合,start是特殊的规则集合,代表元语法解释器的匹配起点;“|”符号用于分割一种类型的规则集合下的多个匹配规则,DSL与任意一个匹配规则相匹配,代表匹配成功;n、n1、n2分别代表匹配结果;大括号对{}中的内容代表匹配成功后调用的叶子节点处理函数;NUMBER代表匹配一个数字;print和+代表匹配固定的字符串;start这一类型的规则集合中的plus代表匹配plus规则。
如果需要使用生成的DSL解释器处理的DSL字符流为“print 1+2”这一字符串,那么,其符合上述语法描述文件定义的匹配规则。
在步骤220中,将自定义代码文件存入语法描述文件所在目录,以将由自定义代码文件自定义的抽象语法树叶子节点织入到领域特定语言语法分析器,自定义代码文件用于定义语法描述文件中符号的行为。
在本申请的一个实施例中,存入语法描述文件所在目录的自定义代码文件与语法描述文件同名。
具体地,开发者需要在语法描述文件的同目录下提供和语法描述文件采用相同文件名称的自定义代码文件,在该自定义代码文件中开发者需要定义DSL语法分析器中应用到的各类AST节点,即自定义代码文件为AST节点代码文件。
在本申请的一个实施例中,领域特定语言语法分析器的代码文件包含叶子节点的占位符。
前述的语法描述文件中大括号对{}中的叶子节点处理函数即为叶子节点的占位符,基于语法描述文件得到的DSL语法分析器的代码文件中自然也包含与抽象语法树叶子节点对应的占位符。
图3示出了根据本申请的一个实施例的图2实施例中步骤220的细节的流程图。请参见图3所示,将由自定义代码文件自定义的抽象语法树叶子节点织入到领域特定语言语法分析器,具体可以包括以下步骤:
在步骤220'中,按照领域特定语言语法分析器的代码文件中包含的叶子节点的占位符,将由自定义代码文件自定义的抽象语法树叶子节点织入到领域特定语言语法分析器。
织入也可以称为混入,混入(Mixin)提供了一种非常灵活的方式,来分发Vue组件中的可复用功能。一个混入对象可以包含任意组件选项。当组件使用混入对象时,所有混入对象的选项将被“混合”进入该组件本身的选项。
根据叶子节点的占位符,将抽象语法树叶子节点对应织入领域特定语言语法分析器,便可以得到基础的DSL解析器。
自定义代码文件用来定义语法描述文件中各符号用来做什么事情。以上述的语法描述文件的内容的示例为例,开发者必须定义好Print节点和Plus节点的具体实现,比如通过eval()函数实现一个固定接口来实现。比如,开发者可以将Print节点和Plus节点分别定义为:
1)Plus节点为将n1和n2的结果转化为整形数据并相加。
2)Print节点为将n的结果存入到统一符号表中,名称为N,并打印到控制台。
图4示出了根据本申请的一个实施例的第二抽象语法树的结构示意图。对于上述的语法描述文件的内容,通过将DSL语法分析器和由自定义代码文件定义的AST节点融合得到的基础的DSL解析器便可以生成如图4所示的第二抽象语法树。通过图4可以看到,第二抽象语法树包括两个NUMBER节点、Plus节点以及Print节点,其中,两个NUMBER节点分别代表n1和n2。
在步骤230中,基于领域特定语言语法分析器的代码文件和自定义代码文件构造领域特定语言解析器。
可以将领域特定语言语法分析器的代码文件和自定义代码文件打包为基础DSL解析器。
图5示出了根据本申请的一个实施例的图2实施例中步骤230的细节的流程图。请参见图5所示,基于领域特定语言语法分析器的代码文件和自定义代码文件构造领域特定语言解析器,具体可以包括以下步骤:
在步骤231中,获取语法树遍历模块和至少一个自定义插件;语法树遍历模块用于遍历执行根据领域特定语言语法分析器的代码文件和自定义代码文件生成的第二抽象语法树,并将执行结果存入统一符号表中,统一符号表用于约束执行结果的格式;自定义插件用于根据统一符号表生成领域特定语言的处理结果。
可以从插件目录下获取一个或多个自定义插件,并从设定目录下获取语法树遍历模块的代码文件。基础DSL解析器可以根据DSL字符流的输入而输出第二抽象语法树。
每个自定义插件的输入是统一符号表。自定义插件的内容可以由开发者自定义,从而对统一符号表按需进行解析处理。根据统一符号表生成什么形式的对DSL的处理结果由自定义插件定义。
统一符号表的格式可以如下所示:
{
"xxx":{
"tags":[(tag_name,tag_value)]
"属性1":{}
}
}
可以看到,统一符号表主要包含符号的名称和内容,其中,"xxx"为符号的名称,比如,大括号对{}中的内容即为符号的内容;"tags"为符号的标签,其包含符号在至少一个维度上的归类,tag_name是符号标签名称,tag_value是符号在符号标签名称这一维度上的归类;比如,对于“N”这一符号,符号的内容中可以定义为tag-name=“type”,tag-value=“int”,这代表“N”这一符号在type这一维度上的归类为int。
比如,开发者可以定义一个自定义插件Plugin A,其作用是将统一符号表中N的值追加到固定目录下的result.txt文件中。
通过设置统一符号表,无论DSL语法分析器的代码文件和自定义代码文件是什么内容,均可以约束至统一格式的符号表。
在步骤232中,基于领域特定语言语法分析器的代码文件、自定义代码文件、语法树遍历模块和至少一个自定义插件构造领域特定语言解析器。
利用基于DSL语法分析器的代码文件、自定义代码文件、语法树遍历模块和自定义插件可以获得最终的DSL解析器。
图6示出了根据本申请的一个实施例的图5实施例中步骤232的细节的流程图。请参见图6所示,基于领域特定语言语法分析器的代码文件、自定义代码文件、语法树遍历模块和至少一个自定义插件构造领域特定语言解析器,具体可以包括以下步骤:
在步骤232'中,基于打包程序将领域特定语言语法分析器的代码文件、自定义代码文件、语法树遍历模块和至少一个自定义插件打包为与目标平台匹配的二进制文件,得到领域特定语言解析器。
DSL语法分析器的代码文件、自定义代码文件、语法树遍历模块和自定义插件都可以采用跨平台的脚本语言实现。打包程序会扫描指定的路径,比如对目标目录进行扫描,从中过滤出DSL语法分析器的代码文件、自定义代码文件和语法树遍历模块,打包程序还会扫描固定的插件目录,得到一个或多个自定义插件的文件;打包程序在打包时,最终会根据DSL解析器需要使用的平台来生成与之匹配的二进制文件,得到最终的DSL解析器,从而实现跨平台。此处的平台是指DSL解析器的运行环境,包含机器、操作系统等要素。
图7示出了根据本申请的一个实施例的基于打包程序进行打包的原理示意图。请参见图7所示,DSL语法分析器、AST节点、语法树遍历模块及插件集合对应的代码文件经过打包程序的打包,最终得到了DSL解析器。
在步骤240中,根据领域特定语言解析器对目标领域特定语言进行处理。
目标领域特定语言符合至少一种类型的规则集合。比如,字符串“print 1+2”便符合上述语法描述文件中定义的规则。
利用最终的DSL解析器便可以对DSL字符流进行解析。
图8示出了根据本申请的一个实施例的根据领域特定语言解析器对目标领域特定语言进行处理的流程图。请参见图8所示,根据领域特定语言解析器对目标领域特定语言进行处理,具体可以包含以下步骤:
在步骤810中,根据深度优先搜索算法对目标领域特定语言对应项目工程的目录下的所有文件进行遍历,生成与每个文件对应的抽象语法树,得到抽象语法森林。
当需要对指定的DSL项目工程进行解析,首先,利用DFS(深度优先搜索,Depth-First-Search)算法遍历该DSL项目工程对应目录下的所有文件。
图9示出了根据本申请的一个实施例的图8中生成与每个文件对应的抽象语法树的细节流程图。请参见9所示,生成与每个文件对应的抽象语法树,具体可以包括以下步骤:
在步骤811中,对每个文件的字符串进行词法分析,得到每个文件对应的分词序列。
每个文件先进行词法分析解析成分词序列,即单词流。
在步骤812中,对每个文件对应的分词序列进行语法分析,得到每个文件对应的抽象语法树。
对单词流进行解析,基于单词流生成每个文件对应的抽象语法树,所有抽象语法树构成了抽象语法森林。
请继续参见图8,在步骤820中,根据语法树遍历模块以深度优先搜索算法遍历抽象语法森林,得到统一符号表。
利用DFS遍历执行抽象语法森林,在此过程中会执行每个织入的抽象语法树节点,将执行结果存入统一符号表中,最终形成一个统一的符号空间,有执行结果对应的数据对象都会变为符号空间中一个附带上各种K-V标签的符号对象。
在步骤830中,基于自定义插件对统一符号表进行解析处理,得到对目标领域特定语言的处理结果。
在执行完整个抽象语法森林后,会将统一符号表提交给一个或多个自定义插件进行处理,不同的自定义插件会生成不同的处理结果,即资源。
在本申请的一个实施例中,根据领域特定语言解析器对目标领域特定语言进行处理,包括:根据领域特定语言解析器对目标领域特定语言进行处理,并以文件形式将处理结果输出至指定目录下。
不同的自定义插件会按照为其配置的目录将资源以文件形式输出至该目录下。
以前述的语法描述文件为例,将字符流“print 1+2”输入到DSL解析器中,会产生以下两个效果:
1、控制台打印“3”,DSL解析器运行时的统一符号表中会多一个N:3的映射,由自定义的Print节点决定。
2、Plugin A插件定义的目录中发现result.txt文件,内容为字符串3。
易于理解,其他插件会以不同于Plugin A插件的方式生成处理结果,并将处理结果输出至其他文件中。
在本申请的一个实施例中,在以文件形式将处理结果输出至指定目录下之后,该领域特定语言的处理方法还包括:将文件形式的处理结果作为游戏资源文件添加到游戏项目工程中。
文件形式的处理结果可以用于定义游戏的网络协议、属性系统及数据库描述等等。游戏项目工程可以是SLG游戏的项目工程,其包含项目目录。
图10示出了根据本申请的一个实施例的利用DSL解析器对DSL文件夹下的文件进行分析的流程图。如图10所示,利用DSL解析器对DSL文件夹下的文件进行分析流程如下:首先,对DSL文件夹这一目录下的所有DSL文件进行遍历;针对每一DSL文件,先进行词法分析将DSl文件解析成单词流,再基于单词流进行语法分析,得到每一DSL文件对应的抽象语法树,形成了抽象语法森林;然后,遍历执行抽象语法森林中的各抽象语法树,并将执行结果存入统一的符号表中;最后,利用三个数据插件分别对统一的符号表进行处理,最终生成不同的处理结果。
图11示出了根据本申请的一个实施例的整体流程示意图。如图11所示,整体流程如下:
步骤1110,开始。
整体流程开始。
步骤1120,.grammar(语法描述文件)。
获取.grammar格式的语法描述文件
步骤1130,元语法解释器。
利用元语法解释器解析语法描述文件。
步骤1140,符合.grammar格式的解释器。
得到DSL语法分析器的代码文件。
步骤1150,自定义AST节点文件。
获取自定义代码文件。
步骤1160,自定义插件。
获取自定义插件。
步骤1170,跨平台打包。
根据DSL解析的使用平台进行跨平台打包。
步骤1180,二进制文件。
通过打包得到能够在相应平台运行的二进制文件。
步骤1190,结束。
整体流程结束。
综上所述,根据本申请实施例提供的领域特定语言的处理方法,至少能够取得以下技术效果:1、语法解析能力上使用了PEG技术,较传统的LL或者LR,PEG更类似于采用了基于DFS(深度优先搜索)的单词匹配,符合开发人员直觉,易于理解上手;2、采用自定义DSL解释器节点,并Mixin的技术,可以提供高可定制化的能力;3、采用统一的符号表技术,解耦了资源生成插件和语法分析结果,使得基础的DSL解析器和数据导出解耦开,使得两方的复用性大大增强;以插件化的方式进行符号表处理,可以方便定制插件,以及定制运行结果;4、采用跨平台的打包方案,则使得整个工具构建好后可以直接使用,一键运行。
以下介绍本申请的装置实施例,可以用于执行本申请上述实施例中的领域特定语言的处理方法。对于本申请装置实施例中未披露的细节,请参照本申请上述的领域特定语言的处理方法的实施例。
图12示出了根据本申请的一个实施例的领域特定语言的处理装置的框图。参照图12所示,根据本申请的一个实施例的领域特定语言的处理装置1200,包括:解析和遍历单元1210、保存单元1220、构造单元1230以及语言处理单元1240。其中,解析和遍历单元1210用于基于元语法解释器从语法描述文件解析出第一抽象语法树,并根据深度优先搜索算法遍历执行所述第一抽象语法树,得到领域特定语言语法分析器的代码文件;保存单元1220用于将自定义代码文件存入所述语法描述文件所在目录,以将由所述自定义代码文件自定义的抽象语法树叶子节点织入到所述领域特定语言语法分析器,所述自定义代码文件用于定义所述语法描述文件中符号的行为;构造单元1230用于基于所述领域特定语言语法分析器的代码文件和所述自定义代码文件构造领域特定语言解析器;语言处理单元1240用于根据所述领域特定语言解析器对目标领域特定语言进行处理。
在本申请的一些实施例中,基于前述方案,构造单元1230配置为:获取语法树遍历模块和至少一个自定义插件;所述语法树遍历模块用于遍历执行根据所述领域特定语言语法分析器的代码文件和所述自定义代码文件生成的第二抽象语法树,并将执行结果存入统一符号表中,所述统一符号表用于约束执行结果的格式;所述自定义插件用于根据所述统一符号表生成领域特定语言的处理结果;基于所述领域特定语言语法分析器的代码文件、所述自定义代码文件、所述语法树遍历模块和至少一个自定义插件构造领域特定语言解析器。
在本申请的一些实施例中,基于前述方案,构造单元1230配置为:基于打包程序将所述领域特定语言语法分析器的代码文件、所述自定义代码文件、所述语法树遍历模块和至少一个自定义插件打包为与目标平台匹配的二进制文件,得到领域特定语言解析器。
在本申请的一些实施例中,基于前述方案,语言处理单元1240配置为:根据所述领域特定语言解析器对目标领域特定语言进行处理,并以文件形式将处理结果输出至指定目录下。
在本申请的一些实施例中,基于前述方案,所述装置还包括添加单元,在以文件形式将处理结果输出至指定目录下之后,所述添加单元配置为:将文件形式的处理结果作为游戏资源文件添加到游戏项目工程中。
在本申请的一些实施例中,基于前述方案,所述领域特定语言语法分析器的代码文件包含叶子节点的占位符,保存单元1220配置为:按照领域特定语言语法分析器的代码文件中包含的叶子节点的占位符,将由所述自定义代码文件自定义的抽象语法树叶子节点织入到所述领域特定语言语法分析器。
在本申请的一些实施例中,基于前述方案,所述语法描述文件包括多种类型的规则集合,所述目标领域特定语言符合至少一种类型的规则集合。
在本申请的一些实施例中,基于前述方案,语言处理单元1240配置为:根据深度优先搜索算法对目标领域特定语言对应项目工程的目录下的所有文件进行遍历,生成与每个文件对应的抽象语法树,得到抽象语法森林;根据所述语法树遍历模块以深度优先搜索算法遍历执行所述抽象语法森林,得到统一符号表;基于所述自定义插件对所述统一符号表进行解析处理,得到对所述目标领域特定语言的处理结果。
在本申请的一些实施例中,基于前述方案,语言处理单元1240配置为:对每个文件的字符串进行词法分析,得到每个文件对应的分词序列;对每个文件对应的分词序列进行语法分析,得到每个文件对应的抽象语法树。
图13示出了适于用来实现本申请实施例的电子设备的计算机系统的结构示意图。
需要说明的是,图13示出的电子设备的计算机系统1300仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
如图13所示,计算机系统1300包括中央处理单元(Central Processing Unit,CPU)1301,其可以根据存储在只读存储器(Read-Only Memory,ROM)1302中的程序或者从存储部分1308加载到随机访问存储器(Random Access Memory,RAM)1303中的程序而执行各种适当的动作和处理,例如执行上述实施例中所述的方法。在RAM 1303中,还存储有系统操作所需的各种程序和数据。CPU 1301、ROM 1302以及RAM 1303通过总线1304彼此相连。输入/输出(Input/Output,I/O)接口1305也连接至总线1304。
以下部件连接至I/O接口1305:包括键盘、鼠标等的输入部分1306;包括诸如阴极射线管(Cathode Ray Tube,CRT)、液晶显示器(Liquid Crystal Display,LCD)等以及扬声器等的输出部分1307;包括硬盘等的存储部分1308;以及包括诸如LAN(Local AreaNetwork,局域网)卡、调制解调器等的网络接口卡的通信部分1309。通信部分1309经由诸如因特网的网络执行通信处理。驱动器1310也根据需要连接至I/O接口1305。可拆卸介质1311,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1310上,以便于从其上读出的计算机程序根据需要被安装入存储部分1308。
特别地,根据本申请的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本申请的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分1309从网络上被下载和安装,和/或从可拆卸介质1311被安装。在该计算机程序被中央处理单元(CPU)1301执行时,执行本申请的系统中限定的各种功能。
需要说明的是,本申请实施例所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(Erasable Programmable Read Only Memory,EPROM)、闪存、光纤、便携式紧凑磁盘只读存储器(Compact Disc Read-Only Memory,CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本申请中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、有线等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本申请各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。其中,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本申请实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现,所描述的单元也可以设置在处理器中。其中,这些单元的名称在某种情况下并不构成对该单元本身的限定。
作为一方面,本申请还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该电子设备执行时,使得该电子设备实现上述实施例中所述的方法。
应当注意,尽管在上文详细描述中提及了用于动作执行的设备的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本申请的实施方式,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。
通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本申请实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、触控终端、或者网络设备等)执行根据本申请实施方式的方法。
可以理解的是,在本申请的具体实施方式中,涉及到与领域特定语言的处理相关的数据,当本申请以上实施例运用到具体产品或技术中时,需要获得用户许可或者同意,且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准。
本领域技术人员在考虑说明书及实践这里公开的实施方式后,将容易想到本申请的其它实施方案。本申请旨在涵盖本申请的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本申请的一般性原理并包括本申请未公开的本技术领域中的公知常识或惯用技术手段。
应当理解的是,本申请并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本申请的范围仅由所附的权利要求来限制。
Claims (13)
1.一种领域特定语言的处理方法,其特征在于,所述方法包括:
基于元语法解释器从语法描述文件解析出第一抽象语法树,并根据深度优先搜索算法遍历执行所述第一抽象语法树,得到领域特定语言语法分析器的代码文件;
将自定义代码文件存入所述语法描述文件所在目录,以将由所述自定义代码文件自定义的抽象语法树叶子节点织入到所述领域特定语言语法分析器,所述自定义代码文件用于定义所述语法描述文件中符号的行为;
基于所述领域特定语言语法分析器的代码文件和所述自定义代码文件构造领域特定语言解析器;
根据所述领域特定语言解析器对目标领域特定语言进行处理。
2.根据权利要求1所述的领域特定语言的处理方法,其特征在于,所述基于所述领域特定语言语法分析器的代码文件和所述自定义代码文件构造领域特定语言解析器,包括:
获取语法树遍历模块和至少一个自定义插件;所述语法树遍历模块用于遍历执行根据所述领域特定语言语法分析器的代码文件和所述自定义代码文件生成的第二抽象语法树,并将执行结果存入统一符号表中,所述统一符号表用于约束执行结果的格式;所述自定义插件用于根据所述统一符号表生成领域特定语言的处理结果;
基于所述领域特定语言语法分析器的代码文件、所述自定义代码文件、所述语法树遍历模块和至少一个自定义插件构造领域特定语言解析器。
3.根据权利要求2所述的领域特定语言的处理方法,其特征在于,所述基于所述领域特定语言语法分析器的代码文件、所述自定义代码文件、所述语法树遍历模块和至少一个自定义插件构造领域特定语言解析器,包括:
基于打包程序将所述领域特定语言语法分析器的代码文件、所述自定义代码文件、所述语法树遍历模块和至少一个自定义插件打包为与目标平台匹配的二进制文件,得到领域特定语言解析器。
4.根据权利要求1所述的领域特定语言的处理方法,其特征在于,所述根据所述领域特定语言解析器对目标领域特定语言进行处理,包括:
根据所述领域特定语言解析器对目标领域特定语言进行处理,并以文件形式将处理结果输出至指定目录下。
5.根据权利要求4所述的领域特定语言的处理方法,其特征在于,在以文件形式将处理结果输出至指定目录下之后,所述方法还包括:
将文件形式的处理结果作为游戏资源文件添加到游戏项目工程中。
6.根据权利要求1所述的领域特定语言的处理方法,其特征在于,所述领域特定语言语法分析器的代码文件包含叶子节点的占位符,所述将由所述自定义代码文件自定义的抽象语法树叶子节点织入到所述领域特定语言语法分析器,包括:
按照领域特定语言语法分析器的代码文件中包含的叶子节点的占位符,将由所述自定义代码文件自定义的抽象语法树叶子节点织入到所述领域特定语言语法分析器。
7.根据权利要求1所述的领域特定语言的处理方法,其特征在于,所述语法描述文件包括多种类型的规则集合,所述目标领域特定语言符合至少一种类型的规则集合。
8.根据权利要求1-7任意一项所述的领域特定语言的处理方法,其特征在于,所述根据所述领域特定语言解析器对目标领域特定语言进行处理,包括:
根据深度优先搜索算法对目标领域特定语言对应项目工程的目录下的所有文件进行遍历,生成与每个文件对应的抽象语法树,得到抽象语法森林;
根据所述语法树遍历模块以深度优先搜索算法遍历执行所述抽象语法森林,得到统一符号表;
基于所述自定义插件对所述统一符号表进行解析处理,得到对所述目标领域特定语言的处理结果。
9.根据权利要求8所述的领域特定语言的处理方法,其特征在于,所述生成与每个文件对应的抽象语法树,包括:
对每个文件的字符串进行词法分析,得到每个文件对应的分词序列;
对每个文件对应的分词序列进行语法分析,得到每个文件对应的抽象语法树。
10.一种领域特定语言的处理装置,其特征在于,所述装置包括:
解析和遍历单元,用于基于元语法解释器从语法描述文件解析出第一抽象语法树,并根据深度优先搜索算法遍历执行所述第一抽象语法树,得到领域特定语言语法分析器的代码文件;
保存单元,用于将自定义代码文件存入所述语法描述文件所在目录,以将由所述自定义代码文件自定义的抽象语法树叶子节点织入到所述领域特定语言语法分析器,所述自定义代码文件用于定义所述语法描述文件中符号的行为;
构造单元,用于基于所述领域特定语言语法分析器的代码文件和所述自定义代码文件构造领域特定语言解析器;
语言处理单元,用于根据所述领域特定语言解析器对目标领域特定语言进行处理。
11.一种计算机可读介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至9中任一项所述的领域特定语言的处理方法。
12.一种电子设备,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现如权利要求1至9中任一项所述的领域特定语言的处理方法。
13.一种计算机程序产品,其特征在于,所述计算机程序产品包括计算机指令,所述计算机指令存储在计算机可读存储介质中,计算机设备的处理器从所述计算机可读存储介质读取所述计算机指令,所述处理器执行所述计算机指令,使得所述计算机设备执行如权利要求1至9中任一项所述的领域特定语言的处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310909948.8A CN117008918A (zh) | 2023-07-21 | 2023-07-21 | 领域特定语言的处理方法、装置、介质及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310909948.8A CN117008918A (zh) | 2023-07-21 | 2023-07-21 | 领域特定语言的处理方法、装置、介质及电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117008918A true CN117008918A (zh) | 2023-11-07 |
Family
ID=88570338
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310909948.8A Pending CN117008918A (zh) | 2023-07-21 | 2023-07-21 | 领域特定语言的处理方法、装置、介质及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117008918A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117421009A (zh) * | 2023-12-19 | 2024-01-19 | 深圳市航盛电子股份有限公司 | 信号代码生成方法、装置、终端设备以及存储介质 |
-
2023
- 2023-07-21 CN CN202310909948.8A patent/CN117008918A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117421009A (zh) * | 2023-12-19 | 2024-01-19 | 深圳市航盛电子股份有限公司 | 信号代码生成方法、装置、终端设备以及存储介质 |
CN117421009B (zh) * | 2023-12-19 | 2024-04-19 | 深圳市航盛电子股份有限公司 | 信号代码生成方法、装置、终端设备以及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111708539B (zh) | 一种应用程序代码转换方法、装置、电子设备和存储介质 | |
US8762962B2 (en) | Methods and apparatus for automatic translation of a computer program language code | |
Marrs | JSON at work: practical data integration for the web | |
US8286132B2 (en) | Comparing and merging structured documents syntactically and semantically | |
US8321834B2 (en) | Framework for automatically merging customizations to structured code that has been refactored | |
US9086931B2 (en) | System for translating diverse programming languages | |
US8959477B2 (en) | Scripting language for business applications | |
US9965259B2 (en) | System for translating diverse programming languages | |
US20140156282A1 (en) | Method and system for controlling target applications based upon a natural language command string | |
US8762963B2 (en) | Translation of programming code | |
US20070006134A1 (en) | Data processing method compatible with an object modeling formalism | |
CN111813381A (zh) | 跨平台生成可运行程序的方法、装置、介质和电子设备 | |
CN111324833A (zh) | 页面展示方法、装置、电子设计及计算机可读介质 | |
Akehurst | Model Translation: A UML-based specification technique and active implementation approach | |
CN117008918A (zh) | 领域特定语言的处理方法、装置、介质及电子设备 | |
Zhao et al. | Pattern-based design evolution using graph transformation | |
Monteiro et al. | Combining natural language processing and blockchain for smart contract generation in the accounting and legal field | |
Miravet et al. | Framework for the declarative implementation of native mobile applications | |
Hupel et al. | Translating Scala Programs to Isabelle/HOL: System Description | |
CN110362317B (zh) | 一种代码转换方法、装置和存储介质 | |
Hearnden et al. | Anti-Yacc: MOF-to-text | |
Lubell | Using DITA to create security configuration checklists | |
Dimanidis et al. | A natural language driven approach for automated web api development: Gherkin2oas | |
Sabraoui et al. | Metamodel extension approach applied to the model-driven development of mobile applications | |
van Staden et al. | Parsing Semi-structured Languages: A Crochet Pattern to Diagram Translation |
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 |