Antlr Grammar 快速参考
本文最后更新于 2021年4月4日 晚上
Antlr 的 Grammar 快速参考,便于日后使用,摘自 “The Definitive ANTLR 4 Reference” 第五章。
概述
要实现 Grammar,针对特定语言来说,都可以首先获取官方的 Language Reference,然后从中抽取出 Grammar,Grammar 的编写和编程类似,只不过 Grammar 是在写规则。
语法有四种模式:
- 顺序
- 选择
- 依赖
- 自嵌套
在 Grammar 中利用 Alternatives, token reference,rule reference 组合起来构成 subrule。写法上 subrule 是在括号中,可以后缀 ?
(可选),*
(0个或多个), +
(一个或多个)。
从特定语言的官方文档获取语法规则
比如 swift 的可以在AboutTheLanguageReference找到。
一个最简单的语法文件如下:
1 |
|
编写 grammar 的流程如下:
- 找到目标语言的文档说明,根据文档开始编写。
- 定义入口规则,一般来说在文档中都有。
- 由入口规则向下,将整个语言的规则都写入。
四种语言模式的表达简述如下:
- 顺序:
retr : 'RETR' INT '\n' ;
, 即直接使用空格连接多个规则。 - 选择: 使用
|
分隔多个子规则 - 依赖: 直接在规则中使用其他规则名
- 子包含:在自己的规则中使用自己的名字
详细内容可以在书上找到(p67)。
优先级,左递归,关联性
antlr 中在多个规则中选择时,先定义的规则优先级更高。
antlr 暂时还无法处理相互依赖的情况,即 A 规则依赖 B,而 B 规则又依赖 A。
Antlr Grammar 快速参考
https://blog.rayy.top/2020/12/13/2020-12-13-antlr-grammar/