計算式構文解析サービス
Webサービスは,サービス単体ではほとんど使い物にはなりません.みなさまが開発されるアプリケーションの一部機能について,インターネットを介してお手伝いするものです.
ご使用条件を必ずお読み下さい.
eval()を使わずに任意の数式評価を補助するために、計算式(EXPression)の構文解析を行い、結果を木(TREE)構造で返す簡易Webサービスです。
サービスURL
このサービスのURLは http://www.finds.jp/ws/exprtree.phpです.
パラメータ
Toy Service共通仕様もあわせてご覧下さい.
- jsonp (共通)
- 応答文書をJSONP形式にする場合に指定します.
- php (共通)
- 応答文書をPHPシリアル化形式にする場合に指定します.
- q
- 解析したい文字列です。
- m
- m=cと指定すると、全ての引数が定数である演算子の演算を行います。関数は全く計算しません。
- lc
- エラーメッセージ等に使用する言語を指定します。現在有効なのは en または ja で、デフォルトは en です。
応答文書
ルート要素
本サービスのルート要素は exprtree です.
応答ステータス
| コード | 意味 |
|---|---|
| 200 | 成功した場合 (共通) |
| 400 | パラメータ等に誤りがあって失敗した場合 (共通) |
| 500 | サーバ側で問題があって失敗した場合 (共通) |
result要素
Toy Service共通仕様もあわせてご覧下さい.
result要素は次に示す子要素を持っています.
- <type>
- 子要素にこのノードのタイプが入ります。
- <function>
- 関数
- <operator>
- 演算子
- <number>
- 数値リテラル
- <string>
- 文字列リテラル
- <name>
- 関数型または演算子型の場合に、子要素に関数名がを示す文字列が入ります。
- <args> (複数)
- 関数型または演算子型の場合に、子要素に実引数ノードが入ります。
- <value>
- 数値リテラル型または文字列リテラル型の場合に、子要素に値が入ります。
Toy Service共通仕様から外れる仕様
Toy Service共通仕様ではGETメソッドのみ受け付けますが、本サービスではPOSTメソッドでも受け付けます。
実行例
XML文書,またはJavaScriptやPHPで使用される表現で表示されます.人が見たら読みにくいものと感じるかもしれません.あらかじめご了承ください.
XML版
JSONP版
もう少し踏み込んだ使用例を exprtree 使用例 のページにて公開しておりますので、あわせてご参照ください。
補遺
字句解析で受理されるトークン
演算子以外
- NUM
- /[0-9]+/
/[0-9]\.[0-9]*/
/\.[0-9]/
- TRM
- /[_A-Za-z][_A-Za-z0-9]*/
- STR
- /\'.*?[^\\]\'/
- PRB,PRE (parenthesis begin / end)
- '(' , ')'
- BRB,BRE (bracket begin / end)
- '[' , ']'
- CMA
- ','
演算子
(下の一覧は、優先順位の高い順に並べています)
- - (右結合)
- * / %
- + - .
- >= <= > <
- == !=
- &&
- ||
- = (右結合)
構文解析で受理される文法
expr : STR
| NUM
| variable
| variable '=' expr
| TRM '(' args ')'
| TRM '(' ')'
| '-' expr
| '(' expr ')'
| expr '+' expr
| expr '-' expr
| expr '*' expr
| expr '/' expr
| expr '%' expr
| expr '.' expr
| expr '==' expr
| expr '!=' expr
| expr '<' expr
| expr '<=' expr
| expr '>' expr
| expr '>=' expr
| expr '&&' expr
| expr '||' expr
;
args : expr
| expr ',' args
;
variable : VAR
| VAR '[' expr ']'
;
上記の文法で、引用符で括られているトークンは、実際には数字に置き換えています。
演算機能
算術演算( +, -, *, /, % ), 文字列演算( . ), 論理演算( &&, || ) について、引数が定数である場合には演算させることができます。パラメータで演算機能が有効にできますので、パラメータを参考にして下さい。
ただし、代入演算子(=), 配列演算子([]) は演算しません。また、関数は評価しません。
演算に関する注意点は次の通りです。
- '.' (文字列を接続する) では、数字を文字に変換します。
- 文字でも数字と認識できるものは数字として演算します。空文字列は0として演算します。
- 比較演算子では、両方が数字型の場合(文字型で数字と認識できる場合は含みません)には、数字型の比較を行います。一方でも文字列型である場合には、文字列型の比較として演算します。
- 比較演算子は、真の場合 1 (数字型), 偽の場合 0 (数字型) を返します。