ラベル インタプリタ の投稿を表示しています。 すべての投稿を表示
ラベル インタプリタ の投稿を表示しています。 すべての投稿を表示

3/04/2009

構文解析

数式の解析はだいたい正しく組めるようになった。
重要なのは、スタックの優先度が低いものから高いものへの再起構成かなぁ・・・
あとはOutOfIndex(w

ただこの数式の解析については基本の演算子のみサポート
代入"="と等号不等号の演算子には非対応。

これらに関しては、数式とは別のレベルでの解析が必要になる。
代入と成否判定はもっと単純に表現すると、
X=AとA==Bなどの形式に変換されて、Xは変数、A、Bはそれぞれが数式である。
このときの記号はVerb(動詞)として振舞う。
そして動詞の振る舞いも自動詞、他動詞がある。
自動詞ならば X(arg1,arg2,...argN)
他動詞ならば A?B
だなぁ。
?は予約された記号で対応できそうだな・・・
まぁ、変数の宣言機能はつけなければどうでもいいかもなぁ。

自動詞と他動詞のたとえだと若干混乱するけど、言いたいのは記号の動詞的振る舞いだから、そこに注意。

3/02/2009

数式エンジン

どうもJudaです。
数式エンジンをようやく作れました。
計算は逆ポーランド記法にしたがって記述しなおしながら行いました。
変数の取得と代入もIronPythonの方式で行えるようにしました。

ただし新規に登録できる機構がついていないので、使い方は大体Shaderみたいな感じ。
これによって一列の数式なら計算可能になりました。
あとは構文解析を行ってIfStatementによる条件分岐が行えるようになれば、簡易のスクリプトエンジンとしては十分かなぁっと。
そのときには変数の宣言が必要になると思うし、また例外処理の厳密化が問題になると思う。

ちょっと思ったのですが、計算の演算子の優先順位で%と^の優先順位がどのようになっているのか。
今回のエンジンは () > ^ > */% > +- > = の順番で優先順位がついているのですが、これであっているのでしょうか?
まぁ ^ が今回特別に必要なので追加しましたが、これでいいのだろうか?

2/28/2009

自前の計算用のインタプリタ

ちょっとした計算を外部に出したいってことがある。
そのために外部変数を取り入れ可能なインタプリタエンジンがほしい。
IronPythonもあるけど、あれは便利だけど、でかすぎる。
もっと機能限定された簡単なものでいいのだ。

ということで、
『ゲームプログラミングエンジン』赤坂玲音著、Softbank Publishing
『プログラミング作法』Brain W.Kernighan,Rob Pike著、福崎 俊博訳、ASCII出版
に出てくるインタプリタの項目を参考にして作成中。

とりあえず考え方は分かるのだけど、いかにして言語化するのかについて思案中。
基本的な算術式を実行できるようにするだけでなかなか大変だなぁ。
でも一度作れば、自分の資産になるので、勉強中。

現在、まさにこの勉強にぴったりな内容の本が出版されているので、
興味のある方はそちらを探してみるのもいいでしょう。

別の話
RIDEBACKがアニメ化されているけど、おもしろい。
10巻で最終巻らしいが、さっさと戦争状態に入ってしまったので、かなしい。もっとレースの話をしてくれても楽しかったかも。