0

レクサーを作成するためにantlr 2.7.4を使用しています。私は次のケースで立ち往生しています:

  • コロン (':') の後にクラス C1 の文字が続く場合、COLON トークンの後にトークン C1 が続く必要があります

  • コロンの後に文字クラス C2 の文字が続く場合、コロンは C2 の一部と見なされ、トークン C2 が発行されます。

クラス C1 が {1,2,3} であり、クラス C2 が {A,B,C} であると仮定すると、:13 は C1 が続くコロンとしてトークン化される必要があります。ただし、:AB は C2 としてトークン化する必要があります。

より具体的には、次の 2 つの構造を持つ言語の文法があります。

  • Identifier : Type // IDENT COLON IDENT の 3 つのトークンがあります。Pascall のような型注釈
  • :: // これは識別子です。識別子として使用できる文字のクラスがあります。コロンは、クラスの他の文字と一緒に使用される場合、識別子として使用できます

いくつかの例:

  • myvar : Int // IDENT コロン IDENT
  • :: // IDENT
  • :$ // IDENT
  • &:& // IDENT

フォローアップの質問: 特定の先読み文字が特定のトークン クラスに属しているかどうかを確認することは可能ですか? どんな提案でも大歓迎です。

編集

私はantlrv2の唯一のユーザーだと思います。antlrv3 で解決策を見つけて、antlrv2 でハックできるかどうかを確認できれば幸いです。

4

0 に答える 0