krl-parser
![build status](https://secure.travis-ci.org/Picolab/node-krl-parser.svg)
Parse KRL source code into an AST
Usage
var parser = require('krl-parser');
var src = ...
var ast = parser(src);
AST Specification
The specification is found in spec.md
API
ast = parser(src[, options])
src
- your krl source code stringoptions.filename
- If provided, it will be used on parsing errors so the user know what file failed to parse.
This function will throw errors when it can't parse. When applicable, the Error object may have a where
property. i.e.
var src = 'function(a, b] { a + b }';
try{
ast = parser(src, {filename: 'bad-function.krl'});
}catch(err){
console.log(err.where);
}
{ filename: 'bad-function.krl',
line: 1,
col: 14,
excerpt: 'function(a, b] { a + b }\n ^' }
Developing
The parser is built using nearley. It uses the Earley parser algorithm.
The KRL grammar is defined here: src/grammar.ne
When developing run this:
$ npm start
It will watch for file changes, rebuild the grammar and run tests.
To rebuild and run tests once, run this:
$ npm test
Sometimes you may unwittingly introduce an ambiguity into the grammar. Run this script to help you find it:
$ node tests/ambiguityFinder.js
It will generate and try to parse random KRL programs (using tests/unparse.js). When it finds an ambiguity it will stop and diff the outputs to help you spot the ambiguity.
License
MIT