aboutsummaryrefslogtreecommitdiffstats
path: root/c_compiler/include
diff options
context:
space:
mode:
authorymherklotz <ymherklotz@gmail.com>2017-03-10 17:38:14 +0000
committerymherklotz <ymherklotz@gmail.com>2017-03-10 17:38:14 +0000
commit7a61349a09b4db96794a2a90d2d488f020885442 (patch)
tree22194f4eeb49b3111531dc352df14264c3cfb973 /c_compiler/include
parentb9ab15bb2188543b8883ee8cf86540ed2684ed9d (diff)
downloadCompiler-7a61349a09b4db96794a2a90d2d488f020885442.tar.gz
Compiler-7a61349a09b4db96794a2a90d2d488f020885442.zip
Finished assignment expression
Diffstat (limited to 'c_compiler/include')
-rw-r--r--c_compiler/include/expression.hpp36
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: