LoginSignup
36
36

More than 5 years have passed since last update.

pythonでx86コンパイラ自作

Last updated at Posted at 2017-08-23

pythonでコンパイラを自作してみた。

コンセプトはこんな感じ

  • pythonで実装 (C言語とかじゃなくて)
  • x86_64アセンブラコードを出力 (自作仮想マシン上で動くとかじゃなくて)
  • パーサも自作 (yaccに頼るとかじゃなくて)
  • 実用性はとくに考慮しない (楽しく作って動けばOK)

実装した順に紹介

第一段階
とりあえず動くものを実装
変数宣言や代入や四則演算を実装。パーサも簡単なものなので、ほとんど抽象構文木を手書きしてる感じ。

第二段階
バックエンドを実装
パーサは貧弱なままだけど、配列とか名前空間とか関数呼び出しとかを実装。末尾再帰ぽい機能もオレオレ実装。

第三段階
フロントエンドを実装(完成版)
BNF記法で文法を定義し、SLRパーザを実装。

補足(追記)
Linux環境、python3系で実行してください。
出力はGNU Assemblerです。
また、ソースコードも少し修正しました。

参考資料

  • 滝本宗宏「実践コンパイラ入門」
    Ocamlでコンパイラを実装する本。バックエンドは主にこの本を参考にした。

  • 宮本衛市「はじめてのコンパイラ」
    C言語でコンパイラを実装する本。フロントエンドを実装するときに参考にした。

  • Peter Norvig 「(How to Write a (Lisp) Interpreter (in Python))
    PythonでLispインタプリタを実装する記事。

  • Abdulaziz Ghuloum 「Compilers: Backend to Frontend」
    SchemeでSchemeコンパイラを実装する資料。

  • Rui Ueyama 「簡単なプログラミング言語を作るライブコーディング
    C言語でライブコーディングする動画。

36
36
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
36
36