Edit of RpnCalculator
Top
PermanentLink
Edit
Diff(src)
Diff(visual)
OldVersion
Dump ast
電卓を作ってみたい * 仕様 男ならRPN 関数とか使いたい チューリング完全ぐらい当然 * 文法 Forth風でいいと思うが、ifが頂けないので、関数オブジェクトを扱えるようにしたい。 <@code>1 2 3 * +</@code> <@code>10 sin</@code> <@code>:fib dup 2 gt :noname dup 1 - fib swap 2 - fib +; :noname drop 1; if ;</@code> 型7つ: int5 int8 int16 int32 float function primitive-function boolは0かそれ以外でよかろ 欲しいもの: <@list> add (2-1) + sub (2-1) - mul (2-1) * div (2-1) / mod (2-1) % -5 pow (2-1) ** sin (1-1) sin ld (1-1) load nth of stack st (2-1) store to nth of stack drp (a-) drop top of stack - 10 dup (a-aa) duplicate ovr (ab-aba) swp (ab-ba) rot (abc-bca) nip (ab-b) -15 tuk (ab-bab) 2dp (ab-) 2sw (abcd-cdab) gt (2-1) lt (2-1) -20 eq (2-1) ne (2-1) if (abc-) aが真ならbをcal、偽ならcをcal lop (2-0) aが真な間、bをcal cal (1-0) aを実行 -25 rst スタックと辞書をクリア </@list> * メモリ ** データスタック 値+型をセットで積む 後ろに型をおけば取り出す時に数えられる <@def> int7:: 0b0+[7bit int] => 1byte int8:: 0b10000001 + int8 => 2byte int16:: 0b10000010 + int16 => 3byte int32:: 0b10000100 + int32 => 5byte float:: 0b10001000 + float => 5byte function:: 0b10010000 + ptr => 3byte primitive-function:: 0b11 + [function num(0-127)] => 1byte </> ** コールスタック プログラムカウンタの位置、その関数の最後の位置をポインタサイズで積む ** 辞書 関数一覧を積む 組み込み関数はROMに置きたい <@code> struct { char* name; void(*func)(void); } pfunc[] = [ {"add", &add}, ... ]; </> 関数名は3バイト制限、関数本体は256byte制限かな 名前(3byte) + 長さ(1byte) + 本体 closureは\0ではじまる部分に保存する REPLのどこかでGCせにゃならんね。 * ハードウエア Atmega8かatmega88かatmega238あたり? メモリ足りるかなぁ ** 表示 http://akizukidenshi.com/catalog/g/gP-02985/ あたりを表示につかう。 入力中の値とスタックトップを表示するといいかんじだと思う。 16x2 *** デフォルト状態 ±0000000000 ADD => スタックトップの値11桁 + スペース + 最後に実行した関数の名前 ±0000000000 RDS => スタック2つ目の値11桁 + スペース + 入力待ち? + 関数定義中? + 関数スタック 入力待ち? キー入力可能かどうか(計算中はoff) 関数定義中? 関数定義中はdefボタンが効かない 関数スタック 普通は0、関数定義中は1、無名関数定義に入ったら+1される *** 数字入力中 ±0000000000_ => 入力中の数字 + カーソル ±0000000000 RDS => スタックトップ値11桁 + スペース + 入力待ち? + 関数定義中? + 関数スタック *** 関数名入力中 abc 123 => 入力中の関数名 + マッチする候補 ±0000000000 RDS => スタックトップ値11桁 + スペース + 入力待ち? + 関数定義中? + 関数スタック ** ボタン タクトスイッチを配置する <@table> [1],[2abc],[3def],[+],[call],[rst/power] [4ghi],[5jkl],[6mno],[-],[def] [7pqrs],[8tuv],[9wxyz],[*],[lambda] [0],[.],[確定],[/],[end] </> +-*/ などは [call]plus[確定] への糖衣開閉器 関数名は携帯入力かな?
電卓を作ってみたい * 仕様 男ならRPN 関数とか使いたい チューリング完全ぐらい当然 * 文法 Forth風でいいと思うが、ifが頂けないので、関数オブジェクトを扱えるようにしたい。 <@code>1 2 3 * +</@code> <@code>10 sin</@code> <@code>:fib dup 2 gt :noname dup 1 - fib swap 2 - fib +; :noname drop 1; if ;</@code> 型7つ: int5 int8 int16 int32 float function primitive-function boolは0かそれ以外でよかろ 欲しいもの: <@list> add (2-1) + sub (2-1) - mul (2-1) * div (2-1) / mod (2-1) % -5 pow (2-1) ** sin (1-1) sin ld (1-1) load nth of stack st (2-1) store to nth of stack drp (a-) drop top of stack - 10 dup (a-aa) duplicate ovr (ab-aba) swp (ab-ba) rot (abc-bca) nip (ab-b) -15 tuk (ab-bab) 2dp (ab-) 2sw (abcd-cdab) gt (2-1) lt (2-1) -20 eq (2-1) ne (2-1) if (abc-) aが真ならbをcal、偽ならcをcal lop (2-0) aが真な間、bをcal cal (1-0) aを実行 -25 rst スタックと辞書をクリア </@list> * メモリ ** データスタック 値+型をセットで積む 後ろに型をおけば取り出す時に数えられる <@def> int7:: 0b0+[7bit int] => 1byte int8:: 0b10000001 + int8 => 2byte int16:: 0b10000010 + int16 => 3byte int32:: 0b10000100 + int32 => 5byte float:: 0b10001000 + float => 5byte function:: 0b10010000 + ptr => 3byte primitive-function:: 0b11 + [function num(0-127)] => 1byte </> ** コールスタック プログラムカウンタの位置、その関数の最後の位置をポインタサイズで積む ** 辞書 関数一覧を積む 組み込み関数はROMに置きたい <@code> struct { char* name; void(*func)(void); } pfunc[] = [ {"add", &add}, ... ]; </> 関数名は3バイト制限、関数本体は256byte制限かな 名前(3byte) + 長さ(1byte) + 本体 closureは\0ではじまる部分に保存する REPLのどこかでGCせにゃならんね。 * ハードウエア Atmega8かatmega88かatmega238あたり? メモリ足りるかなぁ ** 表示 http://akizukidenshi.com/catalog/g/gP-02985/ あたりを表示につかう。 入力中の値とスタックトップを表示するといいかんじだと思う。 16x2 *** デフォルト状態 ±0000000000 ADD => スタックトップの値11桁 + スペース + 最後に実行した関数の名前 ±0000000000 RDS => スタック2つ目の値11桁 + スペース + 入力待ち? + 関数定義中? + 関数スタック 入力待ち? キー入力可能かどうか(計算中はoff) 関数定義中? 関数定義中はdefボタンが効かない 関数スタック 普通は0、関数定義中は1、無名関数定義に入ったら+1される *** 数字入力中 ±0000000000_ => 入力中の数字 + カーソル ±0000000000 RDS => スタックトップ値11桁 + スペース + 入力待ち? + 関数定義中? + 関数スタック *** 関数名入力中 abc 123 => 入力中の関数名 + マッチする候補 ±0000000000 RDS => スタックトップ値11桁 + スペース + 入力待ち? + 関数定義中? + 関数スタック ** ボタン タクトスイッチを配置する <@table> [1],[2abc],[3def],[+],[call],[rst/power] [4ghi],[5jkl],[6mno],[-],[def] [7pqrs],[8tuv],[9wxyz],[*],[lambda] [0],[.],[確定],[/],[end] </> +-*/ などは [call]plus[確定] への糖衣開閉器 関数名は携帯入力かな?
Please input '193' to this field.
FrontPage
日記
フリーソフト
自己紹介
掲示板
For Me
HomePage
よく使うソフト
Projects
Accounts
もちもの
Recent
hojo
skype
SolderingNews
GetPragger
ATTiny2313
HomePage
beginprog
bookmarklet
FreeBSDConfig
UsefulPrograms
PsuedoMultiDisplay
コンピュータ利用歴
TriggerList
JVMScriptLanguages
Server
RpnCalculator
HowToUseVusbForHid
FrontPage
node
SandBox
ServerNG