Giter Site home page Giter Site logo

bovid / bovid.js Goto Github PK

View Code? Open in Web Editor NEW

This project forked from zaach/jison

16.0 3.0 3.0 2.86 MB

Bison in JavaScript

Home Page: http://bovid.github.io/Bovid.js

JavaScript 81.52% Ruby 0.40% CSS 0.98% Makefile 0.11% HTML 9.56% Lex 2.90% Yacc 4.53%

bovid.js's Introduction

Bovid.js (a fork of Jison for performance, Jison is mentioned below until Bovid.js gets its first release)

build status

An API for creating parsers in JavaScript

Bovid.js generates bottom-up parsers in JavaScript. Its API is similar to Bison's, hence the name. It supports many of Bison's major features, plus some of its own. If you are new to parser generators such as Bison, and Context-free Grammars in general, a good introduction is found in the Bison manual. If you already know Bison, Jison should be easy to pickup.

Briefly, Bovid.js takes a JSON encoded grammar or Bison style grammar and outputs a JavaScript file capable of parsing the language described by that grammar. You can then use the generated script to parse inputs and accept, reject, or perform actions based on the input.

Installation

Jison can be installed for Node using npm

Using npm:

npm install jison -g

Usage from the command line

Clone the github repository for examples:

git clone git://github.com/zaach/jison.git
cd jison/examples

Now you're ready to generate some parsers:

jison calculator.jison

This will generate calculator.js in your current working directory. This file can be used to parse an input file, like so:

echo "2^32 / 1024" > testcalc
node calculator.js testcalc

This will print out 4194304.

Full cli option list:

Usage: jison [file] [lexfile] [options]

file        file containing a grammar
lexfile     file containing a lexical grammar

Options:
   -j, --json                    force jison to expect a grammar in JSON format
   -o FILE, --outfile FILE       Filename and base module name of the generated parser
   -t, --debug                   Debug mode
   -m TYPE, --module-type TYPE   The type of module to generate (commonjs, amd, js)
   -p TYPE, --parser-type TYPE   The type of algorithm to use for the parser (lr0, slr, lalr, lr)
   -V, --version                 print version and exit

Usage from a CommonJS module

You can generate parsers programatically from JavaScript as well. Assuming Jison is in your commonjs environment's load path:

// mygenerator.js
var Parser = require("jison").Parser;

// a grammar in JSON
var grammar = {
    "lex": {
        "rules": [
           ["\\s+", "/* skip whitespace */"],
           ["[a-f0-9]+", "return 'HEX';"]
        ]
    },

    "bnf": {
        "hex_strings" :[ "hex_strings HEX",
                         "HEX" ]
    }
};

// `grammar` can also be a string that uses jison's grammar format
var parser = new Parser(grammar);

// generate source, ready to be written to disk
var parserSource = parser.generate();

// you can also use the parser directly from memory

// returns true
parser.parse("adfe34bc e82a");

// throws lexical error
parser.parse("adfe34bc zxg");

More Documentation

For more information on creating grammars and using the generated parsers, read the documentation.

How to contribute

Fork, make your changes, run tests and/or add tests then send a pull request.

Run tests with:

make test

Projects using Jison

View them on the wiki, or add your own.

Contributors

Githubbers

Special thanks to Jarred Ligatti, Manuel E. Bermúdez

License

Copyright (c) 2009-2014 Zachary Carter

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

bovid.js's People

Contributors

zaach avatar robertleeplummerjr avatar matthewkastor avatar cdibbs avatar gerhobbelt avatar hyperfocusaurus avatar rubenverborgh avatar abhisheksoni27 avatar joseanpg avatar satyr avatar flip111 avatar knuton avatar edi9999 avatar dahmian avatar fieldkit-zz avatar zealotrunner avatar phillipalexander avatar paulftw avatar redchair123 avatar nelsonjchen avatar micha avatar kanaka avatar jasondavies avatar harthur avatar strathmeyer avatar puffnfresh avatar abadb avatar a-pechenyi avatar shytikov avatar syrnick avatar

Stargazers

Greg "GothAck" Miell avatar Ruslan Iusupov avatar Dmitry Soshnikov avatar 吴子棋 avatar Gabriel Birke avatar Brad Jones avatar Clayton Mellina avatar Yarek T avatar Won-Kyu Park avatar Michael Williams avatar KimSia Sim avatar Marc Laporte avatar Adrien Carbonne avatar Zachary Gramana avatar  avatar Janus Tøndering avatar

Watchers

Brad Jones avatar Alvin avatar James Cloos avatar

bovid.js's Issues

file format utf16 ??

Hi i noticed that in some of the new files like php.js there is a UTF-16, little endian Byte Order Mark 0xFFFE present. My editor can not handle this BOM and i never saw this used before, perhaps utf8 will work fine (if you need special characters)

hello world grammar mistake?

I have my test file like this

//option namespace:someNamespace
//option class:someClass
//option fileName:out.php
//option extends:someExtend
//option parserValue:someParser


//Lexical Grammar
%lex

HELLO            hello
WORLD            world


//Create tokens from lexical analysis
%%
HELLO {
  return 'hi';
}

WORLD {
  return 'planet';
}

/lex

%%

test
  : HELLO WORLD

When i run jison it returns:

Executing: jison test.jison
Failed: 8

Is this a mistake of the grammar or another thing that is going wrong entirely??

hello world

My test file doesn't work. Steps taken:

  1. npm install jison -g as described in https://github.com/robertleeplummerjr/jison/blob/master/README.md
  2. replaced files with zip file from master (because i think node download the original version from zaach/jison
  3. Create test file
//option namespace:someNamespace
//option class:someClass
//option fileName:out.php
//option extends:someExtend
//option parserValue:someParser


//Lexical Grammar
%lex

HELLO            hello
WORLD            world


//Create tokens from lexical analysis
%%
HELLO {
  return 'hi';
}

WORLD {
  return 'planet';
}

/lex

%%

test
  : HELLO WORLD
  1. run node D:\dev\http\testProject>node C:\Users\flip111\AppData\Roaming\npm\node_modules\jison\ports\php\php.js test.jison
    output:
Executing: jison test.jison

events.js:72
        throw er; // Unhandled 'error' event
              ^
Error: spawn ENOENT
    at errnoException (child_process.js:998:11)
    at Process.ChildProcess._handle.onexit (child_process.js:789:34)

node version: v0.10.28
npm version: 1.4.9

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.