4

私は、新しいプロセッサハードウェアアーキテクチャを定義する必要があるプロジェクトに取り組んでいます。このターゲットのアセンブリコードを生成するコンパイラが必要です(独自の命令セットがあります)。

このプロセッサのプログラムはCで記述されます。

これを行うための私のアイデアは、Cコードを解析して抽象構文木(AST)を生成し、次にASTからアセンブリを生成することです。

確かに、既存のコンポーネントを再利用したいのですが(希望するCパーサーを書き直す必要はありません)、このタスクを実行するためにどのツールまたはフレームワークを使用できますか?

ありがとう。

4

5 に答える 5

6

LLVMを見てください。

これは、個別に作成して中間言語を介して通信できる個別のモジュールで構成されています。この場合、アセンブリバックエンドを作成し、他の人のCコンパイラを再利用する必要があります。

于 2011-11-10T08:16:30.303 に答える
2

GNU GCC 4.5.xツールチェーンは、プラグインも使用できるようになったため、優れていると思います。foo.cを作成し、gccからの生のツリーダンプを確認します。

gcc -fdump-tree-original-raw ./foo.c

偏った意見

広く採用されて移植されているので、移植にはLLVMよりも好きです。LLVMは、プロジェクトに必要のない追加レベルの抽象化を提供します。ただし、両方を研究してください。長所と短所があります。

もっと楽しいもの

http://dragonegg.llvm.org/

于 2011-11-10T08:22:36.487 に答える
1

LLVM( http://llvm.org )を確認する必要があります。

コンパイラを書くことは簡単なことではありません。ゼロから行うことはお勧めしません。

LLVMはモジュール式であり、アセンブリバックエンドを作成するだけで済みます。

于 2011-11-10T08:16:31.137 に答える
0

LLVMは1つのオプションです。gccバックエンドの作成を検討することもできますが、GCCがいかに複雑であるかを考えると、はるかに困難になります。

于 2011-11-10T08:22:42.400 に答える
0

Clang+LLVMはオプションの1つです。または、lccまたはOpen64のターゲットを変更してみてください。

lccは、適切な低レベルの最適化を少し期待する、単純な非標準のアーキテクチャに適しています。LLVMはレジスタマシンに最適です(ただし、たとえば、セグメント化された16ビットメモリが必要な場合は問題が発生します)。Open64はほぼ同じレベルを提供します。

gccのリターゲットもオプションですが、他の人よりもはるかに日常的な手作業が必要になります。

于 2011-11-10T08:27:49.220 に答える