概要 - narareimei/ParserSample GitHub Wiki

お仕事で表に計算式機能を持たせることに。 そのため簡単な式パーサを作ってみた。ネット上の皆様、ありがとう。

式の解析と評価のお試し。

  1. 四則演算 +-/*()
  2. 集合関数 ex)sum avg count stdevp
  3. 算術関数 ex)floor
  4. 条件関数 ex)lt gt eq ne
  5. 条件分岐 if( condition, [value_if_true], [value_if_false] )

ツリーの持ち方

  • 関数の場合は持ち方が少し異なる
    • 引数が1つのもの
      • sum(1+2) --> 式:sum、左:1+2、右:なし
    • 引数が2つのもの
      • lt(1,2) --> 式:lt、左:1、右:2
SUM(2,+3+4,-5)の場合のツリー。カッコ()は演算子を意味する。
    (SUM)
      |
    +-+---+
    |     | 
    2    (,)
          |
      +-------+
      |       | 
     (+)     (-)
    +---+   +---+
    |   |   |   | 
    3   4  null 5

定数外の指定

  • sum(column_a) とか (column_hight*column_width)のように、データのカラム名の指定も可能とする。
  • 評価時には参照可能なデータ(DataRow、DataTable)を指定し、そこからカラム名で具体値を求める。
  • sum()のような集合関数は、詳細テーブル相当である「DataTable」に対して評価を行う。