5

ANTLR/で区切られた2つのフィールドを含むメッセージで一致させる必要があります。最初のフィールドには1..3数字を含めることができ、2番目のフィールドには1..2数字を含めることができます。

これは動作しません

msg: f1 '/' f2;

f1: DIGIT(DIGIT(DIGIT)?)? ;
f2: DIGIT(DIGIT)?
  1. このような場合、どうすればあいまいさを回避できますか?
  2. 繰り返し回数をよりエレガントに表現する方法はありANTLRますか?

どうもありがとうクリス

4

1 に答える 1

4

AFAIR(私が最後にANTLRを使用したのは少し前です)では、「フラグメント」を使用して、f1とf2をトップレベルのトークンとして使用しないようにすることができます。

msg: f1 '/' f2;

fragment f1: DIGIT(DIGIT(DIGIT)?)? ;
fragment f2: DIGIT(DIGIT)?

これにより、f1とf2が単独で一致する必要がないため、f1とf2の間にあいまいさを持たせることができます。

于 2010-03-11T21:05:24.827 に答える