diff options
Diffstat (limited to 'c_compiler/include/expression.hpp')
-rw-r--r-- | c_compiler/include/expression.hpp | 48 |
1 files changed, 17 insertions, 31 deletions
diff --git a/c_compiler/include/expression.hpp b/c_compiler/include/expression.hpp index 57c24ef..244b2a8 100644 --- a/c_compiler/include/expression.hpp +++ b/c_compiler/include/expression.hpp @@ -10,10 +10,8 @@ #include <string> class Expression; - typedef std::shared_ptr<Expression> ExpressionPtr; - class Expression : public Node { private: @@ -26,16 +24,13 @@ public: virtual void print() const; virtual void printXml() const; virtual void countArguments(unsigned &argument_count) const; - virtual void expressionDepth(unsigned &depth_count) const; - virtual int postfixStackPosition(VariableStackBindings bindings) const; - virtual void setPostfixExpression(Expression *postfix_expression); + virtual void expressionDepth(unsigned &depth_count) const; virtual std::string id() const; void linkExpression(Expression* next_expression); ExpressionPtr nextExpression() const; }; - class OperationExpression : public Expression { protected: @@ -56,8 +51,15 @@ public: void evaluateExpression(VariableStackBindings bindings, unsigned &label_count) const; }; +class UnaryExpression : public Expression +{ +public: + virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const = 0; -class PostfixArrayElement : public Expression + virtual void stackPosition(VariableStackBindings bindings) const; +}; + +class PostfixArrayElement : public UnaryExpression { public: PostfixArrayElement(); @@ -65,8 +67,7 @@ public: virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const; }; - -class PostfixFunctionCall : public Expression +class PostfixFunctionCall : public UnaryExpression { private: ExpressionPtr postfix_expression_; @@ -81,7 +82,7 @@ public: void setPostfixExpression(Expression *postfix_expression); }; -class PostfixPostIncDecExpression : public Expression +class PostfixPostIncDecExpression : public UnaryExpression { private: std::string operator_; @@ -94,8 +95,7 @@ public: }; - -class UnaryPreIncDecExpression : public Expression +class UnaryPreIncDecExpression : public UnaryExpression { private: std::string operator_; @@ -107,7 +107,7 @@ public: virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const; }; -class OperatorUnaryExpression : public Expression +class OperatorUnaryExpression : public UnaryExpression { private: std::string operator_; @@ -117,6 +117,7 @@ public: OperatorUnaryExpression(const std::string &_operator, Expression *cast_expression); virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const; + virtual void stackPosition(VariableStackBindings bindings) const; }; @@ -132,7 +133,6 @@ public: virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const; }; - class AdditiveExpression : public OperationExpression { private: @@ -145,7 +145,6 @@ public: virtual int constantFold() const; }; - class MultiplicativeExpression : public OperationExpression { private: @@ -158,7 +157,6 @@ public: virtual int constantFold() const; }; - class ShiftExpression : public OperationExpression { private: @@ -170,7 +168,6 @@ public: virtual int constantFold() const; }; - class RelationalExpression : public OperationExpression { private: @@ -182,7 +179,6 @@ public: virtual int constantFold() const; }; - class EqualityExpression : public OperationExpression { private: @@ -194,7 +190,6 @@ public: virtual int constantFold() const; }; - class AndExpression : public OperationExpression { public: @@ -204,7 +199,6 @@ public: virtual int constantFold() const; }; - class ExclusiveOrExpression : public OperationExpression { public: @@ -214,7 +208,6 @@ public: virtual int constantFold() const; }; - class InclusiveOrExpression : public OperationExpression { public: @@ -224,7 +217,6 @@ public: virtual int constantFold() const; }; - class LogicalAndExpression : public OperationExpression { public: @@ -234,7 +226,6 @@ public: virtual int constantFold() const; }; - class LogicalOrExpression : public OperationExpression { public: @@ -244,7 +235,6 @@ public: virtual int constantFold() const; }; - class ConditionalExpression : public Expression { private: @@ -259,7 +249,6 @@ public: virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const; }; - class AssignmentExpression : public OperationExpression { public: @@ -269,8 +258,7 @@ public: virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const; }; - -class Identifier : public Expression +class Identifier : public UnaryExpression { private: std::string id_; @@ -278,12 +266,11 @@ public: Identifier(const std::string &id); virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const; - virtual int postfixStackPosition(VariableStackBindings bindings) const; + virtual void stackPosition(VariableStackBindings bindings) const; virtual std::string id() const; }; - -class Constant : public Expression +class Constant : public UnaryExpression { private: int32_t constant_; @@ -294,5 +281,4 @@ public: virtual int constantFold() const; }; - #endif |