= [[ProjectName]] [[RepositoryInfo]] [[ProjectDescription]] ユーザから [[BR]]'''「自動計算させたい。」''' [[BR]]なんていう要望を受けたとき、業務システム屋はお約束として細かい条件を聞き出し、起こりうるパターンを確定し、結局 [[BR]]'''「この時、このルールに従って計算する。」''' [[BR]]なんて事をよくやります。 [[BR]] [[BR]]このとき、 [[BR]]'''「自分で計算式を編集したい」''' [[BR]]なんて要望が出たら業務システム屋は [[BR]]'''”見た目はいいけど作るのも操作するのも超めんどくさいフォーム"''' [[BR]]を用意して、 [[BR]]'''"入力内容そっくりそのままな(DB上の)テーブルに格納する"''' [[BR]]と言う事をやりがちです。というかほぼ必ずやります。で、時間がたっていざリリースという段階で [[BR]]'''"なんでコレできないの?"''' [[BR]]'''こういう入力できないの?''' [[BR]]と言う話になって自分が作ったテーブル構造に引っ張られて自爆します。 [[BR]] [[BR]]式なんてわざわざドロップダウンから演算子選んでなんてやらずにテキストで書いてもらえばいいんです。 [[BR]]このプログラムは式を解釈実行するためのライブラリです。 == プログラムの概要 このプログラムは一行スクリプトを実装するためのライブラリです。 [[BR]]このプログラムは大きく4つ、 [[BR]]・式のパーサーとそれに関連するAPI(DLL) [[BR]]・サンプル演算子(DLL) [[BR]]・サンプルメソッド(DLL) [[BR]]・簡易デバッガ(EXE) [[BR]]からなります。 [[BR]]簡易デバッガがついてますがコレはAPIの使い方サンプルです。 ==プログラムの作り このプログラムはデザインパターン:Interpreterをベースにしています。 1.式を予約語単位に分解し(FormulaReader) 2.ダブルクォートやエスケープ文字を解釈し(BlockReader) 3.頭から順番に内容から構文木を作製し(FormulaParser) 4.作られた構文木を演算子の優先順位に従って組み替えて(PriorityChangeVisitor) 5.場合によっては構文木に登場する変数ノードを意識しつつ(VariableManager) 5.結果を得る。(INode.eval()) と言うステップで動作します。 [[Embed(osdn_formula_150801.jpg)]] == リリースファイル (Release Files) [[ReleaseList]] == 最近のコミット (Recent Commits) [[RecentCommit]] [[RepositoryReadme]] == 最近更新されたチケット (Latest updated Tickets) [[RecentTickets(limit=5)]] = 作業部屋 Wiki について OSDN Wiki システムへようこそ。ここは作業部屋用の Wiki ページです。 ほぼプロジェクトと同じ機能が使えます。書式などに関しては、[wiki:docs:WikiGuide Wikiガイド]を参照して下さい。 = About Chamber Wiki Welcome to OSDN Wiki system. Here is your chamber Wiki space. Check [wiki:docs-en:WikiGuide Wiki Guide (English)] to refer syntax and functions.