From cfaa3efe43306aa08cbc5ed7b811f4ab365502d4 Mon Sep 17 00:00:00 2001 From: Markus Hauschild Date: Sat, 1 Jun 2013 03:33:38 +0200 Subject: [PATCH] Prepare PrintVisitor --- CMakeLists.txt | 1 + grammar/grammar.y | 9 ++--- inc/AST/ASTVisitor.h | 1 - inc/AST/PrintVisitor.h | 29 ++++++++++++++++ src/AST/PrintVisitor.cpp | 73 ++++++++++++++++++++++++++++++++++++++++ 5 files changed, 108 insertions(+), 5 deletions(-) create mode 100644 inc/AST/PrintVisitor.h create mode 100644 src/AST/PrintVisitor.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index b5c9508..a95df99 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -70,6 +70,7 @@ SET(SCULLY_SOURCE src/AST/FunctionDefinition.cpp src/AST/IfStatement.cpp src/AST/ParameterList.cpp + src/AST/PrintVisitor.cpp src/AST/ReturnStatement.cpp src/AST/RandomForStatement.cpp src/AST/RandomIfStatement.cpp diff --git a/grammar/grammar.y b/grammar/grammar.y index 2cacfa6..709ba77 100644 --- a/grammar/grammar.y +++ b/grammar/grammar.y @@ -18,7 +18,8 @@ #include "AST/FunctionDefinition.h" #include "AST/IfStatement.h" #include "AST/ParameterList.h" -//#include "AST/RandomForStatement.h" +#include "AST/PrintVisitor.h" +#include "AST/RandomForStatement.h" #include "AST/RandomIfStatement.h" #include "AST/ReturnStatement.h" #include "AST/Scope.h" @@ -52,8 +53,8 @@ } %type program {int} -program ::= fundef(F). { std::cout << F << std::endl; } -program ::= expr(E). { std::cout << E << std::endl; } +program ::= fundef(F). { PrintVisitor* pv = new PrintVisitor; F->accept(pv); delete pv; } +program ::= expr(E). { PrintVisitor* pv = new PrintVisitor; E->accept(pv); delete pv; } %type fundef {FunctionDefinition*} fundef(A) ::= type(T) T_IDENTIFIER(ID) T_LPAREN params(P) T_RPAREN T_BEGIN statements(S) T_END. @@ -79,7 +80,7 @@ statement(A) ::= T_RIF T_LPAREN expr(P) T_RPAREN statement(S). statement(A) ::= T_FOR T_LPAREN expr(INIT) T_SEMICOLON expr(COND) T_SEMICOLON expr(STEP) T_RPAREN statement(S). { A = new ForStatement(INIT, COND, STEP, S); } statement(A) ::= T_RFOR T_LPAREN expr(INIT) T_SEMICOLON expr(P) T_SEMICOLON expr(STEP) T_RPAREN statement(S). - { A = 0; /* new RandomForStatement(INIT, P, STEP, S); */ } + { A = new RandomForStatement(INIT, P, STEP, S); } statement(A) ::= T_RETURN expr(E) T_SEMICOLON. { A = new ReturnStatement(E); } statement(A) ::= T_BEGIN statements(S) T_END. { A = new Scope(S); } statement(A) ::= vardef(V) T_SEMICOLON. { A = V; } diff --git a/inc/AST/ASTVisitor.h b/inc/AST/ASTVisitor.h index 5f716bb..ca9acf9 100644 --- a/inc/AST/ASTVisitor.h +++ b/inc/AST/ASTVisitor.h @@ -40,7 +40,6 @@ public: virtual void visit(StatementList* e) = 0; virtual void visit(ValueList* e) = 0; virtual void visit(VariableDefinition* e) = 0; - }; #endif // ASTVISITOR_H diff --git a/inc/AST/PrintVisitor.h b/inc/AST/PrintVisitor.h new file mode 100644 index 0000000..c71d862 --- /dev/null +++ b/inc/AST/PrintVisitor.h @@ -0,0 +1,29 @@ +#ifndef PRINTVISITOR_H +#define PRINTVISITOR_H + +#include "ASTVisitor.h" + +class PrintVisitor : public ASTVisitor { +public: + PrintVisitor(); + virtual ~PrintVisitor(); + + virtual void visit(AssignmentExpression* e); + virtual void visit(BinOpExpression* e); + virtual void visit(ConstantExpression* e); + virtual void visit(ExpressionStatement* e); + virtual void visit(ForStatement* e); + virtual void visit(FunctionCallExpression* e); + virtual void visit(FunctionDefinition* e); + virtual void visit(IfStatement* e); + virtual void visit(ParameterList* e); + virtual void visit(RandomForStatement* e); + virtual void visit(RandomIfStatement* e); + virtual void visit(ReturnStatement* e); + virtual void visit(Scope* e); + virtual void visit(StatementList* e); + virtual void visit(ValueList* e); + virtual void visit(VariableDefinition* e); +}; + +#endif // PRINTVISITOR_H diff --git a/src/AST/PrintVisitor.cpp b/src/AST/PrintVisitor.cpp new file mode 100644 index 0000000..5160146 --- /dev/null +++ b/src/AST/PrintVisitor.cpp @@ -0,0 +1,73 @@ +#include "AST/PrintVisitor.h" + +PrintVisitor::PrintVisitor() { + // +} + +PrintVisitor::~PrintVisitor() { + // +} + +void PrintVisitor::visit(AssignmentExpression* e) { + // TODO implement +} + +void PrintVisitor::visit(BinOpExpression* e) { + // TODO implement +} + +void PrintVisitor::visit(ConstantExpression* e) { + // TODO implement +} + +void PrintVisitor::visit(ExpressionStatement* e) { + // TODO implement +} + +void PrintVisitor::visit(ForStatement* e) { + // TODO implement +} + +void PrintVisitor::visit(FunctionCallExpression* e) { + // TODO implement +} + +void PrintVisitor::visit(FunctionDefinition* e) { + // TODO implement +} + +void PrintVisitor::visit(IfStatement* e) { + // TODO implement +} + +void PrintVisitor::visit(ParameterList* e) { + // TODO implement +} + +void PrintVisitor::visit(RandomForStatement* e) { + // TODO implement +} + +void PrintVisitor::visit(RandomIfStatement* e) { + // TODO implement +} + +void PrintVisitor::visit(ReturnStatement* e) { + // TODO implement +} + +void PrintVisitor::visit(Scope* e) { + // TODO implement +} + +void PrintVisitor::visit(StatementList* e) { + // TODO implement +} + +void PrintVisitor::visit(ValueList* e) { + // TODO implement +} + +void PrintVisitor::visit(VariableDefinition* e) { + // TODO implement +}