2015-12-02 50 views
0

我正在寫一個詞法分析器和解析器到我自己的語言來處理列表上的操作。我開始與:Java ANTLR 4.生成的解析器不識別任何東西

list_Declaration : L_LIST L_ID ASSIGN LBRACE NUMBER (COMA NUMBER)* RBRACE SEMI; 
NUMBER   : [0-9]+; 
L_BOOLEAN_LITERAL 
    : 'true' 
    | 'false' 
    ; 
L_ID   : [a-z]+; 

L_IF   : 'if'; 
L_ELSE   : 'else'; 
L_THEN   : 'then'; 
L_FOREACH  : 'foreach'; 
L_VAR   : 'var'; 
L_IN   : 'in'; 
L_LIST   : 'list'; 
L_NUMBER  : 'number'; 
L_RETURN  : 'return'; 

ASSIGN   : '='; 

LPAREN   : '('; 
RPAREN   : ')'; 
LBRACE   : '{'; 
RBRACE   : '}'; 
COMA   : ','; 
SEMI   : ';'; 
WS: [ \t\n\r]+ ->skip; 

,當我嘗試用示例文本解析這個:

list a = {2,3}; 

它說:

line 1:0 token recognition error at: '' 
line 1:1 missing 'list' at 'list' 
line 1:6 extraneous input 'a' expecting '=' 

我在做什麼錯?

+0

嘗試在'L_RETURN'下面放置'L_ID'。我認爲模棱兩可是問題所在。 'L_ID'的優先級將匹配任何低於它的常量值。 –

+0

或者,添加'L_LETTER:[a-z]'並用解析器規則'id:L_LETTER +'替換'L_ID'。 – Destiner

回答

0

我通常使用這種方式來定義詞法分析器,它總是工作:

fragment I : [iI]; 
fragment L : [lL]; 
fragment S : [sS]; 
fragment T : [tT]; 

L_List  : L I S T; 

'list'已匹配爲L_ID,所以extraneous input 'a' expecting '='
把你L_ID低於幾乎所有的詞法分析器的。

相關問題