EsoLangVM Compiler Infrastructure on xyzzy
本家 https://github.com/shinh/elvm
ELVMのbackendにxyzzy lispを加え、ELVMツールチェイン(8cc&elc)をxyzzy lisp向けにコンパイルした物です。 xyzzy上で(外部コマンドを使わずに)C言語のプログラムを様々な言語にコンパイルできます。
現在対応しているコンパイル先言語
- xyzzy lisp
- ELVM IR
- Ruby
- Python
- JavaScript
- Emacs Lisp
- VimScript
- TeX
- Common Lisp
- Bash
- Java
- C
- x86
- C-INTERCAL
- Whitespace
- piet
- Befunge
- Brainf*ck
- Unlambda
Releaseページから
xl-elvm-(version).zipをダウンロードしてsite-lispフォルダ等 *load-path*
にあるフォルダ内に展開し、xyzzyで(require "elvm")
を実行します。
M-x で実行するやつです。5つあります。
指定したバッファ上のCソースコードをコンパイルします。 コンパイル先言語を聞かれるので好きな言語を入力してください。
sampleフォルダのhello.cは10秒前後、fizzbuzz.cは大体十数分かかるので、 ちょっと複雑なコードをコンパイルするときは覚悟して実行しましょう。
なおxyzzy lispにコンパイルした場合、main関数はelvm-compiled
パッケージに定義されます。
elvm-compiled:main (&optional input-stream output-stream)
この関数は入力ストーリームと出力ストリームを引数に取り、それぞれ
標準入力と標準出力として扱います。
(省略した場合は*standard-input*
と*standard-output*
を使用します。)
実行するには、コンパイル結果のバッファでeval-buffer(もしくは byte-compile-file & load)した後、scratchバッファで
(with-input-from-string (istr "stdin text")
(with-output-to-buffer ((create-new-buffer "*stdout*"))
(elvm-compiled:main istr)))
のようにして呼び出してみてください。
Cソースファイルを指定してコンパイルします。
指定したバッファ上のCソースコードをxyzzy lispにコンパイルした後、 bytecompileした上で実行します。
コンパイル時にターゲットをELVM IRにして出力したコードや、 本家ELVMの8ccで生成したELVM IRをアセンブルします。
ELVM IRファイルを指定してアセンブルします。
elvmパッケージからexportされている関数です。
- elvm:compile-c-to-eir (input-buffer output-buffer)
- elvm:assemble-eir (input-buffer output-buffer)
使い方はelvm/command.lを参考にしてみて下さい。