Fix: Resolve ambiguity in statement rule with GATE

This commit is contained in:
2025-09-26 10:14:30 -07:00
parent c1e55680cf
commit 1aa4c04240

View File

@@ -14,7 +14,12 @@ class HiParser extends CstParser {
$.RULE('statement', () => { $.RULE('statement', () => {
$.OR([ $.OR([
{ ALT: () => $.SUBRULE($.declaration) }, { 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($.returnStatement) },
{ ALT: () => $.SUBRULE($.expressionStatement) }, { ALT: () => $.SUBRULE($.expressionStatement) },
]); ]);
@@ -223,4 +228,3 @@ class HiParser extends CstParser {
} }
export const parser = new HiParser(); export const parser = new HiParser();