1

我的教授给了我们一个关于 ANTLR 的作业,

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

实际上,它是包含在 ANTLR v2 中的示例代码,我能找到的文档很少,并且已停止被任何 IDE 工具(如 Eclipse 或 ANTLRWorks)支持。

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

我需要修改给定的语法文件以找到立即被 else 分支包围但无法理解语法的某些部分的 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
    ;
4

1 回答 1

1

It is a look-ahead syntactic predicate as documented in the ANTLR 2 manual; these are used to disambiguate productions using lookahead.

In this particular case, a declaration can be produced by a variable or a function. Because each of those can begin with a type production the predicate says to look ahead and prefer a declarator SEMI in preference to an id LPAREN.

于 2013-04-28T06:27:21.753 回答