aboutsummaryrefslogtreecommitdiffstats
path: root/c_compiler/include/statement.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'c_compiler/include/statement.hpp')
-rw-r--r--c_compiler/include/statement.hpp101
1 files changed, 101 insertions, 0 deletions
diff --git a/c_compiler/include/statement.hpp b/c_compiler/include/statement.hpp
new file mode 100644
index 0000000..b5f7e9c
--- /dev/null
+++ b/c_compiler/include/statement.hpp
@@ -0,0 +1,101 @@
+#ifndef AST_STATEMENT_HPP
+#define AST_STATEMENT_HPP
+
+#include "node.hpp"
+
+class Declaration;
+class Expression;
+
+
+class Statement : public Node {
+protected:
+ Statement* next_statement;
+
+public:
+ Statement(Statement* statement = nullptr);
+
+ virtual void print() const = 0;
+ virtual void printxml() const = 0;
+ virtual VariableStackBindings printasm(VariableStackBindings bindings) const = 0;
+
+ virtual void count_variables(int32_t& var_count) const = 0;
+
+ void addStatement(Statement* _next);
+};
+
+
+class CompoundStatement : public Statement {
+protected:
+ Declaration* m_decl;
+ Statement* m_statement;
+
+public:
+ CompoundStatement(Declaration* decl = nullptr, Statement* statement = nullptr);
+ CompoundStatement(Statement* statement);
+
+ virtual void print() const;
+ virtual void printxml() const;
+ virtual VariableStackBindings printasm(VariableStackBindings bindings) const;
+
+ virtual void count_variables(int32_t& var_count) const;
+};
+
+
+class SelectionStatement : public Statement {
+protected:
+ Statement* m_if;
+ Statement* m_else;
+public:
+ SelectionStatement(Statement* _if = nullptr, Statement* _else = nullptr);
+
+ virtual void print() const;
+ virtual void printxml() const;
+ virtual VariableStackBindings printasm(VariableStackBindings bindings) const;
+
+ virtual void count_variables(int32_t& var_count) const;
+};
+
+
+class ExpressionStatement : public Statement {
+protected:
+ Expression* m_expr;
+public:
+ ExpressionStatement(Expression* expr = nullptr);
+
+ virtual void print() const;
+ virtual void printxml() const;
+ virtual VariableStackBindings printasm(VariableStackBindings bindings) const;
+
+ virtual void count_variables(int32_t& var_count) const;
+};
+
+
+class JumpStatement : public Statement {
+protected:
+ Expression* m_expr;
+public:
+ JumpStatement(Expression* expr = nullptr);
+
+ virtual void print() const;
+ virtual void printxml() const;
+ virtual VariableStackBindings printasm(VariableStackBindings bindings) const;
+
+ virtual void count_variables(int32_t& var_count) const;
+};
+
+
+class IterationStatement : public Statement {
+protected:
+ Statement* m_statement;
+public:
+ IterationStatement(Statement* statement);
+
+ virtual void print() const;
+ virtual void printxml() const;
+ virtual VariableStackBindings printasm(VariableStackBindings bindings) const;
+
+ virtual void count_variables(int32_t& var_count) const;
+};
+
+
+#endif