Piethon  1.0
A Python-like interpreter using flex and bison.
expression.h
Go to the documentation of this file.
1 #ifndef EXPRESSION_H
2 #define EXPRESSION_H
3 
4 #include <string>
5 #include <list>
6 #include "number.h"
7 
8 using std::string;
9 using std::list;
10 
11 class SymbolTable;
12 class FunctionTable;
13 class ExpressionList;
14 class Number;
15 
16 class Expression {
17 public:
18  virtual ~Expression() {};
19 
20  virtual Number eval(const SymbolTable&, const FunctionTable&) const = 0;
21 
22 protected:
23  Expression() { };
24 };
25 
26 
27 class Constant : public Expression {
28 public:
29  Constant(const Number& n) : num(n) { }
30 
31  virtual Number eval(const SymbolTable&, const FunctionTable&) const;
32 
33 private:
34  Number num;
35 };
36 
37 
38 class Identifier : public Expression {
39 public:
40  Identifier(const string& n) : name(n) { }
41 
42  virtual Number eval(const SymbolTable&, const FunctionTable&) const;
43 
44 private:
45  string name;
46 };
47 
48 
49 class Negation : public Expression {
50 public:
51  Negation(Expression* e) : op(e) { }
52  ~Negation();
53 
54  virtual Number eval(const SymbolTable&, const FunctionTable&) const;
55 
56 private:
57  Expression* op;
58 };
59 
60 
61 class FunctionCallExp : public Expression {
62 public:
63  FunctionCallExp(string n, ExpressionList* aList) : name(n), argList(aList) { }
64  ~FunctionCallExp();
65 
66  virtual Number eval(const SymbolTable&, const FunctionTable&) const;
67 
68 private:
69  string name;
70  ExpressionList* argList;
71 };
72 
73 
74 class BinaryExpression : public Expression {
75 public:
77 
78  virtual Number eval(const SymbolTable&, const FunctionTable&) const = 0;
79 
80 protected:
81  BinaryExpression(Expression* e1, Expression* e2) : op1(e1), op2(e2) { }
84 };
85 
86 
87 class Addition : public BinaryExpression {
88 public:
90 
91  virtual Number eval(const SymbolTable&, const FunctionTable&) const;
92 };
93 
94 
95 class Subtraction : public BinaryExpression {
96 public:
98 
99  virtual Number eval(const SymbolTable&, const FunctionTable&) const;
100 };
101 
102 
104 public:
106 
107  virtual Number eval(const SymbolTable&, const FunctionTable&) const;
108 };
109 
110 
111 class Division : public BinaryExpression {
112 public:
114 
115  virtual Number eval(const SymbolTable&, const FunctionTable&) const;
116 };
117 
118 
119 class Modulus : public BinaryExpression {
120 public:
122 
123  virtual Number eval(const SymbolTable&, const FunctionTable&) const;
124 };
125 
126 
127 class Exponent : public BinaryExpression {
128 public:
130 
131  virtual Number eval(const SymbolTable&, const FunctionTable&) const;
132 };
133 
134 
135 class LessThan : public BinaryExpression {
136 public:
138 
139  virtual Number eval(const SymbolTable&, const FunctionTable&) const;
140 };
141 
142 
144 public:
146 
147  virtual Number eval(const SymbolTable&, const FunctionTable&) const;
148 
149 };
150 
151 
153 public:
155 
156  virtual Number eval(const SymbolTable&, const FunctionTable&) const;
157 };
158 
159 
161 public:
163 
164  virtual Number eval(const SymbolTable&, const FunctionTable&) const;
165 };
166 
167 
168 class Equals : public BinaryExpression {
169 public:
171 
172  virtual Number eval(const SymbolTable&, const FunctionTable&) const;
173 };
174 
175 
176 class NotEquals : public BinaryExpression {
177 public:
179 
180  virtual Number eval(const SymbolTable&, const FunctionTable&) const;
181 };
182 
184 public:
186  ~ExpressionList();
187 
188  void add(Expression* exp);
189 
190  unsigned int size() const;
191 
192  list<Expression*>::const_iterator begin() const;
193  list<Expression*>::const_iterator end() const;
194 
195 private:
196  list<Expression*> expList;
197 };
198 
199 #endif
virtual Number eval(const SymbolTable &, const FunctionTable &) const =0
Expression * op2
Definition: expression.h:83
Exponent(Expression *e1, Expression *e2)
Definition: expression.h:129
Constant(const Number &n)
Definition: expression.h:29
LessThanOrEqualTo(Expression *e1, Expression *e2)
Definition: expression.h:154
NotEquals(Expression *e1, Expression *e2)
Definition: expression.h:178
Expression * op1
Definition: expression.h:82
Subtraction(Expression *e1, Expression *e2)
Definition: expression.h:97
BinaryExpression(Expression *e1, Expression *e2)
Definition: expression.h:81
virtual ~Expression()
Definition: expression.h:18
GreaterThan(Expression *e1, Expression *e2)
Definition: expression.h:145
Multiplication(Expression *e1, Expression *e2)
Definition: expression.h:105
Division(Expression *e1, Expression *e2)
Definition: expression.h:113
Negation(Expression *e)
Definition: expression.h:51
Definition: number.h:21
Equals(Expression *e1, Expression *e2)
Definition: expression.h:170
GreaterThanOrEqualTo(Expression *e1, Expression *e2)
Definition: expression.h:162
LessThan(Expression *e1, Expression *e2)
Definition: expression.h:137
Modulus(Expression *e1, Expression *e2)
Definition: expression.h:121
Identifier(const string &n)
Definition: expression.h:40
Addition(Expression *e1, Expression *e2)
Definition: expression.h:89
FunctionCallExp(string n, ExpressionList *aList)
Definition: expression.h:63