Vmgen を使用する同一の例として、 vmgen-ex と vmgen-ex2 の 2 つのバージョンがあります(例として Gforth もありますが、 追加の(文書化されていない)機能が使用されており、 他のいくつかの点でも異なります)。 この例では、 JavaVM のような小さな仮想マシンを備えた小さな Modula-2 のような言語である「mini」言語を実装しています。
2つの例の違いは、 vmgen-ex は多くのキャスト(cast)を使用するのに対し、 vmgen-ex2 はほとんどのキャストを回避し、 代わりに共用体(unions)を使用することです。 このマニュアルの残りの部分では、 通常、 vmgen-ex 内のファイルについてのみ言及します。 共用体(union)を使用したい場合は、 vmgen-ex2 内の同等のファイルを使用してください。
Makefile README disasm.c wrapper file engine.c wrapper file peephole.c wrapper file profile.c wrapper file mini-inst.vmg simple VM instructions mini-super.vmg superinstructions (empty at first) mini.h common declarations mini.l scanner mini.y front end (parser, VM code generator) support.c main() and other support functions fib.mini example mini program simple.mini example mini program test.mini example mini program (tests everything) test.out test.mini output stat.awk プロファイル情報を集約するためのスクリプト peephole-blacklist スーパー命令で許可されない命令のリスト seq2rule.awk スーパー命令を生成するためのスクリプト
あなた独自のインタープリターを作る場合、 通常、 以下のファイル群はコピーして使い、 変更することはほとんどないでしょう:
disasm.c wrapper file engine.c wrapper file peephole.c wrapper file profile.c wrapper file stat.awk プロファイル情報を集約するためのスクリプト seq2rule.awk スーパー命令を生成するためのスクリプト
そして、 通常、 あなたは、 以下のファイル群を大幅に変更するか、 置き換える事になります:
Makefile mini-inst.vmg simple VM instructions mini.h common declarations mini.l scanner mini.y front end (parser, VM code generator) support.c main() and other support functions peephole-blacklist スーパー命令で許可されない命令のリスト
example のディレクトリに cd
してから make
と入力すると、 example をビルドできます。
make check
で動作することを確認できます。 以下のようにして mini 言語のプログラムを実行できます:
./mini fib.mini
オプションについて詳しくは、 ./mini -h
と入力してください。