Mercurial > hg > Members > nobuyasu > SampleSource
diff Bison-Flex/CALC/discrete-parser/calc-driver.cpp @ 0:db40c85cad7a default tip
upload sample source
author | nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 09 May 2011 03:11:59 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Bison-Flex/CALC/discrete-parser/calc-driver.cpp Mon May 09 03:11:59 2011 +0900 @@ -0,0 +1,68 @@ +// +// 四則演算パーサーとのインターフェース +// +// Chihiro.SAKAMOTO +// +#include <iostream> +#include <algorithm> +#include "calc-driver.h" +#include "parser.h" + +// コンストラクタ + +calc_driver::calc_driver() +{ +} + +// デストラクタ + +calc_driver::~calc_driver() +{ +} + +// 計算 + +bool calc_driver::calc(const std::string &f) +{ + cparser parser; // パーサー構築 + int result = parser.parse(this, f); // 構文解析 + + if (result != 0) + return false; // パーサーエラー + return true; +} + +// エラーメッセージを出力 + +void calc_driver::error(const std::string& m) +{ + std::cerr << m << std::endl; +} + +// 代入処理 + +void calc_driver::assign(const std::string &value, cnode *node) +{ + values[value] = node->expr(this); +} + +// print文 + +void calc_driver::print(cnode *node) +{ + std::cout << node->expr(this) << std::endl; +} + +// 変数リストの一覧表示 + +struct list_action { + void operator()(const std::pair<std::string, int> &it) + { + std::cout << it.first << " = " << it.second << std::endl; + } +} ; + +void calc_driver::list() +{ + std::for_each(values.begin(), values.end(), list_action()); +}