node package manager
Easy collaboration. Discover, share, and reuse code in your team. Create a free org »

krl-parser

krl-parser

build status windows build status

Parse KRL source code into an AST

Usage

var parser = require('krl-parser');
 
var src = ...//somehow get your krl string
 
var ast = parser(src);

AST Specification

The specification is found in spec.md

API

ast = parser(src[, options])

  • src - your krl source code string
  • options.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