2017-07-28 2 views
0

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.yysrc/lib/compiler/scanner.llで、JAGS 4.3.0 source codeに組み込まれた文法を解析得られました。

これを達成する方法は、レクサーの末尾のコンテキストを使用することです。 r/s。 ANTLRで行う方法はhereですが、動作させることはできません。

文法の別の部分がこのメカニズムに依存するので、この方法で動作する必要があります - 関連コードの断片here

my repoを複製してmakeを実行することで、私の特定の問題を再現することができます。これにより、レキシングされたトークンのリストと解析ステージのエラーが表示されます。トークンリストでは、という文字は、IDではなく、'T'というトークンとしてレキシングされています。

私はANTLRでこれを行うにはもっと自然で正しい方法があると感じますが、これは初めてであり、方法を見つけられません。

PSどのようにこの質問の名前を変更するか考えている方は、編集してください。

答えて

1

私は問題を理解していれば、正しく次のコードが正常に動作します:

grammar temp; 

input: t | id; 
t:  T '('; 
id: ID | T; 

T:  'T'; 
LPAREN: '('; 
ID: [a-zA-Z][a-zA-Z0-9._]*; 
+0

それが、おかげで働いていました! – tales

関連する問題