Parser API Reference
Section titled “Parser API Reference”Overview
Section titled “Overview”The @rcs-lang/parser package provides a high-performance ANTLR4-based parser for RCL with TypeScript AST generation.
Core Classes
Section titled “Core Classes”RCLParser
Section titled “RCLParser”Main parser class for converting RCL source to AST.
class RCLParser { constructor(options?: ParsingOptions)
// Parsing methods parse(source: string, fileName?: string): Promise<ParseResult> parseFile(filePath: string): Promise<ParseResult> parseIncremental( source: string, fileName: string, changes: TextChange[] ): Promise<ParseResult>
// Configuration setOptions(options: Partial<ParsingOptions>): void getOptions(): ParsingOptions
// Cache management clearCache(): void dispose(): void}Key Interfaces
Section titled “Key Interfaces”ParsingOptions
Section titled “ParsingOptions”interface ParsingOptions { // Error handling maxErrors?: number continueOnError?: boolean
// Performance enableCaching?: boolean incrementalMode?: boolean
// Features includeComments?: boolean preserveWhitespace?: boolean
// Validation strictMode?: boolean allowExperimentalFeatures?: boolean}ParseResult
Section titled “ParseResult”interface ParseResult { success: boolean data?: RclFile diagnostics: Diagnostic[] sourceMap?: SourceMap performance?: ParseMetrics}Visitor Pattern
Section titled “Visitor Pattern”import { RCLBaseVisitor } from '@rcs-lang/parser';
class CustomVisitor extends RCLBaseVisitor<void> { visitFlowDefinition(ctx: FlowDefinitionContext): void { console.log('Found flow:', ctx.IDENTIFIER().getText()); this.visitChildren(ctx); }}
// Usageconst visitor = new CustomVisitor();visitor.visit(parseTree);Listener Pattern
Section titled “Listener Pattern”import { RCLBaseListener, ParseTreeWalker } from '@rcs-lang/parser';
class CustomListener extends RCLBaseListener { enterMessageDefinition(ctx: MessageDefinitionContext): void { console.log('Entering message:', ctx.IDENTIFIER().getText()); }}
// Usageconst listener = new CustomListener();const walker = new ParseTreeWalker();walker.walk(listener, parseTree);Usage Examples
Section titled “Usage Examples”Basic Parsing
Section titled “Basic Parsing”import { RCLParser } from '@rcs-lang/parser';
const parser = new RCLParser();const result = await parser.parse(rclSource, 'example.rcl');
if (result.success) { const ast = result.data; console.log('Agent:', ast.agent.name);} else { result.diagnostics.forEach(diagnostic => { console.error(`Error: ${diagnostic.message}`); });}Incremental Parsing
Section titled “Incremental Parsing”const parser = new RCLParser({ incrementalMode: true });
// Initial parseconst result1 = await parser.parse(source, 'file.rcl');
// Update with changesconst result2 = await parser.parseIncremental( updatedSource, 'file.rcl', textChanges);See the main README for comprehensive examples and build requirements.