2011-09-19 52 views
-3

我正在使用最新的ANTLR。我收到此錯誤信息,同時試圖調試此語法:Antlr超時等待連接到遠程解析器

grammar Grammar; 

options { language = Java; 
} 

@header { 
package parser; 
import java.util.HashMap; 
import viewmodel.*; 
import java.util.List; 
} 

@members { 
/** Map variable name to Integer object holding value */ 
HashMap memory = new HashMap(); 
} 

prog returns [DiagramNode node] 
    : clas 
     {$node = $clas.node;} 
    ; 

clas returns [DiagramNode node] 
    :VISIBILITY* CLASSORINTERFACE name=NAME '{' classDef '}' NEWLINE 
     {$node = $classDef.node; 
     $node.setName(name.getText()); 
     } 
    ; 

classDef returns [DiagramNode node] 
    :{$node = new DiagramNode(); } 
    fieldDef ';' NEWLINE? 
     {$node.getFields().add($fieldDef.field);} 
    ; 

fieldDef returns [DiagramField field] 
    :{$field = new DiagramField();} 
    type=NAME name=NAME ';' NEWLINE? 
     {$field.setType(type.getText()); 
     $field.setName(name.getText()); 
     } 
    ; 


VISIBILITY 
    : ('public' | 'private' | 'protected'); 
CLASSORINTERFACE 
    : ('class' | 'inerface'); 
NAME 
    : ('a'..'z'|'A'..'Z') ('a'..'z'|'A'..'Z'|'0'..'9') *; 
INT : '0'..'9'+ ; 
NEWLINE:'\r'? '\n' {skip();}; 
WS : (' '|'\t')+ {skip();} ; 

輸入是:

class Abc { 
    Type1 Name1; 
    Type2 Name2; 
} 

我假設它的文法的錯誤,導致一個又一個被編譯和工作的罰款。你能指出我可能的錯誤嗎?

回答

-4

我看到這裏沒有人知道關於ANTLR的任何信息。幸運的是我已經明白了我自己的想法。問題的原因是語法中的邏輯 - 我不知道到底是什麼,它可能是錯誤的導入,以錯誤的方式使用變量,參數或返回值,或者最終丟失詞法分析器的包聲明:

@lexer::header{ 
    package parser; 
} 
+0

絕對廢話!我已經告訴過你這個問題可能出現在你的自定義代碼中:你只是不想聽(並不是特別感激,並且試圖催促我回答你!)。缺少「@lexer :: header」絕對不是問題所在:讓讀者明白本問答。 –

+0

如何解釋這樣一個事實,即在不改變我的自定義代碼中的任何行的情況下,僅在語法邏輯中更改後纔開始工作? – rideronthestorm

+0

我認爲你只是因爲你是一個惡毒的孩子而做出來的。事實上,你以「我看到這裏沒有人對ANTLR知道任何事情」開始你的「答案」。「_足夠告訴我。寮步再見。 –