ANTLR版本2语法语法?

时间:2013-04-28 06:02:52

标签: antlr context-free-grammar antlr2

我的教授给了我们关于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
    ;

1 个答案:

答案 0 :(得分:1)

这是syntactic predicate的预示documented in the ANTLR 2 manual;这些用于使用前瞻来消除产品的歧义。

在这种特殊情况下,声明可以由变量函数生成。因为每个内容都可以以类型生成开头,所以谓词会提前展示并优先选择declarator SEMI而不是id LPAREN