2

CまたはC++のみを使用して(YACCやLEXなどのツールを使用せずに)任意のプログラミング言語またはIR用のASTを作成することは可能ですか?

もしそうなら、字句解析と構文解析を実装する方法は?

そうでない場合、ASTを正常に作成するためにCまたはC ++に拡張する必要があるツールは何ですか?

私が疑問を明らかにしたことを願っています。私の質問が曖昧または文脈から外れているように見える場合は、必要なことを示してください。

PS:私は実際にLLVMの.ll形式のIR表現用のASTを作成しようとしています。.llがASTから派生していることを私は知っています。しかし、私は静的分析の実践を試しています。だから私はASTの作成を検討しています。

4

2 に答える 2

2

パーサジェネレータなしでパーサを作成するための最も簡単な方法は、再帰下降です。それは非常によく文書化されています-この分野の標準的な本はTheDragonBookです。

テキストを入力として受け取り、トークンの文字列を出力として生成するスキャナーは、標準の文字列操作技術を使用して書き込むことができます。

于 2010-10-06T01:40:02.090 に答える
0

任意の言語とLLVMのASTの間に1対1のマッピングがあるとは思えません。つまり、実際には2つの段階でこれを実行したい可能性があります。

  • 言語の解析の問題を単純化するために入手できる最高の解析ツールを使用して、「任意の言語」を解析します。これを使用して、ASTを生成するパーサジェネレータの標準的な方法に従って、言語のASTを構築します。LEX / YACCは問題ありませんが、優れた選択肢はたくさんあります。シンボルテーブルを作成する必要がある可能性が非常に高いです。

  • 解析された言語のASTをウォークして、LLVMASTを構築します。これは1対1ではありませんが、ASTのツリーノードの近くにあるツリーを見て、LLVMコードを生成するために必要な情報を収集する機能は非常に役立つ可能性があります。

これは、単純なコンパイラーの古典的なスタイルです。

構文指向の翻訳に関するAho/UllmanDragonの本を読むことをお勧めします。1日分の教育により、数か月の無駄なエンジニアリング時間を節約できます。

于 2010-10-07T13:13:45.453 に答える