空 さんが書きました:
パーサー文法ファイルからツリー文法ファイルを生成する体系的な方法があるかどうか知りたい
これを行うための体系的な方法についてはすでに説明しました。ツリー文法のパーサー/プロダクション ルールをコピーし、書き換えルールのみをそこに残します。これでおそらくルールの大部分を処理できますが、他のパーサー ルール (インライン AST 書き換えルールを使用) では、少し異なるように見えるかもしれません。そのため、ツリー文法を自動的に生成する方法はありません。
空 さんが書きました:
PS 「手動ツリー ウォーキングはツリー グラマーよりも優れている」と主張する記事を読みました。これは信頼できる情報ですか?
はい、そうです。Terence Parr (ANTLR の作成者) が自身で ANTLR wiki に記事を投稿したため、その作成者 (Andy Tripp) が有効な点を指摘していることに注意してください。
空 さんが書きました:
もしそうなら、ANTLR ツリー文法ファイルを書くよりも、手動のツリー ウォーカーを作成する方が良いでしょうか?
Andy が結論で述べたように、「翻訳に「ツリー グラマー」アプローチを使用するか、単に「手作業で行う」かの決定は好みの問題です。. したがって、ツリー文法を書くのが面倒だと思う場合は、手動の方法で行ってください。それはあなた次第です。ここに最善の方法はありません。
空 さんが書きました:
次に、ANTLR パーサー文法ファイルを使用して手動ツリー ウォーカーを作成するにはどうすればよいですか (書き換え規則を使用して AST を作成します)。
パーサーは、デフォルトでCommonTree
(API-doc)型の AST を作成します。そのツリーを使用して、子、親、トークンのタイプなどを取得できます。必要なのは、ツリーを手動でたどることだけです。
編集
ANTLR の次のバージョン (バージョン 4) では、(ほとんどの場合) 組み合わせ文法またはパーサー文法を指定してツリー ウォーカーを自動的に生成できることに注意してください。
見る: