Antlr 在AntlWorks中忽略空白

Antlr 在AntlWorks中忽略空白,antlr,antlrworks,Antlr,Antlrworks,我有以下ANTLR语法: grammar mygrammar; ASSIGNMENT : ID '=' INT ; ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* ; INT : '0'..'9'+ ; WS : ( ' ' | '\t' | '\r' | '\n' ) {$channel=HI

我有以下ANTLR语法:

grammar mygrammar;

ASSIGNMENT 
    :   ID '=' INT
    ;

ID  :   ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*
    ;

INT :   '0'..'9'+
    ;

WS  :   ( ' '
        | '\t'
        | '\r'
        | '\n'
        ) {$channel=HIDDEN;}
    ;
只有分配规则实际上是我的,其余是ANTLRWorks 1.4.3添加的默认值

当我在解释器中尝试语法时,诸如“a=5”之类的字符串成功,但是诸如“b[space]=[space]6”之类的字符串失败:由于空格,我得到了一个不匹配的TokenException:

通过阅读ANTLR网站和Ignore规则:WS和{$channel=HIDDEN}text/语法规则,似乎应该忽略空白,但事实并非如此

Ignore rules: WS
我做错了什么?

我知道你已经找到了答案,但让我解释一下为什么将
作业
更改为
作业
解决了这个问题

因为以大写字母开头的规则是lexer规则(即代币)。和
{skip();}
{$channel=HIDDEN;}
导致从解析器规则而不是从lexer规则中跳过(或隐藏)lexer规则

这就是为什么
ASSIGNMENT
(lexer规则)不接受任何空格,并且
ASSIGNMENT
(解析器规则)会忽略它们。

指定“ASSIGNMENT”而不是“ASSIGNMENT”修复了它。 {$channel=HIDDEN}