https://github.com/dvberkel/grunt-peg
a npm module that registers a grunt multi task that generates parsers from peg grammars
https://github.com/dvberkel/grunt-peg
Last synced: 5 months ago
JSON representation
a npm module that registers a grunt multi task that generates parsers from peg grammars
- Host: GitHub
- URL: https://github.com/dvberkel/grunt-peg
- Owner: dvberkel
- License: mit
- Created: 2012-11-18T20:00:29.000Z (over 12 years ago)
- Default Branch: master
- Last Pushed: 2017-02-27T07:09:29.000Z (over 8 years ago)
- Last Synced: 2024-12-28T12:02:48.172Z (6 months ago)
- Language: JavaScript
- Size: 65.4 KB
- Stars: 15
- Watchers: 3
- Forks: 10
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGES.md
- License: LICENSE-MIT
Awesome Lists containing this project
README
# grunt-peg [](https://travis-ci.org/dvberkel/grunt-peg) [](https://badge.fury.io/js/grunt-peg)
> A grunt multi task that generates parsers from PEG grammars.
## Getting Started
This plugin requires Grunt `>=0.4.0`If you haven't used [Grunt][] before, be sure to check out the
[Getting Started][] guide, as it explains how to create a
[Gruntfile][] as well as install and use Grunt plugins. Once you're
familiar with that process, you may install this plugin with this
command:```shell
npm install grunt-peg --save-dev
```One the plugin has been installed, it may be enabled inside your
Gruntfile with this line of JavaScript:```js
grunt.loadNpmTasks('grunt-peg');
```## The "peg" task
_Run this task with the `grunt peg` command._Task targets, files and options may be specified according to the grunt [Configuring tasks](http://gruntjs.com/configuring-tasks) guide.
### Options
Any specified option will be passed through directly to [PEG.js][], thus you can specify any option that PEG.js supports. See the [PEG.js documentation][] for a list of supported options.
[PEG.js]: http://pegjs.majda.cz/
[PEG.js documentation]: http://pegjs.majda.cz/documentationAn additional option is supported:
#### exportVar
Type: `String` | `function`
Default value: 'module.exports'The variable to which the generated parser will be assigned in the output file.
If the `exportVar` is of type `function`, the function needs to return
the variable as a `String`. The function gets passed the `src`
variable to base the variable off.### Usage Examples
#### Default Options
In this example a [PEG][] grammar as described in the file
`grammar/example.peg` is used to generate parser
`grammar/example.js`. The default export variable is used,
i.e. `module.exports`.```js
grunt.initConfig({
peg: {
example: {
src: "grammar/example.peg",
dest: "grammar/example.js"
}
}
})
```#### Custom Options
In this example a [PEG][] grammar as described in the file
`grammar/example.peg` is used to generate parser
`grammar/example.js`, the export variable being `Example.parser`.```js
grunt.initConfig({
peg: {
example : {
src: "grammar/example.peg",
dest: "grammar/example.js",
options: { exportVar: "Example.parser" }
}
}
})
```#### Dynamic `exportVar`
In this example a [PEG][] grammar as described in the file
`grammar/example.peg` is used to generate parser
`grammar/example.js`, the export variable being defined via a function
and will result in `example`.```js
grunt.initConfig({
peg: {
example : {
src: "grammar/example.peg",
dest: "grammar/example.js",
options: { exportVar: function(src){ return path.basename(src[0], '.peg'); } }
}
}
})
```#### Passing Options to PEG
In this example a [PEG][] grammar as described in the file
`grammar/example.peg` is used to generate parser
`grammar/example.js`, the export variable being `Example.parser`.
Both the task-specific `trackLineAndColumn` and target-specific
`cache` options will be passed through to PEG.js.```js
grunt.initConfig({
peg: {
options: { trackLineAndColumn: true },
example : {
src: "grammar/example.peg",
dest: "grammar/example.js",
options: {
exportVar: "Example.parser",
cache: true
}
}
}
})
```#### Wrap in an Angular Factory
It is also possible to wrap the generated parser in an Angular
factory.```js
grunt.initConfig({
peg: {
options: { trackLineAndColumn: true },
example : {
src: "grammar/example.peg",
dest: "grammar/example.js",
options: {
angular: {
module: "pegjs",
factory: "exampleParser"
}
}
}
}
})
```#### Custom Wrapper
It is also possible to wrap the generated parser in any code you
want.```js
grunt.initConfig({
peg: {
options: { trackLineAndColumn: true },
example : {
src: "grammar/example.peg",
dest: "grammar/example.js",
options: {
wrapper: function (src, parser) {
return 'define("example", [], function () { return ' + parser + '; });';
}
}
}
}
})
```##### Note on plugins
If you want to pass plugins to PEG.js make sure that the plugin is
installed and referenced by the module name. For example, for the
[pegjs-coffee-plugin][] one should first install the plugin```js
npm install --save-dev pegjs-coffee-plugin
```and then configure the tasks with the module name.
```js
grunt.initConfig({
peg: {
options: { trackLineAndColumn: true },
example : {
src: "grammar/example.peg",
dest: "grammar/example.js",
options: {
plugins: [ "pegjs-coffee-plugin" ]
}
}
}
})
```## PEG.js dependency
As described in [issue #6][#6] sometimes the wrong PEG.js version
is downloaded by npm. The solution for now seems to be to call
`npm cache clear`.## Contributing
In lieu of a formal styleguide, take care to maintain the existing
coding style. Add unit tests for any new or changed
functionality. Lint and test your code using
[Grunt](http://gruntjs.com/).## Release History
* 2016-02-23 v2.0.1 Update `grunt` peer dependency
* 2015-09-11 v2.0.0 Update version of PEG.js to 0.9.0
* 2014-08-02 v1.5.0 Custom wrapper
* 2014-06-09 v1.4.0 Dynamic `exportVar`
* 2014-05-15 v1.3.1 Add license headers to all source files
* 2014-03-20 v1.3.0 Wrap in Angular Factory
* 2014-01-05 v1.2.0 Support plugins
* 2014-01-05 v1.1.0 Support PEG 0.8.0
* 2013-08-21 v1.0.0 Remove support for old-style options
* 2013-07-04 v0.3.0 Adhere to grunt's configuration convention
* 2013-06-02 v0.2.0 Pass options to PEG.js
* 2013-04-23 v0.1.0 Migrated to Grunt ~0.4.x## Contributors
* [welwood08][]
* [mstefaniuk][]
* [bertrandgressier][]
* [kmdavis][]
* [felixhao28][][welwood08]: https://github.com/welwood08
[mstefaniuk]: https://github.com/mstefaniuk
[bertrandgressier]: https://github.com/bertrandgressier
[kmdavis]: https://github.com/kmdavis
[felixhao28]: https://github.com/felixhao28[Grunt]: http://gruntjs.com/
[Getting Started]: http://gruntjs.com/getting-started
[PEG]: https://npmjs.org/package/pegjs
[Gruntfile]: http://gruntjs.com/sample-gruntfile
[#6]: https://github.com/dvberkel/grunt-peg/pull/6
[pegjs-coffee-plugin]: https://github.com/Dignifiedquire/pegjs-coffee-plugin