import { TokenStream } from '../classes/TokenStream'; import { Token } from '../classes/Lexer'; import { SubexpressionExpression, CodePosition, Statement } from '../types/Ast.type'; export interface SubexpressionParserContext { /** * Parse a statement from the stream */ parseStatement: (stream: TokenStream) => Statement | null; /** * Create code position from tokens */ createCodePosition: (startToken: Token, endToken: Token) => CodePosition; } export declare class SubexpressionParser { /** * Parse a subexpression from TokenStream * Expects stream to be positioned at the '$(' token * Syntax: $( ... ) * * @param stream - TokenStream positioned at the '$(' token * @param context - Context with helper methods * @returns Parsed SubexpressionExpression */ static parse(stream: TokenStream, context: SubexpressionParserContext): SubexpressionExpression; /** * Check if the current token is the start of a subexpression * Subexpressions must start with SUBEXPRESSION_OPEN ($() * * @param stream - TokenStream to check * @returns true if current token is SUBEXPRESSION_OPEN */ static isSubexpression(stream: TokenStream): boolean; }