aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/recognizer.zig7
1 files 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");
}
}
},