grunt-peg.js 981 B

123456789101112131415161718192021222324252627
  1. module.exports = function(grunt) {
  2. var PEG = require('pegjs');
  3. /**
  4. Full config looks like this:
  5. pegjs: {
  6. my_parser: {
  7. src: 'parser.pegjs', // REQUIRED
  8. dest: 'parser.js', // REQUIRED
  9. trackLineAndColumn: true, // optional (default: false)
  10. cache: true, // optional (default: false)
  11. export_var: 'smalltalk.parser' // optional (default: module.exports)
  12. }
  13. },
  14. */
  15. grunt.registerMultiTask('peg', 'Generate JavaScript parser from PEG.js grammar description', function() {
  16. var pegOptions = {
  17. cache: this.data.cache || false,
  18. trackLineAndColumn: this.data.trackLineAndColumn || false
  19. };
  20. var export_var = this.data.export_var || 'module.exports';
  21. var parser = PEG.buildParser(grunt.file.read(this.data.src), pegOptions);
  22. var content = export_var + ' = ' + parser.toSource() + ';\n';
  23. grunt.file.write(this.data.dest, content);
  24. });
  25. };