CN109298857A - Dsl语句模型的建立方法、介质、装置和计算设备 - Google Patents

Dsl语句模型的建立方法、介质、装置和计算设备 Download PDF

Info

Publication number
CN109298857A
CN109298857A CN201811174090.0A CN201811174090A CN109298857A CN 109298857 A CN109298857 A CN 109298857A CN 201811174090 A CN201811174090 A CN 201811174090A CN 109298857 A CN109298857 A CN 109298857A
Authority
CN
China
Prior art keywords
dsl
model
key element
clause
type
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
Application number
CN201811174090.0A
Other languages
English (en)
Inventor
蒋文康
焦智慧
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hangzhou Langhe Technology Co Ltd
Original Assignee
Hangzhou Langhe Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Hangzhou Langhe Technology Co Ltd filed Critical Hangzhou Langhe Technology Co Ltd
Priority to CN201811174090.0A priority Critical patent/CN109298857A/zh
Publication of CN109298857A publication Critical patent/CN109298857A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/35Creation or generation of source code model driven
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Machine Translation (AREA)

Abstract

本发明的实施方式提供了一种DSL语句模型的建立方法、介质、装置和计算设备。该方法包括:获取待建模的DSL语句,将该DSL语句分层以便得到多个DSL子句,逐一分析DSL子句得到每一DSL子句的属性信息,根据每一DSL子句的属性信息为每一所述DSL子句建立相应的单元模型,整合所有单元模型从而构建出完整的所述DSL语句模型。该方法实现了对完整的所述DSL语句模型的构建,有助于降低对DSL语法的建模难度,提升模型整体的可复用性,更有利于针对DSL语法元素进行细粒度的校验与控制。

Description

