7

少し大きいANTLRパーサー文法ファイルがあり、そのためのツリー文法を作成したいと思います。しかし、私が知る限り、このツリー文法生成の作業は自動的に実行できません。つまり、パーサー文法をコピーしたり、不要なコードを削除したりして、手動で生成する必要があります。体系的な方法があるかどうかを知りたいです。パーサー文法ファイルからツリー文法ファイルを生成します。

PS私は「手動のツリーウォーキングはツリー文法よりも優れている」と主張する記事を読みました。これは信頼できる情報ですか?もしそうなら、ANTLRツリー文法ファイルを書くよりも手動のツリーウォーカーを作成する方が良いでしょうか?次に、ANTLRパーサー文法ファイルを使用して手動ツリーウォーカーを作成するにはどうすればよいですか(書き換えルールを使用してASTを作成します)。

前もって感謝します。

4

1 に答える 1

5

空 さんが書きました:

パーサー文法ファイルからツリー文法ファイルを生成する体系的な方法があるかどうか知りたい

これを行うための体系的な方法についてはすでに説明しました。ツリー文法のパーサー/プロダクション ルールをコピーし、書き換えルールのみをそこに残します。これでおそらくルールの大部分を処理できますが、他のパーサー ルール (インライン AST 書き換えルールを使用) では、少し異なるように見えるかもしれません。そのため、ツリー文法を自動的に生成する方法はありません。

空 さんが書きました:

PS 「手動ツリー ウォーキングはツリー グラマーよりも優れている」と主張する記事を読みました。これは信頼できる情報ですか?

はい、そうです。Terence Parr (ANTLR の作成者) が自身で ANTLR wiki に記事を投稿したため、その作成者 (Andy Tripp) が有効な点を指摘していることに注意してください。

空 さんが書きました:

もしそうなら、ANTLR ツリー文法ファイルを書くよりも、手動のツリー ウォーカーを作成する方が良いでしょうか?

Andy が結論で述べたように、「翻訳に「ツリー グラマー」アプローチを使用するか、単に「手作業で行う」かの決定は好みの問題です。. したがって、ツリー文法を書くのが面倒だと思う場合は、手動の方法で行ってください。それはあなた次第です。ここに最善の方法はありません。

空 さんが書きました:

次に、ANTLR パーサー文法ファイルを使用して手動ツリー ウォーカーを作成するにはどうすればよいですか (書き換え規則を使用して AST を作成します)。

パーサーは、デフォルトでCommonTree(API-doc)型の AST を作成します。そのツリーを使用して、子、親、トークンのタイプなどを取得できます。必要なのは、ツリーを手動でたどることだけです。

編集

ANTLR の次のバージョン (バージョン 4) では、(ほとんどの場合) 組み合わせ文法またはパーサー文法を指定してツリー ウォーカーを自動的に生成できることに注意してください。

見る:

于 2011-08-22T08:26:37.213 に答える