2013-04-28 117 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