レクサーを作成するために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 でハックできるかどうかを確認できれば幸いです。