DSL语句模型的建立方法、介质、装置和计算设备
技术领域
本发明的实施方式涉及计算机科学技术领域,更具体地,本发明的实施方式涉及DSL语句模型的建立方法、介质、装置和计算设备。
背景技术
本部分旨在为权利要求书中陈述的本发明的实施方式提供背景或上下文。此处的描述不因为包括在本部分中就承认是现有技术。
DSL:领域专用语言(Domain Specific Language),是为了解决莫一类任务而专门设计的计算机语言。
DSL的工作过程一般是解析“DSL脚本”获取“语义模型”,再利用“语义模型”生成简单的文本文件,如源代码、数据库脚本等。
其中,如何为DSL语法进行合理的建模,是工作流程中的关键。
目前的建模方式分为两种:行为建模和集中式的建模。
行为建模就是只对DSL语句的功能建立模型,不针对DSL语法的元素进行建模。
这种建模方式的弊端十分明显,一是DSL模型的行为都集中建立到一起,复杂度太高;二是行为建模不够具体,无法做到细粒度的控制。
集中式建模针对整个DSL只对最外层语句建立一个模型,这种集中式的建模方式在吸收行为建模的优势的基础上,对DSL最外层语句进行了简单的建模,可以对最外层语法进行简单的校验。同时,这个DSL模型可以以对象的形式为使用者提供服务,降低了使用成本。
但是这种建模方式缺点依然很多。其中一个最为明显的缺点就是在 DSL语句的逻辑关系较为复杂时(如有多层嵌套的情况),很难处理内部复杂的逻辑关系。另外一个问题就是在复杂的使用环境下,无法考虑到语句的内层情况,导致所有的逻辑只能在最外层实现。因此,这种建模方式只适合简单的DSL语法。
发明内容
目前,现有的对DSL语法的建模方式不适用于复杂的语法环境,无法针对DSL语法元素进行细粒度的校验与控制。而且因为现有的建模方式无法将语法逻辑分层,导致其建模难度很大,模型整体的可复用性很低。
为此,非常需要一种改进的对DSL语句的建模方式,以解决现有的建模方式存在的上述技术问题。
在本上下文中,本发明的实施方式期望提供一种DSL语句模型的建立方法、介质、装置和计算设备。
在本发明实施方式的第一方面中,提供了一种DSL语句模型的建立方法,包括:获取待建模的DSL语句;将所述DSL语句分层以获取多个 DSL子句;逐一分析所述DSL子句得到每一所述DSL子句的属性信息;根据每一所述DSL子句的属性信息为每一所述DSL子句建立相应的单元模型;整合所有单元模型以构建完整的所述DSL语句模型。
在本发明的一个实施例中,将所述DSL语句分层,包括:获取所述DSL 语句的语法树;根据所述语法树的层次结构将所述DSL语句分层。
在本发明的一个实施例中,根据所述语法树的层次结构将所述DSL语句分层,包括:逐一获取所述语法树的层次结构中每一节点的层次信息;根据所述节点的层次信息得到所述多个DSL子句。
在本发明的一个实施例中,在所述DSL语句的语法树中,每一DSL子句对应一个节点。
在本发明的一个实施例中,为所述语法树中层次相同的各个节点所对应的DSL子句独立建立相应的单元模型。
在本发明的一个实施例中,逐一分析所述DSL子句得到每一所述DSL 子句的属性信息,包括:逐层获取所述DSL子句的关键元素;根据每一所述DSL子句的属性信息为每一所述DSL子句建立相应的单元模型,包括:基于所述关键元素为所述关键元素所在层建立单元模型。
在本发明的一个实施例中,基于所述关键元素为所述关键元素所在层建立单元模型,包括:获取所述关键元素的类型;根据所述关键元素的类型确定所述关键元素对应的单元模型类型。
在本发明的一个实施例中,根据所述关键元素的类型确定所述关键元素对应的单元模型类型,包括:若所述关键元素的类型为基本类型,则确定所述关键元素对应的单元模型类型为所述关键元素的类型;若所述关键元素包含有限值,则确定所述关键元素对应的单元模型类型为枚举类型;若所述关键元素的类型为组合类型,则确定所述关键元素对应的单元模型类型为对象模型。
在本发明的一个实施例中,所述基本类型为原始类型中的一个。
在本发明的一个实施例中,基于所述关键元素为所述关键元素所在层建立单元模型,还包括:基于所述关键元素从与所述DSL语句关联的规则中查找相应的行为;基于所述行为为所述关键元素所在层建立单元模型。
在本发明的一个实施例中,基于所述行为为所述关键元素所在层建立单元模型,包括:判断所述行为是否适用于所有关键元素;若是,将所述行为抽象为接口,并且为每一所述关键元素所在层建立实现所述接口的单元模型。
在本发明的一个实施例中,基于所述行为为所述关键元素所在层建立单元模型,包括:判断所述行为是否适用于多个关键元素;若是,为所述多个关键元素中每一关键元素所在层建立包括实现所述行为的方法的单元模型,并且将所述多个关键元素中每一处于上层的关键元素的单元模型中的所述方法组合所述多个关键元素中处于下层的关键元素的单元模型中的所述方法。
在本发明实施方式的第二方面中,提供了一种DSL语句建模装置,包括:
DSL语句获取模块,被配置为获取待建模的DSL语句;
DSL语句分层模块,被配置为将所述DSL语句分层以获取多个DSL 子句;
分析模块,被配置为逐一分析所述DSL子句得到每一所述DSL子句的属性信息;
单元模型建立模块,被配置为根据每一所述DSL子句的属性信息为每一DSL子句建立相应的单元模型;
单元模型整合模块,被配置为整合所有单元模型以构建完整的所述 DSL语句模型。
在本发明的一个实施例中,所述DSL语句分层模块具体用于:
获取所述DSL语句的语法树;
根据所述语法树的层次结构将所述DSL语句分层。
在本发明的一个实施例中,所述DSL语句分层模块在根据所述语法树的层次结构将所述DSL语句分层时,具体用于:
逐一获取所述语法树的层次结构中每一节点的层次信息;
根据所述节点的层次信息得到所述多个DSL子句。
在本发明的一个实施例中,在所述DSL语句的语法树中,每一DSL子句对应一个节点。
在本发明的一个实施例中,为所述语法树中层次相同的各个节点所对应的DSL子句独立建立相应的单元模型。
在本发明的一个实施例中,所述分析模块具体用于:
逐层获取所述DSL子句的关键元素;
所述单元模型建立模块具体用于:
基于所述关键元素为所述关键元素所在层建立单元模型。
在本发明的一个实施例中,所述单元模型建立模块在基于所述关键元素为所述关键元素所在层建立单元模型时,具体用于:
获取所述关键元素的类型;
根据所述关键元素的类型确定所述关键元素对应的单元模型类型。
在本发明的一个实施例中,所述单元模型建立模块在根据所述关键元素的类型确定所述关键元素对应的单元模型类型时,具体用于:
若所述关键元素的类型为基本类型,则确定所述关键元素对应的单元模型类型为所述关键元素的类型;
若所述关键元素包含有限值,则确定所述关键元素对应的单元模型类型为枚举类型;
若所述关键元素的类型为组合类型,则确定所述关键元素对应的单元模型类型为对象模型。
在本发明的一个实施例中,所述基本类型为原始类型中的一个。
在本发明的一个实施例中,所述单元模型建立模块在基于所述关键元素为所述关键元素所在层建立单元模型时,还用于:
基于所述关键元素从与所述DSL语句关联的规则中查找相应的行为;
基于所述行为为所述关键元素所在层建立单元模型。
在本发明的一个实施例中,所述单元模型建立模块在基于所述行为为所述关键元素所在层建立单元模型时,具体用于:
判断所述行为是否适用于所有关键元素;
若是,将所述行为抽象为接口,并且为每一所述关键元素所在层建立实现所述接口的单元模型。
在本发明的一个实施例中,所述单元模型建立模块在基于所述行为为所述关键元素所在层建立单元模型时,具体用于:
判断所述行为是否适用于多个关键元素;
若是,为所述多个关键元素中每一关键元素所在层建立包括实现所述行为的方法的单元模型,并且将所述多个关键元素中每一处于上层的关键元素的单元模型中的所述方法组合所述多个关键元素中处于下层的关键元素的单元模型中的所述方法。
在本发明实施方式的第三方面中,提供了一种介质,该介质存储有计算机可执行指令,计算机可执行指令用于使计算机执行第一方面中任一实施例的方法。
在本发明实施方式的第四方面中,提供了一种计算设备,包括处理单元、存储器以及输入/输出(In/Out,I/O)接口;存储器,用于存储处理单元执行的程序或指令;处理单元,用于根据存储器存储的程序或指令,执行第一方面中任一实施例的方法;I/O接口,用于在处理单元的控制下接收或发送数据。
本发明实施方式提供的建立DSL语句模型的技术方案中,获取待建模的DSL语句,将该DSL语句分层以便得到多个DSL子句,逐一分析DSL子句得到每一DSL子句的属性信息,根据每一DSL子句的属性信息为每一所述DSL子句建立相应的单元模型,整合所有单元模型从而构建出完整的所述DSL语句模型。根据本发明实施方式提供的建立DSL语句模型的技术方案,可以逐一分析对待建模的DSL语句分层得到的DSL子句的属性信息来建立相应的单元模型,从而通过整合所有DSL子句相应的单元模型实现了对完整的所述DSL语句模型的构建,有助于降低对DSL 语法的建模难度,提升模型整体的可复用性。尤其是,本发明实施方式提供的建立DSL语句模型的技术方案可以实现在复杂的语法环境下对DSL 语法的建模,这样更有利于针对DSL语法元素进行细粒度的校验与控制。
附图说明
通过参考附图阅读下文的详细描述,本发明示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本发明的若干实施方式,其中:
图1示意性地示出本发明实施例涉及的一种DSL语句模型的建立方法的流程示意图;
图2示意性地示出了本发明实施例涉及的一种DSL语句的语法树的示意图;
图3示意性地示出本发明实施例涉及的一种DSL语句模型建立装置的结构示意图;
图4示意性地示出本发明实施例涉及的一种介质的结构示意图;
图5示意性地示出本发明实施例涉及的一种计算设备的结构示意图。
在附图中,相同或对应的标号表示相同或对应的部分。
具体实施方式
下面将参考若干示例性实施方式来描述本发明的原理和精神。应当理解,给出这些实施方式仅仅是为了使本领域技术人员能够更好地理解进而实现本发明,而并非以任何方式限制本发明的范围。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
本领域技术人员知道,本发明的实施方式可以实现为一种系统、装置、设备、方法或计算机程序产品。因此,本公开可以具体实现为以下形式,即:完全的硬件、完全的软件(包括固件、驻留软件、微代码等),或者硬件和软件结合的形式。
根据本发明的实施方式,提出了一种DSL语句模型的建立方法、介质、装置和计算设备。
在本文中,需要理解的是,所涉及的几个概念的含义如下:
JSON:对象表示法(JavaScript Object Notation),是一种轻量级的数据交换格式。JSON以易于让人阅读的文字为基础,用来传输由属性值或者序列性的值组成的数据对象。尽管JSON是JavaScript的一个子集,但 JSON是独立于语言的文本格式。
XML:可扩展标记语言(Extensible Markup Language),标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。本发明实施例中用来存储一个单元测试代码。
OOP:面向对象程序设计(Object Oriented Programming),是一种具有对象概念的程序编程典范,同时也是一种程序开发的抽象方针。它可能包含数据、属性、代码与方法。对象则指的是类的实例。OOP将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性,对象里的程序可以访问及经常修改对象相关连的数据。在面向对象程序编程里,计算机程序会被设计成彼此相关的对象。
DDD:领域驱动设计(Domain-Driven Design),是一种通过引入领域模型来满足复杂的业务场景的软件开发方法。DDD强调关注核心领域和领域逻辑,通过领域模型的演化来适应复杂的业务需求。
以上概念均用于示例而非限制,以及任何命名都仅用于区分,而不具有任何限制含义。
下面参考本发明的若干代表性实施方式,详细阐释本发明的原理和精神。
发明概述
本发明人发现,现有的对DSL语法的建模方式不适用于复杂的语法环境,无法针对DSL语法元素进行细粒度的校验与控制。而且现有的建模方式无法将语法逻辑分层,导致其建模难度很大,模型整体的可复用性很低。
为了克服技术存在的问题,本发明中提出了一种DSL语句模型的建立方法、介质、装置和计算设备。该方法包括:获取待建模的DSL语句,将该DSL语句分层以便得到多个DSL子句,逐一分析DSL子句得到每一 DSL子句的属性信息,根据每一DSL子句的属性信息为每一所述DSL子句建立相应的单元模型,整合所有单元模型从而构建出完整的所述DSL 语句模型。该方法可以逐一分析对待建模的DSL语句分层得到的DSL子句的属性信息来建立相应的单元模型,从而通过整合所有DSL子句相应的单元模型实现了对完整的DSL语句模型的构建,有助于降低对DSL语法的建模难度,提升模型整体的可复用性。尤其是,该方法可以实现在复杂的语法环境下对DSL语法的建模,这样更有利于针对DSL语法元素进行细粒度的校验与控制。
在介绍了本发明的基本原理之后,下面具体介绍本发明的各种非限制性实施方式。
应用场景总览
本发明实施例可以应用于DSL语句模型建立场景,尤其是针对复杂语法环境下的DSL语句模型建立场景。同时,本发明实施例还可以应用于多种涉及DSL语法的系统,例如基于DSL语言的权限控制系统。
示例性方法
下面上文所述的应用场景,参考图1来描述根据本发明示例性实施方式的用于DSL语句模型的建立方法。需要注意的是,上述应用场景仅是为了便于理解本发明的精神和原理而示出,本发明的实施方式在此方面不受任何限制。相反,本发明的实施方式可以应用于适用的任何场景。
本发明实施例提供了一种DSL语句模型的建立方法,如图1所示,该方法包括:
S101、获取待建模的DSL语句;
S102、将DSL语句分层以获取多个DSL子句;
S103、逐一分析DSL子句得到每一DSL子句的属性信息;
S104、根据每一DSL子句的属性信息为每一DSL子句建立相应的单元模型;
S105、整合所有单元模型以构建完整的DSL语句模型。
通过图1所示的方法,可以逐一分析对待建模的DSL语句分层得到的DSL子句的属性信息来建立相应的单元模型,从而通过整合所有DSL 子句相应的单元模型实现了对完整的DSL语句模型的构建,有助于降低对DSL语法的建模难度,提升模型整体的可复用性。尤其是,该方法可以实现在复杂的语法环境下对DSL语法的建模,这样更有利于针对DSL 语法元素进行细粒度的校验与控制。
下面分别介绍图1所示方法中的各个步骤。
S101中待建模的DSL语句可以为基于DSL语言的任意语句,本发明实施例中的DSL语句可以包括一个或多个DSL子句,本发明实施例中均不限定。
S102中将DSL语句分层以获取多个DSL子句的实现方式有多种,本发明实施例并不限定。其中一种实现方式为,获取DSL语句的语法树,根据语法树的层次结构将DSL语句分层。
具体实现中,若待建模的DSL语句符合DSL语句的编写规范,则可以根据待建模的DSL语句直接获取该DSL语句的语法树。若待建模的DSL 语句不符合DSL语句的编写规范,则可以对待建模的DSL语句进行纠正,根据纠正后的DSL语句获取该DSL语句的语法树。其中,待建模的DSL 语句的格式的纠正方式包括但不限于缩进、删除、换行。需要说明的是,本发明实施例中并不限定生成DSL语句的语法树的方法,例如DSL语句的语法树可以是通过语法解析器(parser)。
具体实现中,根据语法树的层次结构将DSL语句分层的方式具体为:逐一获取语法树的层次结构中每一节点的层次信息,根据节点的层次信息得到多个DSL子句。较佳的,在DSL语句的语法树中,每一DSL子句对应一个节点。进一步的,为语法树中层次相同的各个节点所对应的DSL 子句独立建立相应的单元模型,这样有助于对DSL语法元素进行细粒度的校验。
以图2示出的DSL语句对应的语法树为例,自上而下可以划分为以下几个层次:version和statement对应的层级是第一层,effect、action、 resource以及condition对应的层级是第二层,ip对应的层级是第三层, source为第四层。通过语法树的层次结构将DSL语句分层,这样能够针对每一层的语法分别进行处理,将语法逻辑细化至每一层,从而大大降低了每一层的处理复杂度。
S103和S104的实现方式均有多种,本发明实施例并不限定。其中一种S103的实现方式为,逐层获取DSL子句的关键元素。相应地,S104 中一种实现方式为:基于关键元素为关键元素所在层建立单元模型。具体实现中,基于关键元素为关键元素所在层建立单元模型的一种实现方式为:获取关键元素的类型,根据关键元素的类型确定关键元素对应的单元模型类型。其中,确定关键元素对应的单元模型类型的情况包括以下几种:
情况一:若关键元素的类型为基本类型,则确定关键元素对应的单元模型类型为关键元素的类型。
本发明实施例中,基本类型为原始类型中的一个。原始类型包括但不限于字符(例如Character、Char)、整数(例如Integer、Int、Short、Long、 Byte)、浮点数、定点数、布尔类型以及引用。其中,字符的类型例如可以为character、char等,按照字符集划分例如又可以为SBCS、DBCS、MBCS 等;整数的类型例如可以为integer、int、short、long、byte等,这些类型的整数对应各种不同的精度,按照是否可表示负数的数值可以进一步划分为有号数与无号数;浮点数的类型例如可以为float、double、real、double precision等;定点数的类型例如可以为fixed等,不同类型的定点数对应各种不同的精度以及数量级;布尔类型包括真值和假值;引用即指针,引用例如可以是一个指向对象所在的存储器地址的数值或字符串。
以图2示出的DSL语句对应的语法树为例,version的类型为整数,则version对应的单元模型类型可以直接建立为int类型或者integer类型。
情况二:若关键元素包含有限值(VALUE),则确定关键元素对应的单元模型类型为枚举类型(Enum)。
以图2示出的DSL语句对应的语法树为例,由于effect仅包含allow 和deny两个值,则effect对应的单元模型类型为Enum类型。
情况三:若关键元素的类型为组合类型,则确定关键元素对应的单元模型类型为对象模型。
本发明实施例中,组合类型的关键元素实质上既包含有限值,又包含有属于上述几个原始类型之一的关键元素。以图2示出的DSL语句对应的语法树为例,若statement的类型为组合类型,则statement对应的单元模型类型为独立的对象类型。
S104中,基于关键元素为关键元素所在层建立单元模型的另一种实现方式为:基于关键元素从与DSL语句关联的规则中查找相应的行为,从而基于该行为为关键元素所在层建立单元模型。其中,DSL语句关联的规则包括但不限于技术设计要求、外部技术指标。
具体实现中,基于行为为关键元素所在层建立单元模型包括但不限于以下几种情况:
情况一:判断行为是否适用于所有关键元素;若是,将行为抽象为接口,并且为每一关键元素所在层建立实现接口的单元模型。
本发明实施例涉及的接口可以理解为所有单元模型共有的行为,实际上在所有单元模型建立后所有单元模型均需要实现接口,即在所有单元模型建立后所有模型均需要对接口进行重写。例如,判断行为是否适用于所有关键元素;若判定该行为适用于所有关键元素,将该行为抽象为一个接口,每一单元模型都需要实现该接口。该接口如下:
interface DomainLanguage{
boolean isValid();
}
进一步的,外层单元模型可以与其对应的内部单元模型的行为进行组合,外层单元模型与其对应的内部单元模型存在依赖关系。例如,Statement 的单元模型的有效性就依赖于effect、action、resource以及condition四个单元模型的有效性,即Statement的单元模型的实现需要建立在这四个单元模型实现的基础上。
情况二:判断行为是否适用于多个关键元素;若是,为多个关键元素中每一关键元素所在层建立包括实现行为的方法的单元模型,并且将多个关键元素中每一处于上层的关键元素的单元模型中的方法组合多个关键元素中处于下层的关键元素的单元模型中的方法。
本发明实施例涉及的方法可以理解为部分单元模型共有的行为,方法可以包含于这部分单元模型中。需要说明的是,这多个关键元素可以是所有关键元素中的一部分。
假设Statement的单元模型中提供一个用户可访问模块的逻辑,而这个逻辑主要取决于action的单元模型中的第二个字段,例如nws、nos。 Statement的单元模型和action的单元模型都提供有canAccessBiz逻辑,而Statement的单元模型提供的canAccessBiz逻辑可以组合为Action的单元模型提供的canAccessBiz逻辑。一个可能的实现方式如下:
Set<String>getAllowAccessBizs(){
Set<String>allowAccessBizSet=Sets.newHashSet();
actions.forEach(it->allowAccessBizSet.add(it.getBizCode()));
return allowAccessBizSet;}
S105中将所有单元模型组合为完整的DSL语句模型,从而实现了对完整的DSL语句模型的构建,有助于降低对DSL语法的建模难度,提升模型整体的可复用性。
本发明实施方式提供的一种DSL语句模型的建立方法中,获取待建模的DSL语句,将该DSL语句分层以便得到多个DSL子句,逐一分析 DSL子句得到每一DSL子句的属性信息,根据每一DSL子句的属性信息为每一DSL子句建立相应的单元模型,整合所有单元模型从而构建出完整的DSL语句模型。根据本发明实施方式提供的一种DSL语句模型的建立方法中,可以逐一分析对待建模的DSL语句分层得到的DSL子句的属性信息来建立相应的单元模型,从而通过整合所有DSL子句相应的单元模型实现了对完整的DSL语句模型的构建,有助于降低对DSL语法的建模难度,提升模型整体的可复用性,更有利于针对DSL语法元素进行细粒度的校验与控制。
示例性装置
在介绍了本发明示例性实施方式的方法之后,接下来,介绍本发明提供了示例性实施的装置。本发明提供的DSL语句建模装置可以实现图1 对应的实施例中DSL语句模型的建立方法。参见图3,DSL语句建模装置 300至少包括:
DSL语句获取模块301,被配置为获取待建模的DSL语句;
DSL语句分层模块302,被配置为将DSL语句分层以获取多个DSL 子句;
分析模块303,被配置为逐一分析DSL子句得到每一DSL子句的属性信息;
单元模型建立模块304,被配置为根据每一DSL子句的属性信息为每一DSL子句建立相应的单元模型;
单元模型整合模块305,被配置为整合所有单元模型以构建完整的 DSL语句模型。
可选的,DSL语句分层模块302具体用于:获取DSL语句的语法树;根据语法树的层次结构将DSL语句分层。
可选的,DSL语句分层模块302在根据语法树的层次结构将DSL语句分层时,具体用于:逐一获取语法树的层次结构中每一节点的层次信息;根据节点的层次信息得到多个DSL子句。
可选的,在DSL语句的语法树中,每一DSL子句对应一个节点。
可选的,为语法树中层次相同的各个节点所对应的DSL子句独立建立相应的单元模型。
可选的,分析模块303具体用于:逐层获取DSL子句的关键元素;单元模型建立模块304具体用于:基于关键元素为关键元素所在层建立单元模型。
可选的,单元模型建立模块304在基于关键元素为关键元素所在层建立单元模型时,具体用于:获取关键元素的类型;根据关键元素的类型确定关键元素对应的单元模型类型。
可选的,单元模型建立模块304在根据关键元素的类型确定关键元素对应的单元模型类型时,具体用于:若关键元素的类型为基本类型,则确定关键元素对应的单元模型类型为关键元素的类型;若关键元素包含有限值,则确定关键元素对应的单元模型类型为枚举类型;若关键元素的类型为组合类型,则确定关键元素对应的单元模型类型为对象模型。
可选的,基本类型为原始类型中的一个。
可选的,单元模型建立模块304在基于关键元素为关键元素所在层建立单元模型时,还用于:基于关键元素从与DSL语句关联的规则中查找相应的行为;基于行为为关键元素所在层建立单元模型。
可选的,单元模型建立模块304在基于行为为关键元素所在层建立单元模型时,具体用于:判断行为是否适用于所有关键元素;若是,将行为抽象为接口,并且为每一关键元素所在层建立实现接口的单元模型。
可选的,单元模型建立模块304在基于行为为关键元素所在层建立单元模型时,具体用于:判断行为是否适用于多个关键元素;若是,为多个关键元素中每一关键元素所在层建立包括实现行为的方法的单元模型,并且将多个关键元素中每一处于上层的关键元素的单元模型中的方法组合多个关键元素中处于下层的关键元素的单元模型中的方法。
示例性介质
在介绍了本发明示例性实施方式的方法和装置之后,接下来,参考图 4,本发明提供了一种示例性介质,该介质存储有计算机可执行指令,该计算机可执行指令可用于使所述计算机执行图1对应的本发明示例性实施方式中任一项所述的方法。
示例性计算设备
在介绍了本发明示例性实施方式的方法、介质和装置之后,接下来,参考图5,介绍本发明提供的一种示例性计算设备10,该计算设备10包括处理单元501、存储器502、总线503、外部设备504、I/O接口505以及网络适配器506,该存储器502包括随机存取存储器(random access memory,RAM)5021、高速缓存存储器5022、只读存储器(Read-OnlyMemory,ROM)5023以及至少一片存储单元5024构成的存储单元阵列 5025。其中该存储器502,用于存储处理单元501执行的程序或指令;该处理单元501,用于根据该存储器502存储的程序或指令,执行图1对应的本发明示例性实施方式中任一项所述的方法;该I/O接口505,用于在该处理单元501的控制下接收或发送数据。
应当注意,尽管在上文详细描述中提及了装置的若干单元/模块或子单元/模块,但是这种划分仅仅是示例性的并非强制性的。实际上,根据本发明的实施方式,上文描述的两个或更多单元/模块的特征和功能可以在一个单元/模块中具体化。反之,上文描述的一个单元/模块的特征和功能可以进一步划分为由多个单元/模块来具体化。
此外,尽管在附图中以特定顺序描述了本发明方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。
虽然已经参考若干具体实施方式描述了本发明的精神和原理,但是应该理解,本发明并不限于所公开的具体实施方式,对各方面的划分也不意味着这些方面中的特征不能组合以进行受益,这种划分仅是为了表述的方便。本发明旨在涵盖所附权利要求的精神和范围内所包括的各种修改和等同布置。

