Antlr编译文本,但在出现';这是空白

Antlr编译文本,但在出现';这是空白,antlr,Antlr,这就是我的语法: grammar Test; prog: stmt_list; stmt_list : stmt_list stmt ';' | stmt ';' ; stmt : assignment | bind ; assignment: 'var' IDENTIFIER ('=' | '+=' | '-=' | '*=' | '/=') expression; type : IDENTIFIER | primitiveType ; primitiveType : 'int'

这就是我的语法:

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: ' '

除此之外,一切都正常,但如果我可以删除这些消息,那就太好了。

您只将制表符和换行符添加到隐藏频道,而不是空格

而不是:

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


您只将制表符和换行符放入隐藏通道,而不是空格

而不是:

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