おいふぉりーのぶろぐ

きっと趣味のブログに違いないです!!

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

今日もちょっぴりプログラミング

boost::spirit で作ったパーサをこの前作った DllExport を使って実装してみました。細かいことは、さておきメインのソースはこんな感じになって↓
// パーサーを生成
CDllExportPtr<ISimpleExpressionBuilder> pBuilder
  = CreateDllInstance<ISimpleExpressionBuilder>(ID_CSimpleExpressionBuilder, ID_ISimpleExpressionBuilder);
if (!pBuilder) { cout << "can't create CSimpleExpressionBuilder" << endl; continue; }
      
// 数式を入力
cout << "expression? " << flush;
string expr; getline(cin, expr);
pBuilder->SetExpression(expr.c_str());
      
// AST を生成
CDllExportPtr<IUnaryFunction> pFunction(pBuilder->Build(), false);
if (!pFunction) { cout << "can't create CSimpleExpression" << endl; continue; }
      
// 数値を入力
cout << "x? " << flush;
string x_str; getline(cin, x_str);
double x = lexical_cast<double>(x_str);
      
// 評価
double begin_time = CHPCounter::Instance().Get();
double result = pFunction->Execute(x);
double end_time = CHPCounter::Instance().Get();
cout << "result = " << result << " (" << end_time - begin_time << "s)" << endl;
流れは、パーサオブジェクト CSimpleExpressionBuilder の生成、これに数式を設定。お次は、パーサオブジェクトから AST 、 CSimpleExpression の生成。パラメータ x を代入して計算。といった感じ。
実行結果はこんな感じ↓
expression? 2 * x * x + 3 * x
x? 3
result = 27 (4.74922e-006s)
さ~て、今度はこの任意の数式を数値積分したり色々しようと思う。まあ、このくらいの速度で動けば、とりあえず使えそうです。上の 2 * x * + 3 * x の数式の例だと 5µs ってとこか。 1 秒間に、 200,000 回ほど色々 x の値を変えて代入して計算できますね。
まあ、このネタ。最終的にはロボットとかに関係するように話を進めたいと思います。
P.S.
この話とは全然関係ないんだけど、なひたふさんの日記の1クロックで対数を計算する演算回路がへぇ~なるほどなぁ~と思った。

さらに、関係ないんだけど、AO DiaryBinary Hacks が発売されたことを知る。ん~。正直、私は linux 使いでも gcc 使いでもないんで、買うか買うまいか迷うな~でも、持っておいても損はなさそうな本だな~と思う。組込みのプログラミングでは gcc 使ってるんですけど、それほど使いこなしていないからなぁ~。

さらに、さらに関係ないんだけど、 javascript って正規表現使えるのねこの前の記事のネタと組み合わせると、例えば<pre id="code">ここにソースを書く</pre>ってなのを、自動的に色つけて強調表示とかも簡単にできそうだな。と思った。
  1. 2006/11/11(土) 19:18:25|
  2. ソフトウェア開発
  3. | トラックバック:0
  4. | コメント:0
<<浮動小数点演算のエラー処理ってややこしいね | ホーム | 再び spirit ってみる。>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバックURLはこちら
http://tm86eublog.blog42.fc2.com/tb.php/165-48995a0b
この記事にトラックバックする(FC2ブログユーザー)

来客数

プロフィール

Euphorie

Author:Euphorie
"おいふぉりー"って呼んでくださいな☆
ハードウェアとかソフトウェアとかの開発に興味があったり。。。
連絡先は上の画像。

最近の記事

最近のコメント

最近のトラックバック

月別アーカイブ

カテゴリー

ブロとも申請フォーム

この人とブロともになる

ブログ内検索

RSSフィード

リンク

このブログをリンクに追加する

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。