参考文献:
Antlr4学习1-基本概念和入门示例_antler4-CSDN博客
ANTLR v4 - IntelliJ IDEs Plugin | Marketplace
antlr4/doc/parser-rules.md at master · antlr/antlr4 · GitHub
https://www.pythonf.cn/read/143065
Parser (ANTLR 4 Runtime 4.13.2 API)
ANTLR v4 - IntelliJ IDEs Plugin | Marketplace //插件
Grammars/book-examples at master · remenska/Grammars · GitHub //代码实例
1.1、宏观编译器流程
编译器主要分为前端与后端,前端是负责对程序代码的分析和理解过程,只跟语言的语法有关,与目标机器无关;而后端是负责生成中间代码,然后对代码进行优化,最终生成机器可执行的目标代码,与目标机器密切相关。然而我们本篇笔记要讨论的ANTLR就是编译器前端的一种主流且轻量级的解决方案,它是一款强大的语法分析器生成工具,使得开发者不必精通繁杂的编译理论,集中精力处理真正的业务逻辑。
1.2、ANTLR的开发方式(maven依赖)
ANTLR能够根据用户定义的语法文件自动生成词法分析器、语法分析器,语法分析树遍历器,还能将输入文本转化成一颗语法分析树。其主要存在两种开发方式:
1.命令行工具(网上教程多)
2.idea ANTLR v4插件 (推荐使用)
<dependency>
<groupId>org.antlr</groupId>
<artifactId>antlr4-runtime</artifactId>
<version>4.9</version>
</dependency>
注意事项:依赖的版本取决于你安装的命令行或插件的版本,需要保持一致,不然要报错,当前官网版本是4.9
1.3、Antlr 核心标记
用法 | 描述 |
x | 匹配词法符号、规则引用或者子规则 x |
x y ... z | 匹配一列规则元素 |
(... | ... | ...) | 一个具有多个备选分支的子规则 |
x? | 匹配x或者忽略它 |
x* | 匹配x零次或多次 |
x + | 匹配x 一次或多次 |
r: ...; | 定义规则r |
r: ...| ... | ...; | 定义具有多个备选分支的规则r |
[] | 定义字符集。["] 是具有单个字符 " 的集合,作为一个集合,每个字符都在集合中,因此定义一个字符两次,如[""]没有区别,它与["] 相同 |
~ | 表示否定,~["] 表示 " 之外的任何字符 |