概要
c#で、なでしこ、やってみた。
c#な、なでしこ、見つけたので、msbuildでコンパイルしてみた。
練習問題やってみた。
練習問題
Forthインタープリタを書け。
方針
- ユーザー関数使う。
- 関数にglobal変数を持ち回りで実行する。
- 数9を4個つかって1から15までの数を表す式を実行する。
サンプルコード
●実行(Sをspとstackで)
Sを「 」で区切るしてAに代入。
b = Aの配列要素数
iを0からb - 1まで繰り返す
もし、A[i]が「+」に等しいならば
stack[sp - 1] = stack[sp - 1] + stack[sp]
sp = sp - 1
もし、A[i]が「-」に等しいならば
stack[sp - 1] = stack[sp - 1] - stack[sp]
sp = sp - 1
もし、A[i]が「*」に等しいならば
stack[sp - 1] = stack[sp - 1] * stack[sp]
sp = sp - 1
もし、A[i]が「/」に等しいならば
stack[sp - 1] = stack[sp - 1] / stack[sp]
sp = sp - 1
もし、A[i]が「dup」に等しいならば
sp = sp + 1
stack[sp] = stack[sp - 1]
もし、A[i]が「drop」に等しいならば
sp = sp - 1
もし、A[i]が「.」に等しいならば
stack[sp]を表示
もし、A[i]が「9」に等しいならば
sp = sp + 1
stack[sp] = 9
sp = 0
stack[0] = 0
「9 9 - 9 9 / .」をspとstackで実行
「9 9 / 9 9 / + .」をspとstackで実行
「9 9 + 9 + 9 / .」をspとstackで実行
「9 9 9 + 9 / dup + .」をspとstackで実行
「9 9 9 + 9 / dup + - .」をspとstackで実行
「9 dup 9 + 9 + 9 / - .」をspとstackで実行
「9 9 9 + 9 / - .」をspとstackで実行
「9 9 9 drop 9 / - .」をspとstackで実行
「9 9 - 9 * 9 + .」をspとstackで実行
「9 9 / 9 dup 9 / + .」をspとstackで実行
「9 9 9 + 9 / + .」をspとstackで実行
「9 dup 9 9 + + 9 / + .」をspとstackで実行
「9 9 9 + 9 / dup + + .」をspとstackで実行
「9 dup 9 9 + 9 / dup + - + .」をspとstackで実行
「9 dup dup 9 + 9 + 9 / - + .」をspとstackで実行
実行結果
なんで、これで、動くんだろ。
>cnako2 forth.nako
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
以上。