前面文章我们学习了编译器前端的词法和语法分析工具,本篇我们来看看如何借助 Antlr 工具,快速生成词法和语法分析代码。
一、安装
mac 环境:
1)安装
brew install antlr
2)配置 classpath
(把 Antlr 的 JAR 文件设置到 CLASSPATH 环境变量中,以便顺利编译所生成的 Java 源代码。)
vi ~/.bash_profile
# 替换成你的 antlr jar 路径
CLASSPATH=".:/opt/homebrew/Cellar/antlr/4.13.1/antlr-4.13.1-complete.jar:$CLASSPATH"
source ~/.bash_profile
有了这个玩意,你可以用很简单的方式定义好词法和语法文件,他会自动生成对应的解析文件,给你生成出 AST 来。
你可以从生成的类文件中,看看是如何生成 AST 树的。
对于我们之前遇到的左递归问题,它又是如何解决的,也是用循环代替递归么?
生成 AST 树,算完成了词法分析和语法分析。
根据这棵树做什么,就是语义分析了。
二、开发 Java 项目
1、创建一个 maven 项目
2、pom 中添加 Antlr 库
<dependency>
<groupId>org.antlr</groupId>
<artifactId>antlr4-runtime</artifactId>
<version>4.10</version>
</dependency>
3、编写一个 antlr 文件 Expr.g4。位置随意,可以放到 src 目录
grammar Expr;
expr: expr op=(ADD|SUB) expr # AddSub
| INT # int
;
ADD: '+';
SUB: '-';
INT : [0-9]+ ;
WS : [ \t]+ -> skip;
4、编译项目 (这样可以生成一些antlr的解析器的类代码,方便后面编程)
mvn compile
你应该能在项目根目录看到一个 gen 文件夹,打开后里面是生成的 java 类

把这部分代码放到你的 src 包路径下 src/main/java/com/xxx/my_antlr_demo/antlr4
5、编写调用代码
EvalVisitor.java
import com.shuofxz.my_antlr_demo.antlr4.ExprBaseVisitor;
import com.shuofxz.my_antlr_demo.antlr4.ExprLexer;
import com.shuofxz.my_antlr_demo.antlr4.ExprParser;
public class EvalVisitor</

2105

被折叠的 条评论
为什么被折叠?



