使用Xtext开发DSL

由于工作中使用到了Xtext,所以学习下其使用。

 

本文基于eclipse官网关于Xtext的介绍-15分钟手册,感兴趣的可以直接阅读原文

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

 

那么如何使用Xtext开发呢?

工欲善其事,必先利其器。

如果没下载过eclipse的,可以直接下载带有XText版本的eclipse;已经安装eclipse的,可以使用软件安装的方式。博主使用的第二种直接从网站更新安装对应插件的。

下载地址:https://www.eclipse.org/Xtext/download.html

 

好了,万事俱备,下面就让我们跟着官网的例子,创建一个简单的demo吧

1. 首先创建一个xtext的项目

File-New-Xtext Project,填入需要的信息

 

 

 

 

 

点击finish后,会生成5个工程,其中只要关注com.page.demo.xtext这个工程,其他工程中目录内都是空的

 

2.  修改语法文件MyDsl.xtext

改文件在com.page.demo.xtext工程中

grammar com.page.demo.xtext.MyDsl with org.eclipse.xtext.common.Terminals

generate mydsl "http://www.page.com/demo/xtext/MyDsl"

MyDsl:
    (elements+=Type)*;
 
Type:
    DataType | Entity;
 
DataType:
    'datatype' name=ID;
 
Entity:
    'entity' name=ID ('extends' superType=[Entity])? '{'
        (features+=Feature)*
    '}';
 
Feature:
    (many?='many')? name=ID ':' type=[Type];

 

3. 生成Language Artifacts

在xtext文件中,右键Run As-Generate Xtext Artifacts,这会生成解析器、编辑器等部分的代码

4. 启动新的eclipse实例

在com.page.demo.xtext项目上右键,Run As-Eclipse Application,启动一个新的eclipse实例。在这个实例中创建一个java工程,再在其中新建一个mydsl为后缀的文件。

编写该文件,可以发现其可以高亮显示,及语法校验等

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
}

 

grammar com.page.demo.xtext.MyDsl with org.eclipse.xtext.common.Terminals
generate mydsl "http://www.page.com/demo/xtext/MyDsl"
MyDsl:    (elements+=Type)*; Type:    DataType | Entity; DataType:    'datatype' name=ID; Entity:    'entity' name=ID ('extends' superType=[Entity])? '{'        (features+=Feature)*    '}'; Feature:    (many?='many')? name=ID ':' type=[Type];
posted @ 2022-07-06 15:49  到三国卖栗子  阅读(517)  评论(0编辑  收藏  举报