概要
mindが、謎なので調べてみた。
練習問題やってみた。
練習問題
mindで俺cpuのアセンブラから、mindのソースコードを生成せよ。
サンプルコード
コードは 40個の 文字列。
コード数は 変数。
スタック1は 文字列。
スタック2は 文字列。
スタック3は 文字列。
アセンブラとは
コード(コード数)に 入れ
コード数に 1を 加えて コード数に 入れる
。
俺コンパイルとは
文字列1は 文字列
単語1は 文字列
単語2は 文字列
数1は 変数
数2は 変数
合否は 変数
nは 変数
スタック1に 「」を 入れ
スタック2に 「」を 入れ
スタック3に 「」を 入れ
nに 1を 入れ
「メインとは」を 表示し 改行し
「 数aは 変数」を 表示し 改行し
ここから
もし nが コード数より 大きい
ならば
終り
つぎに
※ コード(n)を 一行表示する
コード(n)を 文字列1に 入れ
文字列1から 単語切り出し 単語1に 入れ
文字列1から 単語切り出し 単語2に 入れ
もし 単語1が 「」に 等しい文字列
ならば
打ち切り
つぎに
もし 単語1が 「set」に 等しい文字列
ならば
「 数」を 表示し
単語2を 表示し
「に 入れ」を 表示し 改行し
つぎに
もし 単語1が 「loop」に 等しい文字列
ならば
「 ここから」を 表示し 改行し
つぎに
もし 単語1が 「get」に 等しい文字列
ならば
スタック3に スタック2を 入れ
スタック2に スタック1を 入れ
スタック1に 単語2を 入れる
つぎに
もし 単語1が 「>」に 等しい文字列
ならば
スタック3に スタック2を 入れ
スタック2に スタック1を 入れ
スタック1に 「>」を 入れる
つぎに
もし 単語1が 「if」に 等しい文字列
ならば
「 もし 数」を 表示し
スタック3を 表示し
「が 」を 表示し
スタック2を 表示し
「より 大きい」を 表示し 改行し
「 ならば」を 表示し 改行し
「 終り」を 表示し 改行し
「 さもなければ」を 表示し 改行し
スタック1に 「」を 入れ
スタック2に 「」を 入れ
スタック3に 「」を 入れ
つぎに
もし 単語1が 「out」に 等しい文字列
ならば
「 数」を 表示し
スタック1を 表示し
"を 数値表示し 「 」を 表示し"を 表示し 改行し
スタック1に スタック2を 入れ
スタック2に スタック3を 入れ
つぎに
もし 単語1が 「+」に 等しい文字列
ならば
「 数」を 表示し
スタック2を 表示し
「に 」を 表示し
スタック1を 表示し
「を 加え」を 表示し 改行し
スタック1に スタック3を 入れ
つぎに
単語1を 数値変換し 数1と 合否に 入れ
もし 合否が 真?
ならば
「 」を 表示し
単語1を 表示し
「をつみ 」を 表示し
スタック2に スタック1を 入れ
スタック1に 単語1を 入れる
つぎに
nに 1を 加えて nに 入れる
繰り返す
「 つぎに」を 表示し 改行し
「 繰り返し」を 表示し 改行し
「。」を 表示し 改行し
。
メインとは
コードを クリアし
1を コード数に 入れ
「1 」を アセンブラし
「set a」を アセンブラし
「loop 」を アセンブラし
「get a」を アセンブラし
「100 」を アセンブラし
「> 」を アセンブラし
「if end」を アセンブラし
「get a」を アセンブラし
「out 」を アセンブラし
「get a」を アセンブラし
「1 」を アセンブラし
「+ 」を アセンブラし
「set a」を アセンブラし
「jmp loop」を アセンブラし
俺コンパイルする
。
実行結果
メインとは
数aは 変数
1をつみ 数aに 入れ
ここから
100をつみ もし 数aが 100より 大きい
ならば
終り
さもなければ
数aを 数値表示し 「 」を 表示し
1をつみ 数aに 1を 加え
数aに 入れ
つぎに
繰り返し
。
以上。