忽略ANTLRworks中的空格

时间:2011-10-26 00:35:51

标签: 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=HIDDEN;}
    ;

只有ASSIGNMENT规则才是我的,其余的是ANTLRWorks 1.4.3添加的默认值。

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

Picture of the interface with a MismatchedTokenException

通过阅读ANTLR网站以及

Ignore rules: WS
{$channel=HIDDEN}
文本/语法规则,似乎应该忽略空格,但事实并非如此。

< / p>

我做错了什么?

1 个答案:

答案 0 :(得分:6)

我知道您已找到答案,但让我解释为什么ASSIGNMENT更改为assignment解决了这个问题。

因为以资本开头的规则是词法规则(即令牌)。并且{skip();}{$channel=HIDDEN;}会导致词法分析器规则从解析器规则中跳过(或隐藏),而不是从词法分析器规则中跳过(或隐藏)。

这就是ASSIGNMENT(词法规则)不接受任何空格的原因,assignment(解析器规则)会忽略它们。