small code refactor

This commit is contained in:
Marko Budiselic 2016-02-25 23:49:35 +01:00
parent 0ab499fe65
commit 0e897b412a
6 changed files with 68 additions and 39 deletions

View File

@ -1,9 +1,11 @@
#pragma once
#include "cypher/ast/ast.hpp"
#include "cypher/compiler.hpp"
#include "utils/string/file.hpp"
#include "template_engine/engine.hpp"
#include "config/config.hpp"
#include "traverser/query_traverser.hpp"
#include "traverser/code_traverser.hpp"
using std::string;
@ -15,23 +17,32 @@ public:
const uint64_t stripped_hash,
const std::string& path)
{
// get paths
string template_path = CONFIG(config::TEMPLATE_CPU_CPP_PATH);
string template_file = utils::read_file(template_path.c_str());
traverser.build_tree(query);
string code = traverser.traverse();
// traversing
auto tree = compiler.syntax_tree(query);
code_traverser.reset();
tree.root->accept(code_traverser);
// save the code
string generated = template_engine.render(
template_file,
{
{"class_name", "CodeCPU"},
{"stripped_hash", std::to_string(stripped_hash)},
{"query", query},
{"code", code},
{"code", code_traverser.code},
{"return_type", "int"}
}
);
utils::write_file(generated, path);
}
private:
template_engine::TemplateEngine template_engine;
QueryTraverser traverser;
ast::Ast tree;
cypher::Compiler compiler;
CodeTraverser code_traverser;
};

View File

@ -0,0 +1,34 @@
#pragma once
#include <string>
#include "cypher/visitor/traverser.hpp"
#include "cypher/ast/queries.hpp"
#include "write_traverser.hpp"
#include "read_traverser.hpp"
class CodeTraverser : public Traverser
{
public:
std::string code;
void reset()
{
code = "";
}
void visit(ast::WriteQuery& write_query) override
{
auto write_traverser = WriteTraverser();
write_query.accept(write_traverser);
code = write_traverser.code;
}
void visit(ast::ReadQuery& read_query) override
{
auto read_traverser = ReadTraverser();
read_query.accept(read_traverser);
code = read_traverser.code;
}
};

View File

@ -1,27 +0,0 @@
#pragma once
#include "cypher/ast/ast.hpp"
#include "cypher/compiler.hpp"
#include "create_traverser.hpp"
class QueryTraverser
{
public:
QueryTraverser() = default;
void build_tree(const std::string& query)
{
tree = compiler.syntax_tree(query);
}
std::string traverse()
{
tree.root->accept(traverser);
return traverser.code;
}
private:
ast::Ast tree;
cypher::Compiler compiler;
CreateTraverser traverser;
};

View File

@ -0,0 +1,9 @@
#pragma once
#include "cypher/visitor/traverser.hpp"
class ReadTraverser : public Traverser
{
public:
std::string code;
};

View File

@ -0,0 +1,7 @@
#pragma once
#include "cypher/visitor/traverser.hpp"
class UpdateTraverser : public Traverser
{
};

View File

@ -7,13 +7,10 @@
#include "cypher/visitor/traverser.hpp"
#include "query_engine/util.hpp"
using std::cout;
using std::endl;
class CreateTraverser : public Traverser
class WriteTraverser : public Traverser
{
private:
std::string key;
uint32_t index{0};
public:
@ -29,9 +26,7 @@ public:
void visit(ast::Property& property) override
{
key = property.idn->name;
Traverser::visit(property);
auto key = property.idn->name;
code += line("vertex_accessor.property(");
code += line("\t\"" + key + "\", args[" + std::to_string(index) + "]");