38 lines
884 B
C++
38 lines
884 B
C++
#pragma once
|
|
|
|
#include "cypher/ast/ast.hpp"
|
|
#include "cypher/compiler.hpp"
|
|
#include "traverser/node_traverser.hpp"
|
|
|
|
// The purpose of this class is to find out has
|
|
// the query already been compiled into the machine code / c++ code
|
|
// in the same pass query arguments should be extracted (e.g. poperties
|
|
// or node names)
|
|
|
|
// if the query has already been comiled into the machine code
|
|
// than it shouldn't be compiled again
|
|
|
|
class QueryTraverser
|
|
{
|
|
public:
|
|
QueryTraverser() = default;
|
|
|
|
void build_tree(const std::string& query)
|
|
{
|
|
tree = compiler.syntax_tree(query);
|
|
}
|
|
|
|
void traverse()
|
|
{
|
|
tree.root->accept(traverser);
|
|
for (auto& kv : traverser.json) {
|
|
cout << "Key: " << kv.first << ", Value: " << kv.second << endl;
|
|
}
|
|
}
|
|
|
|
private:
|
|
ast::Ast tree;
|
|
cypher::Compiler compiler;
|
|
NodeTraverser traverser;
|
|
};
|