2017-04-03 13 views
0

antlr2構文からantlr4構文に文法ファイルを書き直す必要があり、次の質問があります。antlr2からantlr4クラス指定子、オプション、TOKENSなど

1)Bart Kiersには、文法、オプション、トークン、@header、@メンバーがこのSO postに厳密な順序があると記載されています。このantlr2.org postは、ヘッダーを表示することにオプションの前に一致しません。 antlr4の正しい順序(存在する場合)を示すリソースはありますか?

2)同じantlr2.org投稿には次のように書かれています。 "文法のオプションセクションが指定されている場合、 ';'クラス指定子の:antlr4で実行している場合

class MyParser extends Parser; 
options { k=2; } 

はしかし、任意のクラス指定子は、このエラーが作成されます。

syntax error: missing COLON at 'MyParser' while matching a rule 

3)What happened to options in antlr4?には、ルールレベルのオプションは、一度に存在しないと言い

warning(83): MyGrammar.g4:4:4: unsupported option k 
warning(83): MyGrammar.g4:5:4: unsupported option exportVocab 
warning(83): MyGrammar.g4:6:4: unsupported option codeGenMakeSwitchThreshold 
warning(83): MyGrammar.g4:7:4: unsupported option codeGenBitsetTestThreshold 
warning(83): MyGrammar.g4:8:4: unsupported option defaultErrorHandler 
warning(83): MyGrammar.g4:9:4: unsupported option buildAST 

私は。)antlr4の適応LL(*)構文解析アルゴリズムは、もはやKトークンlookheadを必要としないのでしょうか?

ii)は、exportVocabのantlr4に相当するものはありますか?

iii。)最適化codeGenMakeSwitchThresholdとcodeGenBitsetTestThresholdのantlr4に相当するものが存在するのか、それらは廃止されましたか?

iv)はdefaultErrorHandlerと同等ですか?

v。)私はantlr4がもはやASTを構築しないことを知っています。私はまだこれが現在生成されている* Parser.javaと* Lexer.javaをどのように使用するかにどのように影響するかを理解しようとしています。

4)私の現在の文法ファイルがTOKENSセクション

tokens { 
    ROOT; FOO; BAR; TRUE="true"; FALSE="false"; NULL="null"; 
} 

を指定し、私は試してみて、それぞれを取り除くために、単一引用符とセミコロン、カンマへとコロンと等号に二重引用符を変更構文エラーですが、このエラーがあります:

mismatched input ':' expecting RBRACE 

その他書き換えは、次のようになります。「真」と::

tokens { 
    ROOT; FOO; BAR; TRUE:'true'; FALSE:'false' ... 
} 

ので、私は取り除か「false」にし、TRUEとFALSEは、生成MyGrammar.tokensに表示されますが、私はそれが以前と同じように機能するかどうかはわかりません。

ありがとうございます!

+0

私はANTLR3について話していました。 –

+1

1つの質問に多くの質問があります。これはQ&Aスタイルのアプローチを打ち負かすので、これはお勧めできません。 –

答えて

1

1)構文の究極のソース:ANTLR4 grammarを見てください。あなたが見ることができるように、注文はprequelセクション(名前付きのアクション、オプションなどが含まれていますが、複数のオプションセクションを持つことさえできます)では何の役割も果たしません。唯一の条件は、prequelセクションがルールの前に現れなければならないということです。

2)誤ったオプションです。これを取り除くと、エラーは消えてしまいます。

3)多くの(実際にはほとんどの古い)オプションはANTLR4では必要なくなり、サポートされていません。

i。)ANTLR4は無制限の先読みを使用します(したがってALL(*)の*)。他の先読みは指定できません。

ii)。exportVocabは長い間消えています(ANTLR3でもサポートされていません)。 .tokensファイルの名前だけを指定します。代わりにデフォルトを使用してください。

iii)それ以上のものは必要ないし、もうサポートされていません。予測アルゴリズムはANTLR4で完全に変更されました。

iv)代わりにエラーリスナーを使用します。それを行う方法の例がたくさんあります(ここでもそうです)。

v。)質問ですか、それとも大声で考えていますか?ヒント:ANTLR4ベースのパーサーは解析ツリーを生成します。

4)私はこれについて100%確信していませんが、トークンセクションに一致するトークン値を指定できなくなると思います。代わりに、これはバーチャルトークンにのみ適用され、その他のものは通常のレクサートークンとして指定する必要があります。

要約:古いANTLR文法に必要な特別なオプションやトリックのほとんどは不要であり、削除する必要があります。新しい構文解析アルゴリズムは、すべてのアンビエイキスを自動的に処理することができます。以前のバージョンでは、ユーザーの指導に困っていました。

関連する問題