ExprEvalの導入 -まずは触ってみる-
http://expreval.sourceforge.net/
以下ExprEvalの覚え書き。以前書いたようにちょっと修正しないといけない部分があるので、修正したものを置いておきます。
http://toge.skr.jp/program/expreval1_6-toge.zip
とりあえずコンパイルしましょう。といっもMakefileが用意されてないので、力技でテストプログラムをコンパイルしましょう。
> mkdir expreval > cd expreval > unzip ../expreval1_6-toge.zip > gcc -O2 -lm -I. *.c test/test.c -o testExprEval /tmp/xxxxxxxx.o(.text+0x157): In function `main': test.c: warning: the `gets' function is dangerous and should not be used.
なんかgets使うなと怒られますが、まあここはよしとしましょう。
で、生成したものを実行しましょう。
> ./tesetExprEval Enter expression: 5 + 3; Count: 1 Final Value: 8.000000 Time: 0.000000 Average Time Each: 0.000000 res=: 0.000000
ちゃんと動いているみたいですね。式の最後の";"を省略するとエラーになっちゃいます。ちと不便ですな。
以下OKなものとNGなものを列挙してみましょう。
5 + 3; 5 * 3; // ";"で複数の式が書けます。この場合の式の値は最後の式の値です。 5 + x; // 特に宣言しなくても変数xの値を参照してます。代入されていない変数の値は0となります。 x = 5; x * 3; // 当然変数に値を代入できます。 x += 5; // 残念! こういうのは今の時点では出来ないらしい。
もちっと進みますか。
sin(5); log(15); M_PI; // 定数πを示します。これは定数なので代入できません。 M_PI = 3; // つまりこれはエラーになると。
ちなみに組み込みの定数・関数は以下で公開されてますし、後で追加する方法も用意されてます。
http://expreval.sourceforge.net/exprtmpl.html
ということでさすがに4000行もあるだけに色々出来そうです。libformulaの地位あやうしです。