Some stuff for PrintVisitor

This commit is contained in:
Markus Hauschild
2013-06-01 03:41:43 +02:00
parent cfaa3efe43
commit 39af436dad
2 changed files with 37 additions and 2 deletions

View File

@@ -2,6 +2,7 @@
#define PRINTVISITOR_H #define PRINTVISITOR_H
#include "ASTVisitor.h" #include "ASTVisitor.h"
#include <string>
class PrintVisitor : public ASTVisitor { class PrintVisitor : public ASTVisitor {
public: public:
@@ -24,6 +25,11 @@ public:
virtual void visit(StatementList* e); virtual void visit(StatementList* e);
virtual void visit(ValueList* e); virtual void visit(ValueList* e);
virtual void visit(VariableDefinition* 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 #endif // PRINTVISITOR_H

View File

@@ -1,6 +1,8 @@
#include "AST/PrintVisitor.h" #include "AST/PrintVisitor.h"
#include <iostream>
#include <sstream>
PrintVisitor::PrintVisitor() { PrintVisitor::PrintVisitor() : level_(0) {
// //
} }
@@ -33,7 +35,17 @@ void PrintVisitor::visit(FunctionCallExpression* e) {
} }
void PrintVisitor::visit(FunctionDefinition* 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) { void PrintVisitor::visit(IfStatement* e) {
@@ -61,6 +73,7 @@ void PrintVisitor::visit(Scope* e) {
} }
void PrintVisitor::visit(StatementList* e) { void PrintVisitor::visit(StatementList* e) {
println("StatementList");
// TODO implement // TODO implement
} }
@@ -71,3 +84,19 @@ void PrintVisitor::visit(ValueList* e) {
void PrintVisitor::visit(VariableDefinition* e) { void PrintVisitor::visit(VariableDefinition* e) {
// TODO implement // 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;
}