Neophobe Plebeian Mumpsimus
    Share your code. npm Orgs help your team discover, share, and reuse code. Create a free org »

    pegjs-coffee-pluginpublic

    PEGjs Coffee Plugin Build Status

    Plugin for PEG.js to use CoffeeScript in actions. Because all I want for christmas is CoffeeScript.

    Status

    The basic functionality is finished. Please test it and add feature requests and issues here.

    Requirements

    Installation

    Node.js

    $ npm install pegjs-coffee-plugin

    Then in your code call

    PEG = require 'pegjs'
    coffee = require 'pegjs-coffee-plugin'
     

    Browser

    Download the development or the minified version. Now include all needed scripts in your html file like this.

    <script src="peg.js"></script>
    <script src="pegjs-coffee-plugin.js"></script>

    Usage

    Script

    After you have loaded all scripts you can do

    grammar = '' # Define your grammar
    parser = PEG.buildParser grammar, plugins: [coffee]

    Command line

    Just pass the pegjs commandline like this

    $ pegjs --plugin pegjs-coffee-plugin myGrammar.pegcoffee myCompiledGrammar.js

    Added Features

    You now have a save scope shared between all actions and predicates. To begin it is empty, then all declarations from the initializer are added. Afterwards you can add and remove stuff as much as you like. This scope is there even if you don't use the initializer. So you can do something like the following.

    start = a { @result }
    a = "a" { @result = "awesome" }

    And this will correctly return "awesome" if you call parse("a").

    Also all variable assignments in an action are safely scoped to the action. { result = "awesome" } becomes { var result; result = "awesome" }. This gives you the ability to explicitly share variables with other actions via this and the security to just assign variables for local use like you are used to when writing CoffeeScript.

    Syntax changes

    There is no need to call return anymore. You can just do

    start = a:"a" { "Great Stuff" }

    which is the equivalent of

    start = a:"a" { return "Great Stuff"; }

    If you declare variables in your initializer you set them on this.

    {
      @result = ""
    }
    start
      = awesome / rule { @result }
    awesome
      = "awesome" { @result = "awesome" }
    rule
      = "rule" { @result = "rule }

    Development

    Requirements

    Setup

    Clone the repo and run the install

    $ git clone https://github.com/dignifiedquire/pegjs-coffee-plugin.git
    cd pegjs-cofee-plugin
    $ npm install && npm install pegjs

    Building

    $ make build

    Running the tests

    For the Node.js tests run

    $ make test

    and for the browser tests

    $ make test-browser

    and open your browser on localhost:3000.

    Todo

    • more tests
    • make bower package

    install

    npm i pegjs-coffee-plugin

    Downloadsweekly downloads

    6

    version

    0.3.0

    license

    MIT

    homepage

    github.com

    repository

    githubgithub

    last publish

    collaborators

    • avatar