5

抽象構文ツリーをファイルに「ダンプ」して、コードをコンパイラーで解析し、言語やコンパイラーに依存しない方法で格納できるようにする方法を探しています。それでも、これを行うための広く認識されている方法を見つけることができませんでした。そのような方法は存在しますか?

4

1 に答える 1

7

ASTを保存するための標準はありません。さらに重要なのは、ツール間でASTを共有するための標準です。その理由は、ASTは文法(さまざまです。Cは特定のコンパイラとバージョンに応じて「多く」あります)と構文解析テクノロジに依存しているためです。

複数の言語にまたがるユニバーサルASTフォームを定義する試みはたくさんありますが、実際に機能したものはありません。演算子のセマンティクスは大きく異なります。(「+」だけを考えてみてください。それは実際にはどういう意味ですか?Fortranでは配列を追加できます。Javaでは文字列を「追加」できます)。

ただし、特定のASTをかなり簡単に書き出すことができます。簡単な方法は、ある種のネストされた「括弧」を使用して、ノードがその再帰的な子とともに識別されるある種の表記法を使用することです。

LispS式はこれを行うための一般的な方法です。ツールによって生成されたS式スタイルの例を見ることができます。

人々はこれにもXMLを使用していますが、かなりかさばります。ここでXML出力の例を見ることができます。

于 2012-11-21T10:17:56.697 に答える