ANTLR版本2语法语法



教授给我们布置了一个关于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

相关内容

最新更新