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 with the intention of creating an easy-to-use academic environment for people interested in how parse table generation is done general 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 ECMAScript so it can be executed in many different ways: as platform-independent, browser-based JavaScript embedded on a Website, as a Windows Script Host Application, as a compiled JScript.NET executable, as a Mozilla/Rhino or Mozilla/Spidermonkey interpreted application, or a V8 shell script on Windows, *nix, Linux and Mac OSX. However, for productive execution, it is recommended to use the command-line versions. 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 behavior, some knowledge of context-free grammars, bottom-up parsing techniques and compiler construction theory, in general, is assumed.
It is really amazing, where JS/CC can be invoked from:




JS/CC is capable to compile and run a stand-alone parser for any grammar specification with embedded, semantic code segments entirely in a web browser like Mozilla Firefox, Konqueror or Microsoft® Internet Explorer.
So feel free and check out the online live installation of JS/CC now!
JS/CC is currently provided in a tarball jscc-0.30.tar.gz, a zipped package jscc-0.30.zip and in a Windows setup package jscc-0.30.exe. All three packages come with complete source code, documentation and example code.
To get the latest releases, sources, news and updates on JS/CC, please visit the JS/CC project page on SourceForge.net!
Please feel free to send any enhancement requests, bug reports or recommendations to jscc[-AT-]jmksf.com.
Thank you!
JS/CC is a non-commercial project of Jan Max Meyer (J.M.K S.F. Software Technologies), and has been released under the terms and conditions of the Artistic License to the public.
Thanks a lot to Louis P. Santillan (lpsantil) for his contributions on JS/CC.
A simple four-function expression calculator is defined with the following few lines of augmented grammar definition to be fed to JS/CC.
/~ --- Token definitions --- ~/
/~ Characters to be ignored ~/
! ' |\t' ;
/~ Non-associative tokens ~/
'\('
'\)'
'[0-9]+' INT [* %match = parseInt( %match ); *]
'[0-9]+\.[0-9]*|[0-9]*\.[0-9]+' FLOAT [* %match = parseFloat( %match ); *]
;
/~ Left-associative tokens, lowest precedence ~/
< '\+'
'\-';
/~ Left-associative tokens, highest precedence ~/
< '\*'
'/';
##
/~ --- Grammar specification --- ~/
p: e [* alert( %1 ); *]
;
e: e '+' e [* %% = %1 + %3; *]
| e '-' e [* %% = %1 - %3; *]
| e '*' e [* %% = %1 * %3; *]
| e '/' e [* %% = %1 / %3; *]
| '-' e &'*' [* %% = %2 * -1; *]
| '(' e ')' [* %% = %2; *]
| INT
| FLOAT
;
JS/CC has already been used in the following open source projects: