-ANTLR 参考手册
献给
项目领导和最高导师
Terence Parr
旧金山大学
支持站点
jGuru.com
Your View of the Java Universe
初期代码获益于
John Lilly, Empathy Software
C++ 代码生成器
Peter Wells 和 Ric Klaren
C# 代码生成
Micheal Jordan, Kunle Odutola 和 Anthony Oguntimehin。
Python's 方面的扩展来自于
Wolfgang Häfelinger and Marq Kole
基础软件支撑来自 Perforce:
世界上最好的源码控制系统之一
感谢以下朋友贡献了他们的聪明才智
Loring Craymer
Monty Zukowski
Jim Coker
Scott Stanchfield
John Mitchell
Chapman Flack (UNICODE, 流部分)
关于 Eclipse 和 NetBeans 方面的源码改进来自于
Marco van Meegen and Brian Smith
ANTLR 2.7.5 版
2004 年 12 月 22 日
目录
前言 ANTLR 是什么 ......................................................................................................................... 5
第 1 章 ANTLR 规范: 元语言(Meta-Language) ......................................................................... 6
1.1 元语言词汇表(Meta-Language Vocabulary) ................................................................. 6
1.2 Header 段(Header Section) ......................................................................................... 12
1.3 语法分析类的定义(Paser Class Definitions)............................................................ 12
1.4 词法分析类定义(Lexcal Analyzer Class Definitions) ................................................... 13
1.5 树分析类定义(Tree-parser Class Definitions) ............................................................. 14
1.6 选项段(Option Section) ....................................................................................... 14
1.7 记号段(Tokens Section) ....................................................................................... 14
1.8 语法继承(Grammar Inheritance) ............................................................................ 16
1.9 规则定义(Rule Definitions ) ....................................................................................... 16
1.10 原子的产生式元素(Atomic Production Elements) ................................................ 19
1.11 简单的产生式元素(Simple Production Elements) ................................................ 21
1.12 产生式元素操作符(Production Element Operators)................................................ 22
1.13 记号类 ............................................................................................................................ 24
1.14 谓词 ................................................................................................................................ 24
1.15 元素标签......................................................................................................................... 25
1.16 扩展的 BNF 规则元素(EBNF Rule Elements) ......................................................... 25
1.17 语义动作的解释(Interpretation Of Semantic Actions) .......................................... 26
1.18 语义谓词(Semantic Predicates) ............................................................................... 26
1.19 语法谓词(Syntactic Predicates) ................................................................................. 28
1.19.1 固定深度的超前预测分析和语法谓词(Fixed depth lookahead and syntactic
predicates) ................................................................................................................... 29
1.20 ANTLR 元语言文法(ANTLR-meta Lanuage Grammar) ........................................... 30
第 2 章 使用 ANTLR 进行词法分析(Lexical Analysis with ANTLR) .......................................... 30
2.1 词法规则(Lexical Rules) .............................................................................................. 31
2.1.1 跳过字符(Skipping characters) ...................................................................... 32
2.1.2 词法分析规则的区别(Distinguishing between lexer rules) .......................... 32
2.1.3 返回值(Return values)..................................................................................... 33
2.2 含谓词的 LL(k)词法分析 .................................................................................................. 34
2.3 关键字和字面值(Keywords and literals) .................................................................... 37
2.4 常见的前缀(Common prefixes) .................................................................................. 37
2.5 记号定义文件(Token definition files) ......................................................................... 38
2.6 字符类(Character classes) ........................................................................................... 38
2.7 记号属性(Token Attributes) ........................................................................................ 38
2.8 词法超前分析和记号结束符(Lexical lookahead and the end-of-token symbol) ....... 38
2.9 扫描二进制文件(Scanning Binary Files) ..................................................................... 43
第 3 章 ANTLR 的树分析器 ........................................................................................................... 44
3.1 什么是树分析器? .......................................................................................................... 45
3.2 可以分析什么类型的树? .............................................................................................. 45
3.3 树的语法规则.................................................................................................................. 46
3.4 句法断言.......................................................................................................................... 47
3.5 语义断言.......................................................................................................................... 48
3.6 一个树遍历器的例子 ...................................................................................................... 48
3.7 翻译 ................................................................................................................................. 51
3.8 一个树翻译的例子 .......................................................................................................... 51
3.9 检查/调试 AST ................................................................................................................. 53
第 4 章 记号流(Token Streams) ............................................................................................... 54
4.1 引言 .................................................................................................................................. 54
4.2 自由通过记号流............................................................................................................... 55
4.3 记号流过滤....................................................................................................................... 56
4.4 记号流分离....................................................................................................................... 57
4.4.1 例子........................................................................................................................ 58
4.4.2 过滤器实现 ............................................................................................................ 59
4.4.3 如何使用这个过滤器 ............................................................................................ 60
4.4.4 树的创建................................................................................................................ 61
4.4.5 垃圾回收................................................................................................................ 62
4.4.6 附注........................................................................................................................ 62
4.5 记号流多路技术 (又叫 "词法分析器多状态") ............................................................. 63
4.5.1 多词法分析器 ........................................................................................................ 63
4.5.2 词法分析器共享同一字符流 ................................................................................ 66
4.5.3 分析多元记号流 .................................................................................................... 66
4.5.4 多记号流超前扫描的效果 .................................................................................... 68
4.5.5 多词法分析器 vs 调用另一条词法规则............................................................... 68
4.6 TokenStreamRewriteEngine 简单的语法制导翻译 ........................................................ 70
4.7 未来 ................................................................................................................................. 70
第 5 章 记号(token)词汇表...................................................................................................... 71
5.1 引言 .................................................................................................................................. 71
5.1.1 ANTLR 如何决定哪个词法符号是什么记号类型?............................................... 72
5.1.2 为什么记号类型从 4 开始 .................................................................................... 72
5.1.3 ANTLR 生成什么样的词汇表相关的文件 ............................................................ 72
5.1.4 ANTLR 怎样同步在同一文件和不同文件里文法的符号类型映射..................... 72
5.2 文法继承和词汇表 ........................................................................................................... 74
5.3 识别器生成顺序............................................................................................................... 75
5.4 词汇表的一些使用技巧 ................................................................................................... 76
第 6 章 错误处理及恢复 ............................................................................................................... 78
6.1、ANLTR 的异常体系结构 ................................................................................................ 78
6.2 借助文法来修改默认的错误消息 ................................................................................. 81
6.3 解析异常处理 ................................................................................................................. 81
6.4 指定解析异常处理方法 ................................................................................................. 82
6.5 Lexer 中的默认异常处理 .............................................................................................. 83
第 7 章 Java Runtime Model ....................................................................................................... 85
第 8 章 C++ Runtime Model ........................................................................................................ 85
第 9 章 C# Runtime Model........................................................................................................... 85
第 10 章 Python Runtime Model ................................................................................................. 85
第 11 章 ANTLR 树构建 ................................................................................................................... 85
11.1 注释................................................................................................................................ 86
11.2 控制 AST 构建 ............................................................................................................... 86
11.3 构建 AST 的语法注释 ................................................................................................... 86
11.3.1 叶节点 ................................................................................................................ 86
11.3.2 根节点 ............................................................................................................... 86
11.3.3 关闭标准树的构建 ........................................................................................... 87
11.3.4 树节点构建 ........................................................................................................ 88
11.3.5 AST Action 换化 .............................................................................................. 88
11.4 执行解析创建树 ........................................................................................................... 90
11.5 AST 工厂 ........................................................................................................................ 90
11.6 异类 ASTs ....................................................................................................................... 92
11.6.1 一棵表达式树例子 ........................................................................................... 93
11.6.2 使用语法描述异构树 ..................................................................................... 100
11.7 AST(XML)序列化 ..................................................................................................... 101
11.8 AST 枚举 ...................................................................................................................... 102
11.9 一些例子 ..................................................................................................................... 102
11.10 标签子规则 ............................................................................................................... 103
11.11 引用节点 ................................................................................................................... 107
11.12 必需的 AST 功能与形式 ........................................................................................... 107
第 12 章 语法继承(Grammar Inheritance) ............................................................................ 110
12.1 语法继承(Grammar Inheritance) ........................................................................... 110
12.2 功能(Functionality)................................................................................................. 113
12.3 父语法(Supergrammar)可以放置的位置 .............................................................. 115
12.4 错误信息(Error Messages) ..................................................................................... 116
第 13 章 选项(Options) .......................................................................................................... 116
13.1 文件、语法和规则的选项(File, Grammar, and Rule Options) .............................. 116
13.1.1 ANTLR 中支持的选项(Options supported in ANTLR) .................................. 118
13.1.2 language: 设置生成的目标语言 ...................................................................... 121
13.1.3 k: 设置 lookahead(前瞻)的深度 ................................................................ 121
13.1.4 importVocab: 初始化语法词汇表 .................................................................... 122
13.1.5 exportVocab: 指定导出词汇表的名称 ............................................................ 123
13.1.6 testLiterals: 是否生成常量检测代码 ............................................................... 124
13.1.7 defaultErrorHandler: 设置默认的错误处理器 ................................................ 125
13.1.8 codeGenMakeSwitchThreshold: 控制代码的生成 ........................................... 126
13.1.9 codeGenBitsetTestThreshold: 控制代码的生成 ............................................... 126
13.1.10 buildAST: 自动创建抽象语法树(AST) ....................................................... 127
13.1.11 ASTLabelType: 设置节点类型 ........................................................................ 127
13.1.12 charVocabulary: 设置词法分析器的字符表 .................................................. 128
13.1.13 warnWhenFollowAmbig ................................................................................... 129
13.2 命令行选项(Command Line Options) .................................................................... 131
前言 ANTLR 是什么
ANTLR, 语言识别的另一个工具(ANother Tool for Language Recognition ),(前身是
PCCTS)是一种语言工具,它提供了一个框架,可以通过包含 Java,C++,或 C#动作(action)
的语法描述来构造语言识别器,编译器和解析器。
计算机语言的解析已经变成了一种非常普遍的工作。传统的计算机语言的编译器和工具
(如 C 或 Java)仍旧需要被构造,它们的数量与需要开发的那些成千上万的小语言的识别
工具和解析工具相比是相形见拙。程序员为了解析数据格式,图形文件(如,
PostScript,AutoCAD),文本文件(如,HTML,SGML 等)而需要构造解析器。ANTLR 被设计
出来处理所有这些转换工作。
- 1
- 2
前往页