pegjs-livescript-plugin

0.2.0 • Public • Published

PEG.js LiveScript plugin

build status npm version

PEG.js is a great tool for generating parsers in JavaScript with very concise grammar.
For more in-depth entertainment on packrat parsers and PEGs; here is the wild stuff Packrat Parsing and Parsing Expression Grammars.

LiveScript is a glorious language which compiles to JavaScript. The everything-is-expression style and its sugary syntax makes me a smile every time. 😄

This plugin, following the example of the existing CoffeeScript plugins [Dignifiedquire/pegjs-coffee-plugin, ttilley/pegcoffee], allows writing PEG.js grammar with LiveScript code in initializer, actions and predicates.

There is a little difference in comparison with Coffee plugins. Context this or @ remains unchanged.

Installation

$ npm install pegjs-livescript-plugin

Usage

Node.js

require! { PEG, 'pegjs-livescript-plugin' }
 
grammar = "Start = cs:.* { cs.join '' }"
 
# Build parser with LiveScript plugin
parser = PEG.buildParser grammar, plugins: [pegjs-livescript-plugin]
 
parser.parse 'PEG is fun!'

CLI

$ pegjs --plugin pegjs-livescript-plugin my-grammar.pegls

PEG.js LiveScript

// .pegls - PEG.js LiveScript grammar
{
  my-var = 42
 
  join-chars = (chars) ->
    chars.join ''
}
 
Start
  = cs:.* {
    # my-var := 4711 # SyntaxError: assignment to undeclared "myVar"
    my-var = 4711 # initializer variable `my-var == 42` is shadowed
    join-chars cs
  }

compiles to JavaScript

{
  var myVar, joinChars;
  myVar = 42;
  joinChars = function(chars){
    return myVar + chars.join(''); // myVar === 42
  };
}
 
Start
  = ch:.* {
    var myVar;
    return myVar = 4711, joinChars(cs);
  }

Note: variables defined in one scope (between { }) can not be modified in a different scope not even with :=. Each scope is compiled separately which causes re-declaration of variables. It seems to me that this is actually a smart restriction (consequence) but I'm open to suggestions.

Tests

$ npm test

Todo

  • browser build/test
  • better compile/runtime error report (sourcemap?!)
  • accept compiler options (eg. const: true)

License

The MIT License (MIT)

Package Sidebar

Install

npm i pegjs-livescript-plugin

Weekly Downloads

6

Version

0.2.0

License

MIT

Last publish

Collaborators

  • tgrospic