使用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 @   到三国卖栗子  阅读(662)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示