Skip to content

schmich/jisonify

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

33 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Jisonify

A Browserify transform for Jison parsers.

Mix Jison parsers into your JS files and Browserify projects without needing additional build steps.

NPM version Build Status Dependency Status

Installation

npm install jisonify

Usage

browserify -t jisonify main.js > bundle.js

Example

// calc.jison
%lex
%%

\s+                   /* Skip whitespace. */
[0-9]+                return 'NUMBER'
"-"                   return '-'
"+"                   return '+'
<<EOF>>               return 'EOF'
.                     return 'INVALID'

/lex

%left '+' '-'
%start expressions
%%

expressions
  : expr EOF        { return $1; }
  ;

expr
  : expr '+' expr   { $$ = $1 + $3; }
  | expr '-' expr   { $$ = $1 - $3; }
  | NUMBER          { $$ = Number(yytext); }
  ;
// main.js
var parser = require('./calc.jison').parser;

exports = run = function() {
  var input = document.getElementById('input');
  var output = document.getElementById('output');
  output.innerText = parser.parse(input.value);
};
browserify -t jisonify main.js > bundle.js
<!-- calc.html -->
<!DOCTYPE html>
<html>
  <head>
    <script src="bundle.js"></script>
  </head>
  <body>
    <form onsubmit="run(); return false;">
      <input type="text" id="input" value="50 + 2 - 10" />
      <input type="submit" />
      Result: <span id="output">&ndash;</span>
    </form>
  </body>
</html>

Programmatic example

var browserify = require('browserify');
var jisonify = require('jisonify');

var b = browserify();
b.add('./main.js');
b.transform(jisonify);
b.bundle(function(err, src) {
  // ...
});

License

Copyright © 2014 Chris Schmich
MIT License, See LICENSE for details.