2013-04-28 80 views
1

我的教授给了我们一个关于ANTLR的任务,ANTLR version2语法语法?

但我发现给定的语法文件不适用于当前的ANTLR版本。

实际上,它是ANTLR v2中包含的一个示例代码,其中有很少的文档可以找到,并且已经停止得到任何IDE工具(如Eclipse或ANTLRWorks)的支持。

因此,我花了很长时间才发现该语法文件来自古代。

我需要修改给定的语法文件,以查找其他分支立即封闭的whlie循环,但无法理解语法的某些部分。

有人请教我什么'=>'在这个例子中的含义?


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 
    ; 

回答

1

这是一个前瞻syntactic predicatedocumented in the ANTLR 2 manual;这些用于使用前瞻来消歧制作。

在此特定情况下,一个声明可由可变功能来制造。因为每个人都可以从类型生产开始,谓词表示展望未来,并优先选择declarator SEMI而不是id LPAREN

+0

谢谢您的回答,特别是文档链接! – Lyle 2013-04-28 06:31:40