使用golang+antlr4构建一个自己的语言解析器(完结篇)

科技资讯 投稿 13100 0 评论

使用golang+antlr4构建一个自己的语言解析器(完结篇)

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支持所有数据做比较运算,那么我直接在

编程笔记 » 使用golang+antlr4构建一个自己的语言解析器(完结篇)

赞同 (66) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