当前位置: 首页 > 工具软件 > Xtext > 使用案例 >

xText入门一

谭梓
2023-12-01

参考:

https://www.eclipse.org/Xtext/documentation/102_domainmodelwalkthrough.html

https://blog.csdn.net/donhao/article/details/7182792

关键步骤:

  • Create A New Xtext Project
  • 在xxx.xtext文件中写语法解析
  • 在xxx.xtext中右键菜单Run As → Generate Xtext Artifacts.
  • 在project节点右键菜单Run As → Eclipse Application, 会启动一个新的Eclipse
  • 在新启动的Eclipse创建一个java的project,并在这个project里追加个*.dmodel文件. 文件内容如下,keyword已经能够识别。
datatype String
 
entity Blog {
    title: String
    many posts: Post
}
 
entity HasAuthor {
    author: String
}
 
entity Post extends HasAuthor {
    title: String
    content: String
    many comments: Comment
}
 
entity Comment extends HasAuthor {
    content: String
}

 

重要语法解释:

Domainmodel :
  elements += Type*
;

入口;

 Donmainmodel包含任意数量(*)的 Type,且该 Type会被加到(+=)一个名为elements的特性中。

 

 

DataType:
  'datatype' name = ID
;
  •  DataType以关键字'datatype '开始,
  • 后边跟着一个标示符(name),该标示符被解析为规则 ID
  • 其中规则 ID的定义在语法超集 org.eclipse.xtext.common.Terminals中,可以通过F3定位到 ID的定义

 

 

Entity :
  'entity' name = ID ('extends' superType = [Entity])? '{'
    features += Feature*
  '}'
;
  • 规则 Entity也是以一个关键字开头,后边跟着一个名称( name)。
  • 然后是一个带有括号和可选项(?)的extends从句。(注意'?'放在()的外边)
  • 名为superType的特性采用交叉引用
  • 大括弧中可以有任意数量的Features

 

Feature:
  (many ?= 'many')? name = ID ':' type = [Type] 
;
  • 关键字many用来对域建模DSL中对一个多值特性进行建模
  • 赋值操作符(?=)表明特性many的类型为boolean
  • 注意这里的many是固定字符串,表示定义的是集合元素。例子是:many posts: Post。 同样:也是' : ',不要理解成或 ' |'

 

赋值有下面几种方式:

  • 简单的等于号(=)进行赋值,
  • 通过加等于(+=)进行多值赋值(至少一次)
  • ?=表示布尔赋值(可选)

 

扩展

添加Package和Import,可将代码分到不同的文件中。 比较好理解。

PackageDeclaration:
  'package' name = QualifiedName '{'
    (elements += AbstractElement)*
  '}'
;

AbstractElement:
  PackageDeclaration | Type | Import
;

QualifiedName:
  ID ('.' ID)*
;

QualifiedName有一点特殊,其不包含任何赋值,因此仅作为数据类型规则,返回一个字符串。因此, Package的特性 name是 String类型。

 

 

 

 

 

 类似资料: