.
├── bin
├── build.sh
├── CMakeLists.txt
├── doc
├── Doxyfile.in
├── Expr.g4
├── grammar
├── inc
├── LICENSE
├── main.cc
├── README.md
├── runtime
├── src
└── tool
- 设置java运行环境
- 下载antlr执行文件
- 设置环境变量
export CLASSPATH=".:${pwd}/bin/antlr-4.13.1-complete.jar:$CLASSPATH"
alias antlr4='java -jar ${pwd}/bin/antlr-4.13.1-complete.jar'
alias grun='java org.antlr.v4.gui.TestRig'
- 测试G4文件
# 编译G4文件
antlr4 Expr.g4
# 编译java
javac *.java
# 运行程序
grun Expr prog -gui
测试语句"1 + ( 2 - 3 ) * 4 / 5"
,按Ctrl+Z
执行
写法相对固定,写成如下的固定即可
// 输入字符串
ANTLRInputStream input(InputString);
// 词法解析
ExprLexer lexer(&input);
// 分割单词
CommonTokenStream tokens(&lexer);
// 解析语法单元
ExprParser parser(&tokens);
// 生成语法分析树
ParseTree *tree = parser.prog();
测试语句
./AntlrExpr "1 + ( 2 - 3 ) * 4 / 5"
为了将遍历树时触发的时间转换为监听器的调用,antlr提供了ParseTree-Walker类,我们可以实现对应处理节点的接口,每条规则都有对应的enter
和exit
规则。
监听器生成抽象语法树并且运算结果