#!/usr/bin/env node /** * Script to generate the DSL parser from Peggy grammar */ import peggy from 'peggy'; import fs from 'fs'; import path from 'path'; import { fileURLToPath } from 'url'; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const grammarPath = path.join(__dirname, '../src/grammar/dsl.peggy'); const outputPath = path.join(__dirname, '../src/parser/GeneratedParser.js'); console.log('Generating DSL parser from Peggy grammar...'); console.log('Grammar:', grammarPath); console.log('Output:', outputPath); try { // Read the grammar file const grammar = fs.readFileSync(grammarPath, 'utf8'); // Generate the parser const parserSource = peggy.generate(grammar, { format: 'es', output: 'source', grammarSource: 'dsl.peggy' }); // Write the generated parser fs.writeFileSync(outputPath, parserSource); console.log('✅ Parser generated successfully!'); console.log('Generated file:', outputPath); } catch (error) { console.error('❌ Error generating parser:'); console.error(error.message); if (error.format) { console.error('\nFormatted error:'); console.error(error.format([ { source: 'dsl.peggy', text: fs.readFileSync(grammarPath, 'utf8') } ])); } process.exit(1); }