From 0de78f3adf3dd671560b657b94773c42177040d5 Mon Sep 17 00:00:00 2001 From: Nathan Reiner Date: Thu, 15 May 2025 19:00:08 +0200 Subject: recognizer: change condition since epsilons are quite rare --- src/recognizer.zig | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/recognizer.zig b/src/recognizer.zig index 05db2c7..696a80a 100644 --- a/src/recognizer.zig +++ b/src/recognizer.zig @@ -147,7 +147,10 @@ pub fn check(grammar: *Grammar, input: []const u8, inner_allocator: std.mem.Allo .non_terminal => |n| { const non_terminal = grammar.non_terminal_by_id(n); for (grammar.non_terminal_by_id(n).rules(), 0..) |child_rule, rule_index| { - if (child_rule.first.is_set(character)) { + if ( + child_rule.first.is_set(character) or + (child_rule.first.is_set(Character.EPSILON) and non_terminal.follows.is_set(character)) + ) { const state = State { .id = n, @@ -163,8 +166,6 @@ pub fn check(grammar: *Grammar, input: []const u8, inner_allocator: std.mem.Allo try node_cache.put(state, next); try forward_queue.append(.{state, next}); } - } else if (child_rule.first.is_set(Character.EPSILON) and non_terminal.follows.is_set(character)) { - @panic("not implemented"); } } }, -- cgit v1.2.3-70-g09d2