Antlr4
2019-01-16 本文已影响155人
丹之
Antlr可以根据输入自动生成语法树并可视化的显示出来的开源语法分析器。ANTLR—Another Tool for Language Recognition,其前身是PCCTS,它为包括Java,C++,C#在内的语言提供了一个通过语法描述来自动构造自定义语言的识别器(recognizer),编译器(parser)和解释器(translator)的框架。
参考此文:https://www.cnblogs.com/sld666666/p/6145854.html,我们用antlr4来实现一个四则运算器:
grammar Calc;
prog : stat+;
stat : expr # printExpr
| ID '=' expr # assign
| 'print(' ID ')' # print
;
expr : <assoc=right> expr '^' expr # power
| expr op=(MUL|DIV) expr # MulDiv
| expr op=(ADD|SUB) expr # AddSub
| sign=(ADD|SUB)?NUMBER # number
| ID # id
| '(' expr ')' # parens
;
ID : [a-zA-Z]+;
NUMBER : [0-9]+('.'([0-9]+)?)?
| [0-9]+;
COMMENT : '/*' .*? '*/' -> skip;
LINE_COMMENT : '//' .*? '\r'? '\n' -> skip;
WS : [ \t\r\n]+ -> skip;
MUL : '*';
DIV : '/';
ADD : '+';
SUB : '-';
antlr4会生成如下文件:
- ExprParser
- ExprLexer
- ExprBaseVistor
- ExprVisitor
ExprLexer 是词法分析器, ExprParser是语法分析器。 一个语言的解析过程一般过程是 词法分析-->语法分析。这是ANTLR4为我们生成的框架代码, 而我们唯一要做的是自己实现一个Vistor,一般从ExprBaseVistor继承即可。
SqlBaseLexer便是antlr4生成的词法分析器;SparkSqlAstBuilder是继承了SqlBaseBaseVisitor的实现,用于解析逻辑的实现。