ANTLR解析器规则与属性的深入解析
1. 解析器规则基础
解析器由一组解析器规则构成,这些规则可以存在于解析器语法或组合语法中。在Java应用里,通过调用ANTLR生成的与所需起始规则相关的规则函数来启动解析器。
最基本的规则是规则名后接单个以分号结尾的可选分支。示例如下:
/** Javadoc comment can precede rule */
retstat : 'return' expr ';' ;
规则也可以有多个由 |
运算符分隔的可选分支。例如:
stat:
retstat
|
'break' ';'
|
'continue' ';'
;
可选分支可以是规则元素列表,也可以为空。下面是一个包含空可选分支的规则,使整个规则变为可选:
superClass
:
'extends' ID
|
// empty means other alternative(s) are optional
;
2. 可选分支标签
使用 #
运算符为规则的最外层可选分支添加标签,能获得更精确的解析树监听器事件。规则内的所有可选分支要么都添加标签,要么都不添加。示例如下:
grammar AltLa