Claims (10)

1.一种DSL语句模型的建立方法,包括:
获取待建模的DSL语句;
将所述DSL语句分层以获取多个DSL子句;
逐一分析所述DSL子句得到每一所述DSL子句的属性信息;
根据每一所述DSL子句的属性信息为每一所述DSL子句建立相应的单元模型;
整合所有所述单元模型以构建完整的所述DSL语句模型。
2.如权利要求1所述的方法,其中,将所述DSL语句分层,包括:
获取所述DSL语句的语法树;
根据所述语法树的层次结构将所述DSL语句分层。
3.如权利要求2所述的方法,其中,根据所述语法树的层次结构将所述DSL语句分层,包括:
逐一获取所述语法树的层次结构中每一节点的层次信息;
根据所述节点的层次信息得到所述多个DSL子句。
4.如权利要求1所述的方法,其中,逐一分析所述DSL子句得到每一所述DSL子句的属性信息,包括:
逐层获取所述DSL子句的关键元素;
根据每一所述DSL子句的属性信息为每一所述DSL子句建立相应的单元模型,包括:
基于所述关键元素为所述关键元素所在层建立单元模型。
5.如权利要求4所述的方法,其中,基于所述关键元素为所述关键元素所在层建立单元模型,包括:
获取所述关键元素的类型;
根据所述关键元素的类型确定所述关键元素对应的单元模型类型。
6.如权利要求5所述的方法,其中,根据所述关键元素的类型确定所述关键元素对应的单元模型类型,包括:
若所述关键元素的类型为基本类型,则确定所述关键元素对应的单元模型类型为所述关键元素的类型;
若所述关键元素包含有限值,则确定所述关键元素对应的单元模型类型为枚举类型;
若所述关键元素的类型为组合类型,则确定所述关键元素对应的单元模型类型为对象模型。
7.如权利要求4所述的方法,其中,基于所述关键元素为所述关键元素所在层建立单元模型,还包括:
基于所述关键元素从与所述DSL语句关联的规则中查找相应的行为;
基于所述行为为所述关键元素所在层建立单元模型。
8.一种DSL语句建模装置,其中,包括:
DSL语句获取模块,被配置为获取待建模的DSL语句;
DSL语句分层模块,被配置为将所述DSL语句分层以获取多个DSL子句;
分析模块,被配置为逐一分析所述DSL子句得到每一所述DSL子句的属性信息;
单元模型建立模块,被配置为根据每一所述DSL子句的属性信息为每一DSL子句建立相应的单元模型;
单元模型整合模块,被配置为整合所有所述单元模型以构建完整的所述DSL语句模型。
9.一种计算机可读存储介质,存储有程序代码,所述程序代码当被处理器执行时,实现如权利要求1-7之一所述的方法。
10.一种计算设备,包括处理器和存储有程序代码的存储介质,所述程序代码当被处理器执行时,实现如权利要求1-7之一所述的方法。
CN201811174090.0A 2018-10-09 2018-10-09 Dsl语句模型的建立方法、介质、装置和计算设备 Pending CN109298857A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201811174090.0A CN109298857A (zh) 2018-10-09 2018-10-09 Dsl语句模型的建立方法、介质、装置和计算设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201811174090.0A CN109298857A (zh) 2018-10-09 2018-10-09 Dsl语句模型的建立方法、介质、装置和计算设备

