ANTLR标记符合空间,但不是没有

时间:2013-09-18 01:09:27

标签: parsing antlr grammar lexer

我正试图找出这个错误。目前,当我提供一些不同的输入时,我得到正确的结果,或者ANTLRWorks调试器无限循环。

1) {v0, p1} = Infinite loop or mismatched token exception
2) {v0..v1} Works!
3) {v0,p1} Works? Why?! Notice the lack of space?

如果有人能帮助我理解为什么这是模棱两可的,我真的很感激。我已经尝试过更改运算符优先级,但仍然无法按照我认为应该的方式运行它。谢谢!

    WHITESPACE    :  ( '\t' | ' ' | '\r' | '\n'| '\u000C' )+ { $channel = HIDDEN; };
    LEFTCURL      : '{';
    RIGHTCURL     : '}';
    REGISTER      : ('v'|'p') NUMBER+;

    REGISTERLIST  : LEFTCURL REGISTER (',' REGISTER)* RIGHTCURL;
    REGISTERANGE  : LEFTCURL REGISTER '..' REGISTER RIGHTCURL;

1 个答案:

答案 0 :(得分:2)

WHITESPACE仅放在解析器规则内的HIDDEN频道上。由于REGISTERLISTREGISTERANGE都是词法规则,因此您不会隐藏空格,正如您所注意到的那样。这些规则看起来更适合作为解析器规则,而不是考虑这些规则中的空格:

registerList  : LEFTCURL REGISTER (',' REGISTER)* RIGHTCURL;
registerRange : LEFTCURL REGISTER '..' REGISTER RIGHTCURL;