aboutsummaryrefslogtreecommitdiffstats
path: root/c_compiler/include/expression.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'c_compiler/include/expression.hpp')
-rw-r--r--c_compiler/include/expression.hpp48
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