MOVED TO https://github.com/Picolab/pico-engine/tree/master/packages/krl-parser
Parse KRL source code into an AST
var parser = require('krl-parser');
var src = ...//somehow get your krl string
var ast = parser(src);The specification is found in spec.md
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 ^' }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 startIt will watch for file changes, rebuild the grammar and run tests.
To rebuild and run tests once, run this:
$ npm testSometimes you may unwittingly introduce an ambiguity into the grammar. Run this script to help you find it:
$ node tests/ambiguityFinder.jsIt 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.
MIT