1

ANTLR で発生している問題は、次のような構文を解析する文法があることです。

Hello, my name is bob.
bob offset: 5

「ボブ」に注意してください。最初の行は動的で、何でもかまいません。その一つが「ボブ」です。「bob offset」行は動的ではなく、解析しているタイプのすべてのファイルにあります。

したがって、これを解析するには、いくつかのルールがあります。

greeting: 'Hello, my name is' id1=IDENT '.' NEWLINE
    { System.out.println("Name: " + $id1.text"); }
    ;

bob_offset: 'bob offset:' id1=5 NEWLINE
    { System.out.println("bob offset: " + $id1.text); }
    ;

したがって、問題は、'bob offset:' がレクサーが読み取るトークンであるということです。ルールが実行されると、greeting'bob' を 'bob offset:' に一致させようとしているが、一致しないため、エラーがスローされます。

理想的な解決策は、ANTLR にコンテキストまたはパーサー ルール固有のレクサー ルールを指定する何らかの方法がある場合です。このようにして、'bob offset:' トークンは文法の他の場所で間違えられることはありません。

この問題に関するご意見をいただければ幸いです。

4

1 に答える 1

0

ANTLR用に具体的に具体化するために、より多くのパーサールールを使用してこれを回避する必要がありました。

于 2012-12-12T22:54:02.267 に答える