ヤッター!paiza.ioでコンパイラできたよー!\(^o^)/

これは何?

先日、こんな記事を見ました1

image.png

ほう?

image.png

コンパイラの自作方法を解説しているなんて、なかなか意欲的な記事じゃないか。どれどれ。

image.png

( ゚д゚) ポカーン・・・

(つд⊂)ゴシゴシ

(;゚д゚) ・・・

(つд⊂)ゴシゴシゴシ
  _, ._
(;゚ Д゚) …!?

paiza.io はコンパイラ自作支援システムだ。いいね?
アッハイ

作ったやつ

https://paiza.io/projects/vTnaN4twZe8d1BYQAB3hDw

よくある Brainf*ck コンパイラ(手抜き)です。

技術解説(言い訳タイム)

最初は ELF64 の実行可能ファイルを直接吐き出すコンパイラ作ろうかなって思ったんですよ。でも ELF フォーマット調べてたらこれめんどくせーなってなりました。

Rustなら elf crate とかあるんですが、 paiza.io で外部 crate は流石に使えないし。

という訳で、「Brainf*ck のソースコードから Rust のソースコード生成して後は rustc に任せちゃえ!」と手抜くことに相成りました。Rustを中間言語とするコンパイラと強弁すればOKです。実質 proc-macro と大差ない。

paiza.io は複数のファイルを扱えるので、 source.bf というファイルに Brainf*ck のソースコードを書いて、 そこから source.rs というファイルを生成します。後はrustcにぶん投げて、出来上がったものを実行するだけです。

ところで

「piaza.io で作らないと駄目なのでは?」
「知るかそんなサイト!!!」


  1. 元は https://agency-star.co.jp/column/+compiler でしたが削除されたようなので魚拓 

kazatsuyu
だいたいC++er。constexpr好き。最新規格とか追いかけるの好き。人類ははやくSFINAEを捨ててconstraintに移行すべき。 Rustもやっている。他:Haskell, TypeScriptなど
ユーザー登録して、Qiitaをもっと便利に使ってみませんか。
  1. あなたにマッチした記事をお届けします
    ユーザーやタグをフォローすることで、あなたが興味を持つ技術分野の情報をまとめてキャッチアップできます
  2. 便利な情報をあとで効率的に読み返せます
    気に入った記事を「ストック」することで、あとからすぐに検索できます
コメント
この記事にコメントはありません。
あなたもコメントしてみませんか :)
すでにアカウントを持っている方は
ユーザーは見つかりませんでした