版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yangguosb/article/details/85332340
Antlr4是什么?
Antlr4是一款开源的语法分析器生成工具,能够根据语法规则文件生成对应的语法分析器。现在很多流行的应用和开源项目里都有使用,比如Hadoop、Hive以及Pig等都在使用ANTLR来做语法分析。
使用步骤
Step1:编写语法规则文件
按照Antlr4规范编写特定语言的语法规则文件(绝大部分语言的都已提供,详见语法库);
Step2:生成解析器
运行ANTLR工具,生成指定目标语言的解析器源码(包括词法分析器和语法分析器),如下图所示;
- <Grammar>Lexer.java: 词法分析器源码;
- <Grammar>Parser.java: 语法分析器源码;
- <Grammar>Listener.java: Listener 接口;
- <Grammar>BaseListener.java: Listener 默认实现;
- <Grammar>Visitor.java: Visitor 接口;
- <Grammar>BaseVisitor.java: Visitor 默认实现;
Step3:解析代码
使用解析器对目标代码进行解析,示例如下:
public static void main(String[] args) throws Exception {
//代码流
ANTLRInputStream input = new ANTLRInputStream("int a = 12; ");
//使用词法分析器生成Token序列
Java8Lexer lexer = new Java8Lexer(input);
CommonTokenStream tokens = new CommonTokenStream(lexer);
//使用语法分析器将Token序列串联成AST
Java8Parser parser = new Java8Parser(tokens);
ParseTree tree = parser.expressionName();
//Visito模式或者Listener模式遍历AST
System.out.println("Visitor:");
Java8Visitor evalByVisitor = new Java8BaseVisitor();
evalByVisitor.visit(tree);
//Listener模式遍历AST
System.out.println("Listener:");
ParseTreeWalker walker = new ParseTreeWalker();
Java8Listener evalByListener = new Java8BaseListener();
walker.walk(evalByListener, tree);
}
参考: