Navigation Menu

Skip to content

Commit

Permalink
Build an expression based on the postfix notation.
Browse files Browse the repository at this point in the history
  • Loading branch information
s-yata committed Jun 12, 2014
1 parent 4581ee1 commit 859856a
Showing 1 changed file with 23 additions and 16 deletions.
39 changes: 23 additions & 16 deletions new-interface/expression-builder.hpp
Expand Up @@ -16,38 +16,45 @@ class ExpressionBuilder {
virtual DataType data_type() const = 0;

// 定数に対応するノードを作成する.
// 成功すれば有効なオブジェクトへのポインタを返す.
// 失敗したときは *error にその内容を格納し, nullptr を返す.
// 成功すれば true を返す.
// 失敗したときは *error にその内容を格納し, false を返す.
//
// 作成されたノードはスタックに積まれる.
//
// 失敗する状況としては,以下のようなものが挙げられる.
// - 指定された定数が異常値である
// - 指定された定数が不正である
// - リソースを確保できない.
virtual ExpressionNode *create_datum_node(Error *error,
const Datum &datum) = 0;
virtual bool create_datum_node(Error *error,
const Datum &datum) = 0;

// カラムに対応するノードを作成する.
// 成功すれば有効なオブジェクトへのポインタを返す.
// 失敗したときは *error にその内容を格納し, nullptr を返す.
// 成功すれば true を返す.
// 失敗したときは *error にその内容を格納し, false を返す.
//
// 作成されたノードはスタックに積まれる.
//
// 失敗する状況としては,以下のようなものが挙げられる.
// - 指定されたカラムが存在しない.
// - リソースを確保できない.
virtual ExpressionNode *create_column_node(Error *error,
const char *column_name) = 0;
virtual bool create_column_node(Error *error,
const char *column_name) = 0;

// 演算子に対応するノードを作成する.
// 成功すれば有効なオブジェクトへのポインタを返す.
// 失敗したときは *error にその内容を格納し, nullptr を返す.
// 成功すれば true を返す.
// 失敗したときは *error にその内容を格納し, false を返す.
//
// スタックに積まれているノードを降ろして被演算子とするため,
// 被演算子を作成した後に演算子を作成しなければならない.
// これは後置式(逆ポーランド記法)の考え方にもとづく.
//
// 失敗する状況としては,以下のようなものが挙げられる.
// - 引数がスタックに存在しない.
// - 演算子と引数が対応していない.
// - 演算子が求める引数の型・数と実際の引数の型・数が異なる
// - 演算子が求める引数の型と実際の引数の型が異なる
// - リソースを確保できない.
virtual ExpressionNode *create_operator_node(
virtual bool create_operator_node(
Error *error,
OperatorType operator_type,
int64_t num_args,
ExpressionNode * const *args) = 0;
OperatorType operator_type) = 0;

// すべてのノードを破棄する.
virtual void clear();
Expand Down

0 comments on commit 859856a

Please sign in to comment.