diff --git a/inc/AST/PrintVisitor.h b/inc/AST/PrintVisitor.h index c71d862..03f10e8 100644 --- a/inc/AST/PrintVisitor.h +++ b/inc/AST/PrintVisitor.h @@ -2,6 +2,7 @@ #define PRINTVISITOR_H #include "ASTVisitor.h" +#include class PrintVisitor : public ASTVisitor { public: @@ -24,6 +25,11 @@ public: virtual void visit(StatementList* e); virtual void visit(ValueList* e); virtual void visit(VariableDefinition* e); +private: + int level_; + void indent(); + void print(const std::string& s); + void println(const std::string& s); }; #endif // PRINTVISITOR_H diff --git a/src/AST/PrintVisitor.cpp b/src/AST/PrintVisitor.cpp index 5160146..9938836 100644 --- a/src/AST/PrintVisitor.cpp +++ b/src/AST/PrintVisitor.cpp @@ -1,6 +1,8 @@ #include "AST/PrintVisitor.h" +#include +#include -PrintVisitor::PrintVisitor() { +PrintVisitor::PrintVisitor() : level_(0) { // } @@ -33,7 +35,17 @@ void PrintVisitor::visit(FunctionCallExpression* e) { } void PrintVisitor::visit(FunctionDefinition* e) { - // TODO implement + println("FunctionDefinition"); + level_++; + std::stringstream ss; + ss << e->getType()->getName() << " <- " << e->getName(); + println(ss.str()); + ParameterList* params = e->getParams(); + if (params) { + params->accept(this); + } + e->getSl()->accept(this); + level_--; } void PrintVisitor::visit(IfStatement* e) { @@ -61,6 +73,7 @@ void PrintVisitor::visit(Scope* e) { } void PrintVisitor::visit(StatementList* e) { + println("StatementList"); // TODO implement } @@ -71,3 +84,19 @@ void PrintVisitor::visit(ValueList* e) { void PrintVisitor::visit(VariableDefinition* e) { // TODO implement } + +void PrintVisitor::indent() { + for (int i = 0; i < level_; i++) { + std::cout << " "; + } +} + +void PrintVisitor::print(const std::string& s) { + indent(); + std::cout << s; +} + +void PrintVisitor::println(const std::string& s) { + print(s); + std::cout << std::endl; +}