2016-12-14 15 views
0

所以這是我的語法拋出一個錯誤:ANTLR的編譯文本,但總是時有一個空格

grammar Test; 

prog: stmt_list; 

stmt_list 
: stmt_list stmt ';' 
| stmt ';' 
; 

stmt 
: assignment 
| bind 
; 

assignment: 'var' IDENTIFIER ('=' | '+=' | '-=' | '*=' | '/=') expression; 

type 
: IDENTIFIER 
| primitiveType 
; 

primitiveType 
: 'int' 
| 'float' 
| 'string' 
| 'bool' 
; 

expression 
: atom 
| expression ('*' | '/') expression 
| expression ('+' | '-') expression 
; 

atom 
: '(' expression ')' 
| IDENTIFIER 
| INT 
| STRING 
; 

IDENTIFIER: [A-z_][A-z_0-9]*; 


INT: [1-9][0-9]*; 
STRING: '"' [A-z] '"'; 

WS: [\t\r\n]+ -> channel(HIDDEN); 

我可以ANTLR編譯它,一切工作正常。當我用grun進行測試時,它會進行編譯,但只要有空白就會拋出「令牌識別錯誤」。例如與該輸入:

var a = b + c; 

我得到:

line 1:3 token recognition error at: ' ' 
line 1:5 token recognition error at: ' ' 
line 1:7 token recognition error at: ' ' 
line 1:9 token recognition error at: ' ' 
line 1:11 token recognition error at: ' ' 

除此之外一切正常,但它仍然是很好,如果我能擺脫這些消息。

回答

3

你只是將製表符和換行符放到隱藏通道中,而不是空格。

相反的:

WS: [\t\r\n]+ -> channel(HIDDEN); 

做:

WS: [ \t\r\n]+ -> channel(HIDDEN); 
相關問題