This project is a port of JS/CC to nodejs,
JS/CC is the first available parser development system for JavaScript and ECMAScript-derivates. It has been developed, both, with the intention of building a productive compiler development system and creating an easy-to-use an academic environment for people interested in how parse table generation is done generaly in bottom-up parsing.
The platform-independent software unions both: A regular expression-based lexical analyzer generator matching individual tokens from the input character stream and a LALR(1) parser generator, computing the parse tables for a given context-free grammar specification and building a stand-alone, working parser. The context-free grammar fed to JS/CC is defined in a Backus-Naur-Form-based meta language, and allows the insertion of individual semantic code to be evaluated on a rule's reduction.
JS/CC itself has been entirely written in JavaScript. These versions are capable of assembling a complete compiler from a JS/CC parser specification, which is then stored to a .js JavaScript source file.
To use JS/CC and for understanding its internals and behaviors, some knowledge of context-free grammars, bottom-up parsing techniques and compiler construction theory, in general, is assumed.
For all documentation read the documentation file in doc/
node jscc.js [options] filename
-h --help Print this usage help
-i --version Print version and copyright
-o --output <file> Save output source to <file>
-p --prefix <prefix> Use <prefix> as sequence pre-fixing methods and variables
-t --template <file> Use template file <file> as parser template (by defalut driver_node.js_ located in jscc.js folder)
-v --verbose Run in verbose mode
-w --warnings Print warnings
-c --compress Compress output source using PACKER BASE62
-s --shrink Shrink variables of output source using PACKER
-cs --compress-shrink Shrink variables of output source and Compress output source using PACKER BASE62
-m --minimize Minimize output source using PACKER
For sample grammar see par/ folder.
You will find:
- dragon.par : Port of my own language to javascript (port in progress...)
- php.par : Grammar from phype project (port of php in progress...)
- ruby.par : Grammar from phype project (port of ruby in progress)
- calc.par : Calculator grammar from JS/CC sample
- xpl.par : Grammar for eXample Programming Language from JS/CC