教授给我们布置了一个关于ANTLR的作业,
但是我发现给定的语法文件不适合当前的ANTLR版本。
实际上,它是包含在ANTLR v2中的示例代码,我能找到的文档很少,并且已经停止支持任何IDE工具,如Eclipse或ANTLRWorks。
正因为如此,我花了很长时间才发现语法文件来自古代。
我需要修改给定的语法文件,以找到立即被else分支包围的完整循环,但无法理解语法的某些部分。
谁来教我在这个例子中'=>'是什么意思?
program
: ( declaration )* EOF
;
declaration
: (variable) => variable
| function
;
declarator
: id:ID
| STAR id2:ID
;
variable
: type declarator SEMI
;
function
: type id:ID LPAREN
(formalParameter (COMMA formalParameter)*)?
RPAREN
block
;
statement
: (declaration) => declaration
| expr SEMI
| if_statement
| while_statement
| block
;
它是ANTLR 2手册中记录的前瞻性语法谓词;它们用于使用forward消除歧义。
在本例中,声明可以由变量或函数生成。因为它们中的每一个都可以以类型产品开头,谓词说要向前看并优先选择declarator SEMI
而不是id LPAREN
。