我正试图找出这个错误。目前,当我提供一些不同的输入时,我得到正确的结果,或者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;
答案 0 :(得分:2)
WHITESPACE
仅放在解析器规则内的HIDDEN
频道上。由于REGISTERLIST
和REGISTERANGE
都是词法规则,因此您不会隐藏空格,正如您所注意到的那样。这些规则看起来更适合作为解析器规则,而不是考虑这些规则中的空格:
registerList : LEFTCURL REGISTER (',' REGISTER)* RIGHTCURL;
registerRange : LEFTCURL REGISTER '..' REGISTER RIGHTCURL;