Mercurial > hg > Members > nobuyasu > SampleSource
comparison 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 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:db40c85cad7a |
---|---|
1 // | |
2 // 四則演算パーサーとのインターフェース | |
3 // | |
4 // Chihiro.SAKAMOTO | |
5 // | |
6 #include <iostream> | |
7 #include <algorithm> | |
8 #include "calc-driver.h" | |
9 #include "parser.h" | |
10 | |
11 // コンストラクタ | |
12 | |
13 calc_driver::calc_driver() | |
14 { | |
15 } | |
16 | |
17 // デストラクタ | |
18 | |
19 calc_driver::~calc_driver() | |
20 { | |
21 } | |
22 | |
23 // 計算 | |
24 | |
25 bool calc_driver::calc(const std::string &f) | |
26 { | |
27 cparser parser; // パーサー構築 | |
28 int result = parser.parse(this, f); // 構文解析 | |
29 | |
30 if (result != 0) | |
31 return false; // パーサーエラー | |
32 return true; | |
33 } | |
34 | |
35 // エラーメッセージを出力 | |
36 | |
37 void calc_driver::error(const std::string& m) | |
38 { | |
39 std::cerr << m << std::endl; | |
40 } | |
41 | |
42 // 代入処理 | |
43 | |
44 void calc_driver::assign(const std::string &value, cnode *node) | |
45 { | |
46 values[value] = node->expr(this); | |
47 } | |
48 | |
49 // print文 | |
50 | |
51 void calc_driver::print(cnode *node) | |
52 { | |
53 std::cout << node->expr(this) << std::endl; | |
54 } | |
55 | |
56 // 変数リストの一覧表示 | |
57 | |
58 struct list_action { | |
59 void operator()(const std::pair<std::string, int> &it) | |
60 { | |
61 std::cout << it.first << " = " << it.second << std::endl; | |
62 } | |
63 } ; | |
64 | |
65 void calc_driver::list() | |
66 { | |
67 std::for_each(values.begin(), values.end(), list_action()); | |
68 } |