diff options
author | ymherklotz <ymherklotz@gmail.com> | 2017-03-10 17:38:14 +0000 |
---|---|---|
committer | ymherklotz <ymherklotz@gmail.com> | 2017-03-10 17:38:14 +0000 |
commit | 7a61349a09b4db96794a2a90d2d488f020885442 (patch) | |
tree | 22194f4eeb49b3111531dc352df14264c3cfb973 /c_compiler/include | |
parent | b9ab15bb2188543b8883ee8cf86540ed2684ed9d (diff) | |
download | Compiler-7a61349a09b4db96794a2a90d2d488f020885442.tar.gz Compiler-7a61349a09b4db96794a2a90d2d488f020885442.zip |
Finished assignment expression
Diffstat (limited to 'c_compiler/include')
-rw-r--r-- | c_compiler/include/expression.hpp | 36 |
1 files changed, 33 insertions, 3 deletions
diff --git a/c_compiler/include/expression.hpp b/c_compiler/include/expression.hpp index d446972..d77d9d5 100644 --- a/c_compiler/include/expression.hpp +++ b/c_compiler/include/expression.hpp @@ -4,25 +4,55 @@ #include "node.hpp" -class Expression : public Node { +class Expression : public Node +{ public: + virtual ~Expression(); + + virtual VariableStackBindings printasm(VariableStackBindings bindings) const = 0; + virtual void print() const; virtual void printxml() const; + virtual int32_t getPostfixStackPosition(VariableStackBindings bindings) const; +}; + + +class OperationExpression : public Expression +{ +protected: + Expression* lhs; + Expression* rhs; +public: + OperationExpression(Expression* _lhs, Expression* _rhs); + virtual ~OperationExpression(); + virtual VariableStackBindings printasm(VariableStackBindings bindings) const = 0; }; -class Identifier : public Expression { +class AssignmentExpression : public OperationExpression +{ +public: + AssignmentExpression(Expression* _lhs, Expression* _rhs); + + virtual VariableStackBindings printasm(VariableStackBindings bindings) const; +}; + + +class Identifier : public Expression +{ private: std::string m_id; public: Identifier(const std::string& id); virtual VariableStackBindings printasm(VariableStackBindings bindings) const; + virtual int32_t getPostfixStackPosition(VariableStackBindings bindings) const; }; -class Constant : public Expression { +class Constant : public Expression +{ private: int32_t m_constant; public: |