annotate Bison-Flex/BasicCompiler-StackBase/node.h @ 2:fbe42292d479

upload test
author nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
date Tue, 10 May 2011 06:43:55 +0900
parents a3ea4c73696b
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
1 #ifndef __NODE_H__
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
2 #define __NODE_H__
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
3
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
4 #include <string>
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
5 #include <vector>
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
6 #include <map>
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
7 #include <functional>
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
8 #include <algorithm>
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
9 #include "location.hh"
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
10 #include "vm.h"
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
11
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
12 class compiler;
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
13 class CNode;
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
14 class CValueNode;
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
15 class CArgDef;
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
16
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
17 // 配列
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
18
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
19 template<typename T>
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
20 class CNodeList {
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
21 struct delete_object {
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
22 void operator()(T *ptr){ delete ptr; }
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
23 } ;
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
24
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
25 public:
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
26 CNodeList(const yy::location& l, T *node)
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
27 {
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
28 args.push_back(node);
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
29 }
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
30 ~CNodeList()
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
31 {
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
32 std::for_each(args.begin(), args.end(), delete_object());
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
33 }
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
34
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
35 CNodeList<T> *Add(const yy::location& l, T *add)
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
36 {
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
37 args.push_back(add);
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
38 return this;
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
39 }
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
40
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
41 template<typename Fn>
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
42 void for_each(const Fn &func)
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
43 {
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
44 std::for_each(args.begin(), args.end(), func);
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
45 }
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
46
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
47 template<typename Fn>
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
48 void for_each_rev(const Fn &func)
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
49 {
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
50 std::for_each(args.rbegin(), args.rend(), func);
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
51 }
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
52
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
53 void analyze(compiler *c)
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
54 {
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
55 std::for_each(args.begin(), args.end(), std::bind2nd(std::mem_fun(&T::analyze), c));
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
56 }
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
57
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
58 size_t size() const { return args.size(); }
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
59 T *get(size_t idx) { return args[idx]; }
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
60 T *operator[](size_t idx) { return args[idx]; }
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
61 const T *get(size_t idx) const { return args[idx]; }
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
62 const T *operator[](size_t idx) const { return args[idx]; }
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
63
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
64 private:
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
65 std::vector<T*> args;
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
66 } ;
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
67
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
68 typedef CNodeList<CNode> CArgs;
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
69
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
70 // ノードの命令
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
71 enum {
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
72 OP_NEG,
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
73 OP_PLUS,
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
74 OP_MINUS,
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
75 OP_TIMES,
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
76 OP_DIVIDE,
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
77 OP_MOD,
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
78 OP_EQ,
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
79 OP_NE,
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
80 OP_GT,
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
81 OP_GE,
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
82 OP_LT,
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
83 OP_LE,
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
84 OP_VALUE,
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
85 OP_CONST,
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
86 OP_RANDFUNC,
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
87 } ;
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
88
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
89 // ノード
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
90
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
91 class CNode {
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
92 public:
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
93 CNode(const yy::location& l, int op, CNode *left, CNode *right=0)
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
94 : l_(l), op_(op), left_(left), right_(right), value_(0), string_(0)
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
95 {
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
96 }
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
97 CNode(const yy::location& l, int op, int value)
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
98 : l_(l), op_(op), left_(0), right_(0), value_(value), string_(0)
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
99 {
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
100 }
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
101 CNode(const yy::location& l, int op, std::string *str)
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
102 : l_(l), op_(op), left_(0), right_(0), value_(0), string_(str)
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
103 {
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
104 }
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
105 CNode(const yy::location& l, int op, std::string *str, CNode *node)
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
106 : l_(l), op_(op), left_(node), right_(0), value_(0), string_(str)
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
107 {
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
108 }
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
109 virtual ~CNode()
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
110 {
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
111 delete left_;
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
112 delete right_;
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
113 delete string_;
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
114 }
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
115
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
116 virtual void push(compiler *c) const;
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
117 virtual void pop(compiler *c) const;
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
118
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
119 const yy::location &location() const { return l_; }
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
120 int op() const { return op_; }
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
121 int value() const { return value_; }
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
122 const std::string &string() const { return *string_; }
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
123 const CNode *left() const { return left_; }
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
124 const CNode *right() const { return right_; }
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
125
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
126 static CNode *MakeNode(compiler &c, const yy::location& l, int op, CNode *left, CNode *right=0);
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
127
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
128 protected:
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
129 const yy::location l_;
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
130 int op_;
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
131 int value_;
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
132 std::string *string_;
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
133 CNode *left_;
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
134 CNode *right_;
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
135 } ;
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
136
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
137 // 変数ノード
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
138
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
139 class CValueNode: public CNode {
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
140 public:
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
141 CValueNode(const yy::location& l, std::string *name, CNode *node=NULL)
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
142 : CNode(l, OP_VALUE, name, node)
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
143 {
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
144 }
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
145
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
146 void push(compiler *c) const;
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
147 void pop(compiler *c) const;
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
148 } ;
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
149
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
150 // 代入文用
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
151
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
152 class CAssign {
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
153 public:
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
154 CAssign(const yy::location& l, int op, CNode *value, CNode *expr)
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
155 : l_(l), op_(op), value_(value), expr_(expr)
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
156 {
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
157 }
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
158 ~CAssign()
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
159 {
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
160 delete value_;
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
161 delete expr_;
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
162 }
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
163
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
164 void analyze(compiler *c);
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
165 void push_value(compiler *c)
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
166 {
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
167 value_->push(c);
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
168 }
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
169 void pop_value(compiler *c)
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
170 {
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
171 value_->pop(c);
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
172 }
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
173
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
174 private:
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
175 const yy::location l_;
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
176 int op_;
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
177 CNode *value_;
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
178 CNode *expr_;
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
179 } ;
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
180
fbe42292d479 upload test
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
181 #endif