Import other PEG files into a PEG.js grammar.
npm install pegjs-import
Import other PEG files into a PEG.js grammar.
```
npm install --save pegjs pegjs-import
pegjs-import provides a single function that replaces `peg.buildParser`:
`javascript
var pegimport = require('pegjs-import');
var parser = pegimport.buildParser('path/to/grammar.peg', options);
parser.parse('foo');
`
Instead of taking a string, it takes a filename.
Inside a PEG.js grammar, you can now make use of the `@import` directive, like so:
`
/ NOTE: this grammar won't work in stock PEG.js anymore! /
{
this.notes = "Initializers work as you expect them to and are imported.";
}
@import "path/to/grammar"
start
= grammar
`
When you `@import` another grammar, that grammar's topmost rule becomes accessible in the context of the current grammar under one of two possible rule names:
- A name you provide explicitly through the use of the optional "as" parameter
- The basename of the file, corrected to be a valid Javascript identifier (so if the file were called /foo/bar/my-grammar.peg, the rule name would be my_grammar).
* You cannot supply `options.allowedStartRules`` anymore. The only allowed start rule is always the first rule in the grammar.
* You cannot supply a grammar as a string, you must give a filename. There are libraries that provide virtual and in-memory filesystems if you want to work on grammars as strings.
- pegjs-import is only tested on NodeJS, though the parsers work everywhere they usually do.
- Circular dependencies explicitly throw an exception. Don't use them.
- Please don't do funny things with rule names, pegjs-import will probably explode. I will not be held responsible for exploding grammars.
- Fixed a bug in path comparison that broke Windows.
- parse-imports now handles /index.peg correctly.
- Resolve a glitch in external rule name resolution.
- Don't require "as" identifiers to have two characters in them
- Make sure we treat internal vs. external rule_refs correctly
- Fixed bug in options parsing.
- Changed syntax to more closely correspond to that of PEG.js.