x64セルフホスティングCコンパイラを書いた

前回:

ryooooooga.hateblo.jp

はじめに

セルフホスト(自分自身をビルド)できるCコンパイラmoccを書きました。

github.com

前回はバックエンドをLLVMに頼っていたため、今回はx86_64向けのアセンブリを吐くようにしました。 基本的な設計はほぼ前回と同じですが、コードは全て新しく書き直しました。

例によって@rui314さんの低レイヤを知りたい人のためのCコンパイラ作成入門を参考にしています。

工夫した点

基本的な点は、前回とほぼ同じなので上記の記事を参照してください。

前回に比べ、拡張性や規格準拠性を意識して構文木の構造を一部変更しましたが、 結局セルフホストに必要な最小限の機能のみを実装したため、使える言語機能は下記を除けば前回のものと大差ありません。

新しく使えるようにした機能:

  • 列挙体
  • 変数の宣言時初期化
  • 複数の変数の同時宣言

GitHub Actionsを用いたテストの自動化

前回は面倒がっていたテストの自動化を行いました。

GitHub Actionsはお手軽でいいですね。

まとめ

前回のCコンパイラはバックエンドをLLVMに頼っていたため、 x86_64向けのアセンブリを吐くCコンパイラを作成しました。

出力コードの効率などは度外視していたためひどく非効率的なコードが出力されますが、 バックエンドを含め実装することができました。

出力コードの最適化は今後の課題です。