1

私はこのバグを理解しようとしています。現在、いくつかの異なる入力を指定すると、正しい結果が得られるか、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;
4

1 に答える 1

2

WHITESPACEHIDDENs は、パーサー ルール内のチャネルにのみ配置されます。REGISTERLISTとは両方ともREGISTERANGE字句解析規則であるため、お気付きのように、スペースは隠されません。これらのルール内のスペースを考慮する代わりに、これらはパーサー ルールとしてより適しているように見えます。

registerList  : LEFTCURL REGISTER (',' REGISTER)* RIGHTCURL;
registerRange : LEFTCURL REGISTER '..' REGISTER RIGHTCURL;
于 2013-09-18T07:46:41.727 に答える