Some stuff for PrintVisitor
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
#define PRINTVISITOR_H
|
||||
|
||||
#include "ASTVisitor.h"
|
||||
#include <string>
|
||||
|
||||
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
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
#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) {
|
||||
// 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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user