***すれ立てるまでもない質問はここで 第A刷***
■ このスレッドは過去ログ倉庫に格納されています
0110デフォルトの名無しさん
NGNGコンパイラはともかく、インタプリタは「機械語に変換」しなくても実行できる。最も簡単な
実装にするなら
仮想機械の状態 (program counter, stack pointer, stack frame pointer, ...) の宣言
無限ループ {
プログラムカウンタのアドレスから命令を 1 つ読み込む
プログラムカウンタを 1 増やす
switch (命令) {
case 実行終了:
exit;
case ジャンプ命令:
仮想機械のプログラムカウンタを変更
break;
case 加算命令:
スタックから値をふたと取り出して、足したものをスタックに積む
break;
...
}
}
って感じ。俺は「UNIX プログラミング環境」を読んで基本的な仕組みを勉強したけど、
ちと書籍が古いよな。今なら Web を検索すれば、適当なサンプルの一つや二つは
見つかるかと。
あとコンパイラも、ネイティブコードを出力する以外に
1. 中間コード(インタプリタ用のコード)を出力する
2. アセンブラを出力して、オブジェクトコードへの変換やリンクは、既存のツールを
使いまわす
という手がある。
■ このスレッドは過去ログ倉庫に格納されています