Antlr4 ---入门介绍

版权声明:本文为博主原创文章,未经博主允许不得转载。 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);
    }

在这里插入图片描述

参考:

  1. https://abcdabcd987.com/notes-on-antlr4/
  2. https://juejin.im/post/5a3caaf0f265da4310489081#heading-10

猜你喜欢

转载自blog.csdn.net/yangguosb/article/details/85332340
今日推荐