Publications (1)

Publication Number Publication Date
CN109298857A true CN109298857A (zh) 2019-02-01

Family

ID=65162006

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811174090.0A Pending CN109298857A (zh) 2018-10-09 2018-10-09 Dsl语句模型的建立方法、介质、装置和计算设备

Country Status (1)

Country Link
CN (1) CN109298857A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116090183A (zh) * 2022-12-12 2023-05-09 南京航空航天大学 一种面向scr需求模型的数字化模拟方法和系统
CN116185495A (zh) * 2022-12-13 2023-05-30 易保网络技术(上海)有限公司 计算函数构建方法、计算引擎、电子设备及可读存储介质

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101382957A (zh) * 2008-10-24 2009-03-11 用友软件股份有限公司 建立查询模型的系统及建立方法
CN101561817A (zh) * 2009-06-02 2009-10-21 天津大学 一种XQuery到SQL查询语言的转换算法及关系数据的查询方法
US9135296B2 (en) * 2012-05-15 2015-09-15 Sas Institute Inc. System, method, and data structure for automatically generating database queries which are data model independent and cardinality independent
CN106056427A (zh) * 2016-05-25 2016-10-26 中南大学 一种基于Spark的大数据混合模型的移动推荐方法
CN107247613A (zh) * 2017-04-25 2017-10-13 北京航天飞行控制中心 语句解析方法及语句解析装置
CN108256080A (zh) * 2018-01-19 2018-07-06 深圳市富途网络科技有限公司 一种利用python语法语义构建复杂sql语句的方法及系统

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101382957A (zh) * 2008-10-24 2009-03-11 用友软件股份有限公司 建立查询模型的系统及建立方法
CN101561817A (zh) * 2009-06-02 2009-10-21 天津大学 一种XQuery到SQL查询语言的转换算法及关系数据的查询方法
US9135296B2 (en) * 2012-05-15 2015-09-15 Sas Institute Inc. System, method, and data structure for automatically generating database queries which are data model independent and cardinality independent
CN106056427A (zh) * 2016-05-25 2016-10-26 中南大学 一种基于Spark的大数据混合模型的移动推荐方法
CN107247613A (zh) * 2017-04-25 2017-10-13 北京航天飞行控制中心 语句解析方法及语句解析装置
CN108256080A (zh) * 2018-01-19 2018-07-06 深圳市富途网络科技有限公司 一种利用python语法语义构建复杂sql语句的方法及系统

Non-Patent Citations (5)

* Cited by examiner, † Cited by third party
Title
STANLEY B. LIPPMAN: "《深度探索C++对象模型》", 31 May 2001 *
刘辉: "《软件重构技术研究》", 30 April 2016 *
张传友: "《武器装备联合试验体系构建方法与实践》", 31 May 2017 *
施伯乐等: "《数据库系统教程》", 31 August 2003 *
阿霍(ALFRED,V.A)等: "《编译原理(中文第二版)》", 31 January 2009 *

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116090183A (zh) * 2022-12-12 2023-05-09 南京航空航天大学 一种面向scr需求模型的数字化模拟方法和系统
CN116090183B (zh) * 2022-12-12 2023-11-17 南京航空航天大学 一种面向scr需求模型的数字化模拟方法和系统
CN116185495A (zh) * 2022-12-13 2023-05-30 易保网络技术(上海)有限公司 计算函数构建方法、计算引擎、电子设备及可读存储介质
CN116185495B (zh) * 2022-12-13 2023-10-13 易保网络技术(上海)有限公司 计算函数构建方法、计算引擎、电子设备及可读存储介质

Similar Documents

Publication Publication Date Title
US8898651B2 (en) Automatic generation of instruction-set documentation
CN106919434A (zh) 一种代码生成方法及装置
Rossini et al. A formalisation of deep metamodelling
CN103593335A (zh) 基于本体一致性验证推理的中文语义校对方法
CN106951305A (zh) 一种基于模型转换由QVT‑R语言生成midCore脚本的方法
Badouel et al. Active workspaces: distributed collaborative systems based on guarded attribute grammars
CN109298857A (zh) Dsl语句模型的建立方法、介质、装置和计算设备
Sanchez et al. Bigraphical modelling of architectural patterns
CN114528846A (zh) 一种用于人工智能的概念网络及其生成方法
Zhao et al. Pattern-based design evolution using graph transformation
JP2007535013A (ja) コンピュータプログラムの設計
Miranda et al. Domain‐specific language for automatic generation of UML models
Zhang et al. Distributed system model using SysML and event-B
Perry et al. An extensible code generation framework for heterogeneous architectures based on IP-XACT
Briola et al. Ontologica: Exploiting ontologies and natural language for railway management. Design, implementation and usage examples
Barbosa et al. Checking semantics equivalence of mda transformations in concurrent systems.
Jin et al. Method of constructing model transformation rule based on reusable pattern
CN107368302A (zh) 一种基于本体的设计模式识别方法
Cheng et al. A literature overview of knowledge sharing between Petri nets and ontologies
Matsuo et al. Automatic transformation of organization of software requirements specifications
Ivkovic et al. Using formal concept analysis to establish model dependencies
Cardei et al. Framework for requirements-driven system design automation
Jung Generator-composition for aspect-oriented domain-specific languages
Walter Bridging technological spaces: Towards the combination of model-driven engineering and ontology technologies
Aredo Formal Development of Open Distributed Systems: Integration of UML and PVS

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
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20190201

WD01 Invention patent application deemed withdrawn after publication