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
2
3
4
5
6
7
8
// 需要和文件名同名
grammar MyG;

// 如下是规则, 包含 parser rule 和 lexer rule。

rule1 : « stuff » ;
rule2 : « more stuff » ;
...

编写 grammar 的流程如下:

  1. 找到目标语言的文档说明,根据文档开始编写。
  2. 定义入口规则,一般来说在文档中都有。
  3. 由入口规则向下,将整个语言的规则都写入。

四种语言模式的表达简述如下:

  1. 顺序:retr : 'RETR' INT '\n' ;, 即直接使用空格连接多个规则。
  2. 选择: 使用 | 分隔多个子规则
  3. 依赖: 直接在规则中使用其他规则名
  4. 子包含:在自己的规则中使用自己的名字

详细内容可以在书上找到(p67)。

优先级,左递归,关联性

antlr 中在多个规则中选择时,先定义的规则优先级更高。

antlr 暂时还无法处理相互依赖的情况,即 A 规则依赖 B,而 B 规则又依赖 A。


Antlr Grammar 快速参考
https://blog.rayy.top/2020/12/13/2020-12-13-antlr-grammar/
作者
貘鸣
发布于
2020年12月13日
许可协议