#多少修正
完全に普通のマジックプレイヤーを置き去りにしてる自分に気づく。
6月10日の事例4とか5とか見てイヤーな感じがした人は多分正解。
当初はループ構造とか条件分岐を「シナリオ仕様」に盛り込もうと思ってたけど止めちゃってます。
条件分岐はあってもELSEがないとか
ループ構造はサブルーチン呼び出しの出口コードをスタックでいじって制御するとか。
でもこうすることでインタプリタ上でGOTO(プログラムカウンタ)制御をしなくてすむのでそれはそれ。
シナリオの文法制御をどうするか、について「スタックマシン」にモデルを求めてますのでこうなってます。
スタックマシンといっても知らない人がほとんどだと思いますが
(私も学生のころに少し勉強したくらいで、概念くらいしか覚えてません)
P-CODEとかFORTHとか最近だとPostScriptとかのあれです・・・って普通しらねぇw
■手抜きの方針。
1.通常処理はDBのストアド呼び出し or シナリオ呼び出し。
パラメタとして呼び出すための条件を指定できる。
2.シナリオは途中で呼び出し側に戻ることができる。
パラメタとして呼び出し側に戻るための条件を指定できる。
Cでいうところのreturn。戻り値として指定できるのは
「なし」か「次に実行するシナリオの名前」のみ。
4.条件分岐は2.で実現できる。ELSEはサポートしない。
5.繰り返し制御は3.で実現できるのでサポートしない。
6.演算はDBエンジンに任せてもできるのでサポートしない。
7.多少のI/O制御は必要かもしれない。手抜きできそうならそのためのステートメントのみ追加。
うひゃw
ステートメントの名前とかどんなのがいいか考えてないです。
EXEC IF条件,[シナリオ名],パラメタ文字列 //シナリオスタックは変化しない。
CALL IF条件,[ストアド名],パラメタ文字列 //シナリオスタックに積むものはまだ見えてない。
EXIT IF条件,{ストアド名} //CALLで作られたスタックは除去。ストアド名があればそれを制御スタックに積む。
:
osqlコンソールに見えてきた・・・orz。いっそPERFORMとか使って嫌悪感をアップさせr(ry
ところでこれを考えてるときにAccessマクロを思い出してしまいますた。
(業務でつかったことは3つくらいしかありませんが苦痛の限りのシロモノですw)
あれにラベルがなくても繰り返しとか実現できるかも・・・とか思ってしまった。
んでもって、CDCの人が「Accessでつくれば?」とかいってたのを一瞬マジに検討してしまった。
Accessマクロで書かれたシナリオが数千単位で登録されてるクライアントも面白いかも・・・とか。
(ちなみにAPとかMWSレベルのシナリオならAccessで作れます)
自分メモ:68000のbra命令も思い出してみた。
---------
参考にならなさそうな面白いなリンクを見つけたので貼り付け。
http://mag.autumn.org/Content.modf?id=20050517171824
http://homepage3.nifty.com/murasakigawa/junk/rpn2001c.htm
http://www-lab.ee.uec.ac.jp/text/forth/man/man.html
完全に普通のマジックプレイヤーを置き去りにしてる自分に気づく。
6月10日の事例4とか5とか見てイヤーな感じがした人は多分正解。
当初はループ構造とか条件分岐を「シナリオ仕様」に盛り込もうと思ってたけど止めちゃってます。
条件分岐はあってもELSEがないとか
ループ構造はサブルーチン呼び出しの出口コードをスタックでいじって制御するとか。
でもこうすることでインタプリタ上でGOTO(プログラムカウンタ)制御をしなくてすむのでそれはそれ。
シナリオの文法制御をどうするか、について「スタックマシン」にモデルを求めてますのでこうなってます。
スタックマシンといっても知らない人がほとんどだと思いますが
(私も学生のころに少し勉強したくらいで、概念くらいしか覚えてません)
P-CODEとかFORTHとか最近だとPostScriptとかのあれです・・・って普通しらねぇw
■手抜きの方針。
1.通常処理はDBのストアド呼び出し or シナリオ呼び出し。
パラメタとして呼び出すための条件を指定できる。
2.シナリオは途中で呼び出し側に戻ることができる。
パラメタとして呼び出し側に戻るための条件を指定できる。
Cでいうところのreturn。戻り値として指定できるのは
「なし」か「次に実行するシナリオの名前」のみ。
4.条件分岐は2.で実現できる。ELSEはサポートしない。
5.繰り返し制御は3.で実現できるのでサポートしない。
6.演算はDBエンジンに任せてもできるのでサポートしない。
7.多少のI/O制御は必要かもしれない。手抜きできそうならそのためのステートメントのみ追加。
うひゃw
ステートメントの名前とかどんなのがいいか考えてないです。
EXEC IF条件,[シナリオ名],パラメタ文字列 //シナリオスタックは変化しない。
CALL IF条件,[ストアド名],パラメタ文字列 //シナリオスタックに積むものはまだ見えてない。
EXIT IF条件,{ストアド名} //CALLで作られたスタックは除去。ストアド名があればそれを制御スタックに積む。
:
osqlコンソールに見えてきた・・・orz。いっそPERFORMとか使って嫌悪感をアップさせr(ry
ところでこれを考えてるときにAccessマクロを思い出してしまいますた。
(業務でつかったことは3つくらいしかありませんが苦痛の限りのシロモノですw)
あれにラベルがなくても繰り返しとか実現できるかも・・・とか思ってしまった。
んでもって、CDCの人が「Accessでつくれば?」とかいってたのを一瞬マジに検討してしまった。
Accessマクロで書かれたシナリオが数千単位で登録されてるクライアントも面白いかも・・・とか。
(ちなみにAPとかMWSレベルのシナリオならAccessで作れます)
自分メモ:68000のbra命令も思い出してみた。
---------
参考にならなさそうな面白いなリンクを見つけたので貼り付け。
http://mag.autumn.org/Content.modf?id=20050517171824
http://homepage3.nifty.com/murasakigawa/junk/rpn2001c.htm
http://www-lab.ee.uec.ac.jp/text/forth/man/man.html