parser: Add debug function instead of array

This commit is contained in:
augustin64 2024-01-12 15:54:29 +01:00
parent c4b39ecc6e
commit 2f1d9ab183

View File

@ -15,17 +15,54 @@ CodePosition null_pos = {
}; };
const char* _debug_ast_node_names[] = { string _debug_get_ast_node_name(NodeType type) {
"Prog", "Epsilon", "AssignedDeclaration", "Declaration", "Plus", "Minus", "Mult", "Div", "Mod", switch (type) {
"UnaryMinus", "UnaryPlus", "Neg", "Assignment", "LIncr", "RIncr", "LDecr", "RDecr", "If", "IfElse", case NodeType::Prog: return "Prog";
"For", "While", "Bloc", "Lt", "Gt", "Leq", "Geq", "Eq", "Neq", "Land", "Lor", "Comma", case NodeType::Epsilon: return "Epsilon";
"FunctionPrototype", "FunctionDeclaration", "FunctionCall", "FunctionArgs", "FunctionArgsValues", "Return" case NodeType::AssignedDeclaration: return "AssignedDeclaration";
}; case NodeType::Declaration: return "Declaration";
case NodeType::Plus: return "Plus";
case NodeType::Minus: return "Minus";
case NodeType::Mult: return "Mult";
case NodeType::Div: return "Div";
case NodeType::Mod: return "Mod";
case NodeType::UnaryMinus: return "UnaryMinus";
case NodeType::UnaryPlus: return "UnaryPlus";
case NodeType::Neg: return "Neg";
case NodeType::Assignment: return "Assignment";
case NodeType::LIncr: return "LIncr";
case NodeType::RIncr: return "RIncr";
case NodeType::LDecr: return "LDecr";
case NodeType::RDecr: return "RDecr";
case NodeType::If: return "If";
case NodeType::IfElse: return "IfElse";
case NodeType::For: return "For";
case NodeType::While: return "While";
case NodeType::Bloc: return "Bloc";
case NodeType::Lt: return "Lt";
case NodeType::Gt: return "Gt";
case NodeType::Leq: return "Leq";
case NodeType::Geq: return "Geq";
case NodeType::Eq: return "Eq";
case NodeType::Neq: return "Neq";
case NodeType::Land: return "Land";
case NodeType::Lor: return "Lor";
case NodeType::Comma: return "Comma";
case NodeType::FunctionPrototype: return "FunctionPrototype";
case NodeType::FunctionDeclaration: return "FunctionDeclaration";
case NodeType::FunctionCall: return "FunctionCall";
case NodeType::FunctionArgs: return "FunctionArgs";
case NodeType::FunctionArgsValues: return "FunctionArgsValues";
case NodeType::Return: return "Return";
default: return "Unknown";
}
}
void _debug_print_tree(const Node& node, int depth, const string& prefix) { void _debug_print_tree(const Node& node, int depth, const string& prefix) {
if (holds_alternative<InnerNode>(node)) { if (holds_alternative<InnerNode>(node)) {
const InnerNode& inner_node = get<InnerNode>(node); const InnerNode& inner_node = get<InnerNode>(node);
cout << prefix << _debug_ast_node_names[int(inner_node.type)] << "\n"; cout << prefix << _debug_get_ast_node_name(inner_node.type) << "\n";
string new_prefix = prefix; string new_prefix = prefix;
size_t pos = new_prefix.find("└──"); size_t pos = new_prefix.find("└──");