diff options
author | Yann Herklotz <ymherklotz@gmail.com> | 2017-03-21 17:03:38 +0000 |
---|---|---|
committer | Yann Herklotz <ymherklotz@gmail.com> | 2017-03-21 17:03:38 +0000 |
commit | 190b7a0e5d45367230795ac0bdf6fc2f248ba9e1 (patch) | |
tree | dc9a605ced1784faf80d71f7f59e49b79d6bb2c7 /c_compiler/include/expression.hpp | |
parent | af8b76d0a83813b3cebac7468db4bd64e534c235 (diff) | |
download | Compiler-190b7a0e5d45367230795ac0bdf6fc2f248ba9e1.tar.gz Compiler-190b7a0e5d45367230795ac0bdf6fc2f248ba9e1.zip |
changed type layout to have all necessary information
Diffstat (limited to 'c_compiler/include/expression.hpp')
-rw-r--r-- | c_compiler/include/expression.hpp | 38 |
1 files changed, 23 insertions, 15 deletions
diff --git a/c_compiler/include/expression.hpp b/c_compiler/include/expression.hpp index 1563211..21e5880 100644 --- a/c_compiler/include/expression.hpp +++ b/c_compiler/include/expression.hpp @@ -26,13 +26,11 @@ public: virtual void print() const; virtual void printXml() const; virtual void countArguments(unsigned& argument_count) const; - virtual void expressionDepth(unsigned& depth_count) const; - + virtual void expressionDepth(unsigned& depth_count) const; virtual int postfixStackPosition(VariableStackBindings bindings) const; virtual void setPostfixExpression(Expression* postfix_expression); - virtual std::string id() const; - + void linkExpression(Expression* next_expression); ExpressionPtr nextExpression() const; }; @@ -47,21 +45,14 @@ public: OperationExpression(Expression* lhs, Expression* rhs); virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned& label_count) const = 0; + virtual int constantFold() const; virtual void expressionDepth(unsigned& depth_count) const; + void evaluateExpression(VariableStackBindings bindings, unsigned& label_count) const; }; -class PostfixExpression : public Expression -{ -public: - PostfixExpression(); - - virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned& label_count) const; -}; - - class PostfixArrayElement : public Expression { public: @@ -86,11 +77,28 @@ public: void setPostfixExpression(Expression* postfix_expression); }; +class PostfixPostIncDecExpression : public Expression +{ +private: + std::string operator_; + ExpressionPtr postfix_expression_; + +public: + PostfixPostIncDecExpression(const std::string& _operator, Expression* postfix_expression); + + virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned& label_count) const; + +}; + -class UnaryExpression : public Expression +class UnaryPreIncDecExpression : public Expression { +private: + std::string operator_; + ExpressionPtr unary_expression_; + public: - UnaryExpression(); + UnaryPreIncDecExpression(const std::string& _operator, Expression* unary_expression); virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned& label_count) const; }; |