From 1aa4c042401afd1f7027364cbb9f82821ea9a90e Mon Sep 17 00:00:00 2001 From: multipleof4 Date: Fri, 26 Sep 2025 10:14:30 -0700 Subject: [PATCH] Fix: Resolve ambiguity in statement rule with GATE --- src/parser.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/parser.js b/src/parser.js index 33a4b62..4200d14 100644 --- a/src/parser.js +++ b/src/parser.js @@ -14,7 +14,12 @@ class HiParser extends CstParser { $.RULE('statement', () => { $.OR([ { ALT: () => $.SUBRULE($.declaration) }, - { ALT: () => $.SUBRULE($.assignment) }, + // Gated lookahead to resolve ambiguity. An assignment must be + // an `assignable` expression followed by an `Eq` token. + { + GATE: () => this.BACKTRACK($.assignable) && this.LA(1).tokenType === T.Eq, + ALT: () => $.SUBRULE($.assignment) + }, { ALT: () => $.SUBRULE($.returnStatement) }, { ALT: () => $.SUBRULE($.expressionStatement) }, ]); @@ -223,4 +228,3 @@ class HiParser extends CstParser { } export const parser = new HiParser(); -