
Goland 中Antlr4插件
1.点击文件中的设置选项
2.在插件目录下输入Antlr4搜索插件
3.点击安装即可
编写自己的语言语法文件
我定义的DSL中有四则运算,有比较运算,还有逻辑运算,变量可以有数字、字符串、时间格式
关键字
四则运算
| 作用 | 符号 |
|---|---|
| 乘法 | * |
| 除法 | / |
| 加法 | + |
| 减法 | - |
比较运算
| 作用 | 符号 |
|---|---|
| 等于 | = |
| 不等于 | <> |
| 大于 | > |
| 大于等于 | >= |
| 小于 | < |
| 小于等于 | <= |
逻辑运算
| 作用 | 符号 |
|---|---|
| 且 | && |
| 或 | || |
| 如果 | if |
| 否则 | else |
变量
| 作用 | 符号 |
|---|---|
| 数字 | ('0' | [1-9] ('_'? [0-9]* |
| 文本 | [\p{Nd}] |
| 字符串 | LETTER (LETTER |
| 日期 | ([0-9]{4}/[0-1]{0,1}[0-9]/[0-3]{0,1}[0-9] |
常量辅助符号
| 作用 | 符号 |
|---|---|
| 点 | . |
| 逗号 | , |
| 左括号 | ( |
| 右括号 | |
| 分号 | ; |
| 多行注释 | '/*' .*? '*/' |
编写语法
编写语法之前,我们需要构思一下,我们的DSL可以支持那些语法操作,例如四则运算可以支持字符串运算吗?日期支持四则运算吗?我们可以从基础开始编写,例如我们把变量使用算则模式编写成一个语法规则,
simpleStmt:NUMBER|TEXT|STRING|DATE
我的DSL中支持任何数据的四则运算,那么我就可以使用simpleStmt和四则运算符号组成四则运算
expression:
simpleStmt #SimpleExpression
|expression op = (MUL|DIV expression #MulDiv
|expression op = (ADD|SUB expression #AddSub
;
这时候我们就定义了支持四则运算的语法规则,我们来试一下语法定义的对不对。
发现我们输入的加法运算和乘法运算都可以被解析,说明我们的语法定义正确。接下来我们添加比较运算
我定义的DLS支持所有数据做比较运算,那么我直接在