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:' トークンは文法の他の場所で間違えられることはありません。
この問題に関するご意見をいただければ幸いです。