2016-12-14 14 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); 
相关问题