計算式構文解析サービス

ひとことお願いします

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 (数字型) を返します。

(ご説明)

[先頭へ]

[National Agricultural Research Center for Western Region] [National Agriculture And Food Research Organization]