/** * MEL Parser * Recursive descent parser with Pratt parsing for expressions * Based on MEL SPEC v0.3.3 Section 4 */ import type { Diagnostic } from "../diagnostics/types.js"; import type { Token } from "../lexer/tokens.js"; import { type ProgramNode } from "./ast.js"; /** * Result of parsing */ export interface ParseResult { program: ProgramNode | null; diagnostics: Diagnostic[]; } /** * Parser for MEL source code */ export declare class Parser { private tokens; private current; private diagnostics; constructor(tokens: Token[]); /** * Parse tokens into an AST */ parse(): ParseResult; private parseProgram; private parseImport; private parseDomain; /** * v0.3.3: Parse type declaration * Syntax: type Name = TypeExpr */ private parseTypeDecl; private parseDomainMember; private parseState; private parseStateField; private parseContext; private parseContextField; private parseComputed; private parseAction; private parseFlowDecl; private parseParam; private parseGuardedStmt; private parseFlowStmt; /** * Skip tokens until we reach a recovery point (closing brace, guard keyword, or EOF). */ private skipToRecoveryPoint; private parseWhenStmt; private parseOnceStmt; private parseOnceIntentStmt; private parseInnerStmt; private parseIncludeStmt; private parsePatchStmt; private parseEffectStmt; private parseEffectArg; /** * v0.3.2: Parse fail statement * FailStmt ::= 'fail' StringLiteral ('with' Expr)? */ private parseFailStmt; /** * v0.3.2: Parse stop statement * StopStmt ::= 'stop' StringLiteral */ private parseStopStmt; private parseTypeExpr; private parseBaseType; /** * v0.3.3: Parse object type * Syntax: { field: Type, field?: Type, ... } */ private parseObjectType; private parseExpression; private parseTernary; private parsePrimary; private parseFunctionCall; private parsePostfix; private parseObjectLiteral; private parseArrayLiteral; private parsePath; private isUnaryContext; private peek; private peekNext; private peekAt; private previous; private isAtEnd; private advance; private check; private isOnceIntentContext; private isFlowDeclContext; private isContextDeclContext; private isIncludeContext; private match; private consume; private parseAnnotationList; private parseAnnotation; private reportUnsupportedAnnotations; private error; private errorAtCurrent; private errorAtToken; } /** * Parse tokens into an AST */ export declare function parse(tokens: Token[]): ParseResult;