Select Git revision
ASTModulesImporter.cpp
-
Stéphane Del Pino authored
Now modules can/must register the operators they provide
Stéphane Del Pino authoredNow modules can/must register the operators they provide
PugsParser.cpp 17.34 KiB
#include <PugsParser.hpp>
#include <PugsAssert.hpp>
#include <fstream>
#include <iostream>
#include <unordered_map>
#include <variant>
#include <rang.hpp>
#include <pegtl/analyze.hpp>
#include <pegtl/contrib/parse_tree.hpp>
#include <pegtl/contrib/parse_tree_to_dot.hpp>
#include <ASTNode.hpp>
#include <ASTBuilder.hpp>
#include <PEGGrammar.hpp>
#include <SymbolTable.hpp>
#include <EscapedString.hpp>
#include <ASTNodeExpressionBuilder.hpp>
#include <ASTSymbolTableBuilder.hpp>
#include <ASTPrinter.hpp>
namespace language
{
namespace internal
{
void
print_dot(std::ostream& os, const Node& n)
{
if (n.is_root()) {
os << " x" << &n << " [ label=\"root \\n" << dataTypeName(n.m_data_type) << "\" ]\n";
} else {
if (n.has_content()) {
os << " x" << &n << " [ label=\"" << n.name() << "\\n"
<< n.string_view() << "\\n"
<< dataTypeName(n.m_data_type) << "\" ]\n";
} else {
os << " x" << &n << " [ label=\"" << n.name() << "\\n" << dataTypeName(n.m_data_type) << "\" ]\n";
}
}
if (!n.children.empty()) {
os << " x" << &n << " -> { ";
for (auto& child : n.children) {
os << "x" << child.get() << ((child == n.children.back()) ? " }\n" : ", ");
}
for (auto& child : n.children) {
print_dot(os, *child);
}
}
}
} // namespace internal
void
print_dot(std::ostream& os, const Node& n)
{
Assert(n.is_root());
os << "digraph parse_tree\n{\n";
internal::print_dot(os, n);
os << "}\n";
}
// namespace internal