我的教授给了我们关于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
;
答案 0 :(得分:1)
这是syntactic predicate的预示documented in the ANTLR 2 manual;这些用于使用前瞻来消除产品的歧义。
在这种特殊情况下,声明可以由变量或函数生成。因为每个内容都可以以类型生成开头,所以谓词会提前展示并优先选择declarator SEMI
而不是id LPAREN
。