BUGSのANTLRv4文法で作業しています - 私のレポはhereです。特定のコミットへのリンクはあまり古くないはずです。ANTLR:末尾の括弧で別のトークン
下記の最小コード例。
は、私は、入力規則が入力さT(
ある場合t
ルートに沿って行くことが、入力は以下の文法のためT
ある場合id
ルートに沿って行きたいと思います。
grammar temp;
input: t | id;
t: T '(';
id: ID;
T: 'T' {_input.LA(1)==(}?;
ID: [a-zA-Z][a-zA-Z0-9._]*;
BUGS文法のマイANLTRv4仕様は重くFLEX + BISONの字句を触発し、ファイルsrc/lib/compiler/parser.yy
とsrc/lib/compiler/scanner.ll
で、JAGS 4.3.0 source codeに組み込まれた文法を解析得られました。
これを達成する方法は、レクサーの末尾のコンテキストを使用することです。 r/s
。 ANTLRで行う方法はhereですが、動作させることはできません。
文法の別の部分がこのメカニズムに依存するので、この方法で動作する必要があります - 関連コードの断片here。
my repoを複製してmake
を実行することで、私の特定の問題を再現することができます。これにより、レキシングされたトークンのリストと解析ステージのエラーが表示されます。トークンリストでは、という文字は、ID
ではなく、'T'
というトークンとしてレキシングされています。
私はANTLRでこれを行うにはもっと自然で正しい方法があると感じますが、これは初めてであり、方法を見つけられません。
PSどのようにこの質問の名前を変更するか考えている方は、編集してください。
それが、おかげで働いていました! – tales