Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- enum TypeKind
- {
- INT,
- DOUBLE,
- BOOL,
- STRING
- };
- class Type
- {
- TypeKind type;
- protected:
- Type(TypeKind t)
- : type(t)
- {
- }
- public:
- TypeKind getType(void) { return type; }
- virtual ~Type(void) { }
- template<typename T> T getValue(void) { }
- };
- class Integer : public Type
- {
- int value;
- public:
- Integer(int v)
- : Type(INT), value(v)
- {
- }
- int getValue()
- {
- return value;
- }
- };
- // klasy siÄ™ dorobi...
- class Expression
- {
- public:
- virtual Type* eval(void) = 0;
- virtual ~Expression(void) { }
- };
- class AddOp : public Expression
- {
- Expression *left, *right;
- public:
- //...
- virtual Type *eval(void)
- {
- Type *l = left->eval(), *r = right->eval();
- if(l->getType() == INT)
- {
- return Integer(dynamic_cast<Integer*>(l)->getValue() + dynamic_cast<Integer*>(r)->getValue());
- }
- //...
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment