学习 ANTLR 4(一):初识 ANTLR 4

ANTLR 4 是什么?

官网:http://www.antlr.org/

ANTLR 是 ANother Tool for Language Recognition 的缩写

ANTLR 4 是一款强大的语法分析器生成工具,可用于读取、处理、执行和翻译结构化的文本或二进制文件

ANTLR 4 的开发流程:

  1. 定义 .g4 语法文件
  2. 使用 ANTLR 4 生成词法分析器(Lexer)和语法分析器(Parser)目标编程语言代码,支持的编程语言:Java、JavaScript、Python、C 和 C++ 等
  3. 遍历 AST(Abstract Syntax Tree 抽象语法树),ANTLR 4 支持两种模式:访问者模式(Visitor)和监听器模式(Listener)

环境搭建

下面以 macOS X 为例,描述 ANTLR 4 环境搭建过程:

ANTRL 4.7.1 工具

cd /usr/local/lib && wget http://www.antlr.org/download/antlr-4.7.1-complete.jar  

编辑 ~/.bash_profile 文件:

export CLASSPATH=".:/usr/local/lib/antlr-4.7.1-complete.jar:$CLASSPATH"  
alias antlr4='java -Xmx500M -cp "/usr/local/Cellar/antlr/4.7.1/antlr-4.7.1-c    omplete.jar:$CLASSPATH" org.antlr.v4.Tool'  
alias grun='java org.antlr.v4.gui.TestRig'  

应用修改:

source ~/.bash_profile  

IntelliJ IDEA 插件

搜索并安装 ANTLR v4 grammar plugin 插件,重启之后,IDE 可以识别 .g4 文件了

地址:https://github.com/antlr/intellij-plugin-v4

该插件除了通常的代码高亮和自动提示之外,还支持实时生成抽象语法树,非常👍

Maven 插件

在工程 src/main 路径下新建目录 antlr4

然后,新建包路径,如包名 com.dyingbleed.antlr.demo.grammar 路径为 src/main/antlr4/com/dyingbleed/antlr/demo/grammar

编辑 pom.xml 文件,添加插件:

<plugin>  
    <groupId>org.antlr</groupId>
    <artifactId>antlr4-maven-plugin</artifactId>
    <version>4.3</version>
    <executions>
        <execution>
            <id>antlr</id>
            <goals>
                <goal>antlr4</goal>
            </goals>
        </execution>
    </executions>
</plugin>  

编译:

mvn clean compile -DskipTests  

插件会为 src/main/antlr4 下的 .g4 文件在 target/generated-sources/antlr4 目录下生成好代码

语法文件

// TODO

词法分析器与语法分析器

词法分析器将输入数据解析为词(Token)

语法解析器将词解析为抽象语法树(AST)

访问者模式和监听器模式

监听器模式类似于 XML 的 SAX 解析

访问者模式类似于 XML 的 DOM 解析