antlr4环境配置及入门 - datakv/wiki_language GitHub Wiki
antlr4环境配置及入门
2020-6-21 10:28:42
https://www.antlr.org/
官网选择一个工作目录, 以下所有操作都是基于此目录,比如
C:\wpc\OneDrive - Microsoft\LightAntlr
从官网下载
https://www.antlr.org/download/antlr-4.8-complete.jar
创建文件
- start.bat:
echo (%~dp0)
SET CLASSPATH=;%~dp0\antlr-4.8-complete.jar;
SET PATH=;%~dp0;%PATH%
cmd
- antlr4.bat:
java org.antlr.v4.Tool -visitor %*
- grun.bat:
java org.antlr.v4.gui.TestRig %*
Calc
, 并且在此目录下创建以下文件:
创建目录 - BasicTypes.g4:
lexer grammar BasicTypes;
fragment DIGIT: [0-9];
//Fragment修饰的方法,到时候在程序里不会生成 DIGIT()。
//而下面的NUMBER没有fragment, 则可以通过 NUMBER() 来访问。
fragment S_QUOTE: '\'';
fragment QUOTE: '"';
fragment ALPHABET: [A-Za-z_];
NUMBER: DIGIT+('.'DIGIT+)? ; //数字类型,包括浮点和整型
// 两种模式,一种是单引号,一种是双引号
STRING: S_QUOTE (~'\'')* S_QUOTE //单引号字符串
| QUOTE ('\\"'|~'"')* QUOTE //双引号字符串
;
ID: ALPHABET+(DIGIT(ALPHABET)*)*;
WS: [ \r\t\n]+ -> skip; // Skip all the white spaces.
- Operators.g4:
lexer grammar Operators;
MUL: '*';
DIV: '/';
ADD: '+';
SUB: '-';
POW: '^';
MOD: '%';
- Expr.g4:
grammar Expr;
import Operators, BasicTypes; //导入之前定义的符号 和 数据类型
// 加入`#`,叫Annotation, 生成的Listener和visitor会有相应的方法来触发这个事件。
// 我认为这个应该叫 触发器注解。
// 注意,这个注解要么一个都不写,要么整条规则每一个模式都要写。
expr: SUB NUMBER #NegativeNumber
| expr POW expr #Pow
| expr (MUL|DIV|MOD) expr #Mul_Div_Mod
| expr (ADD|SUB) expr #Add_Sub
| ID #Identifier
| NUMBER #Number
| '(' expr ')' #Parentheses
;
start.bat
, 执行:
回到工作目录, 双击执行cd Calc
antlr4 Expr.g4
此时生成了
Expr.interp
ExprBaseListener.java
ExprLexer.interp
ExprLexer.tokens
ExprParser.java
Expr.tokens
ExprBaseVisitor.java
ExprLexer.java
ExprListener.java
ExprVisitor.java
紧接着执行 grun Expr expr -gui
, 输入测试数据21 + 12*(9 + 7) / 4 - 6 + 5 ^ 3
;
或者把测试数据21 + 12*(9 + 7) / 4 - 6 + 5 ^ 3
写入abcdef.txt
, 执行grun Expr expr -gui abcdef.txt
, 此时能看到语法树的图.