diff options
Diffstat (limited to 'src/recognizer.zig')
| -rw-r--r-- | src/recognizer.zig | 25 |
1 files changed, 7 insertions, 18 deletions
diff --git a/src/recognizer.zig b/src/recognizer.zig index 4a266a2..3c284d1 100644 --- a/src/recognizer.zig +++ b/src/recognizer.zig @@ -100,12 +100,13 @@ pub fn forward_and_consume( .terminal => |t| if (t == terminal) try queue.append(try graph.clone(node, node.state.next())), .non_terminal => |n| { const non_terminal = grammar.non_terminal_by_id(n); - if (grammar.is_next_char( - non_terminal.rules()[node.state.rule_index][node.state.inner_position..], - node.state.id, - terminal, - )) { - for (0..grammar.non_terminal_by_id(n).rules().len) |rule_index| { + for (0..grammar.non_terminal_by_id(n).rules().len) |rule_index| { + if (grammar.is_next_char( + non_terminal.rules()[rule_index], + n, + terminal, + )) { + const state = State { .id = n, .rule_index = rule_index, @@ -118,7 +119,6 @@ pub fn forward_and_consume( result.value_ptr.* = try graph.push(node, state); try forward_and_consume(grammar, result.value_ptr.*, graph, terminal, queue, node_cache); } else { - std.debug.print("HERE {}{*} <- {}{*}\n", .{node, node, result.value_ptr.*, result.value_ptr.*}); try result.value_ptr.*.parents.append(node); } } @@ -140,8 +140,6 @@ pub fn reaches_end_of_entry(grammar: *Grammar, node: *gss.Node(State)) bool { } } - std.debug.print("HERE {}\n", .{ node.is_toplevel }); - return node.is_toplevel; } @@ -187,12 +185,7 @@ pub fn check(grammar: *Grammar, input: []const u8, inner_allocator: std.mem.Allo defer node_cache.deinit(); for (input) |character| { - std.debug.print("=============\n", .{}); for (processing_queue.items) |node| { - node.state.debug(grammar); - std.debug.print("PARENT:\n", .{}); - for (node.parents.items) |parent| { parent.state.debug(grammar); } - std.debug.print("-------------\n", .{}); try forward_and_consume( grammar, node, @@ -211,11 +204,7 @@ pub fn check(grammar: *Grammar, input: []const u8, inner_allocator: std.mem.Allo next_processing_queue.clearRetainingCapacity(); } - std.debug.print("==== END ====\n", .{}); - for (processing_queue.items) |node| { - node.state.debug(grammar); - std.debug.print("parent = {any}\n", .{node.parents.items}); if (reaches_end_of_entry(grammar, node)) { return true; } |