52 lines
1.3 KiB
JavaScript
52 lines
1.3 KiB
JavaScript
|
|
#!/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/ast/grammar/dsl.peggy');
|
||
|
|
const outputPath = path.join(__dirname, '../src/ast/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);
|
||
|
|
}
|