1

ANTLR4 では、サブルールをスキップさせるために述語をサブルールの前にしか配置できないようです。私の文法では、一部の述語は、サブルールの終わり近くにあるトークンに依存し、その前に 1 つ以上のルール呼び出しがあります。例えば:

date :
    {isYear(_input.LT(3).getText())}?
        month  day=INTEGER  year=INTEGER     { ... }

この特定の例では、それmonthは常に 1 つのトークンであることがわかっているため、 によってチェックされる必要があるのは常にトークン 3 ですisYear()monthただし、一般に、ルールを構成するトークンの数は実行時までわかりません。トークン数を取得する方法はありますか?

4

1 に答える 1

1

プログラムでルールの長さを取得する組み込みの方法はありません。ATNStateパーサーのフィールドと組み合わせてドキュメントを使用し_ATNて、ルールを通るすべてのパスを計算できます。ルールを通るすべてのパスに同じ数のトークンが含まれている場合、ルールで使用されるトークンの正確な数を計算します。

于 2013-07-30T03:26:32.533 に答える