UNPKG

chevrotain

Version:

Chevrotain is a high performance fault Tolerant Javascript parsing DSL for building recursive decent parsers

261 lines 13.9 kB
<!doctype html> <html class="default no-js"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>Chevrotain</title> <meta name="description" content=""> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="assets/css/main.css"> <script src="assets/js/modernizr.js"></script> </head> <body> <header> <div class="tsd-page-toolbar"> <div class="container"> <div class="table-wrap"> <div class="table-cell" id="tsd-search" data-index="assets/js/search.js" data-base="."> <div class="field"> <label for="tsd-search-field" class="tsd-widget search no-caption">Search</label> <input id="tsd-search-field" type="text" /> </div> <ul class="results"> <li class="state loading">Preparing search index...</li> <li class="state failure">The search index is not available</li> </ul> <a href="index.html" class="title">Chevrotain</a> </div> <div class="table-cell" id="tsd-widgets"> <div id="tsd-filter"> <a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a> <div class="tsd-filter-group"> <div class="tsd-select" id="tsd-filter-visibility"> <span class="tsd-select-label">All</span> <ul class="tsd-select-list"> <li data-value="public">Public</li> <li data-value="protected">Public/Protected</li> <li data-value="private" class="selected">All</li> </ul> </div> <input type="checkbox" id="tsd-filter-inherited" checked /> <label class="tsd-widget" for="tsd-filter-inherited">Inherited</label> <input type="checkbox" id="tsd-filter-only-exported" /> <label class="tsd-widget" for="tsd-filter-only-exported">Only exported</label> </div> </div> <a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a> </div> </div> </div> </div> <div class="tsd-page-title"> <div class="container"> <ul class="tsd-breadcrumb"> <li> <a href="globals.html">Globals</a> </li> </ul> <h1> Chevrotain</h1> </div> </div> </header> <div class="container container-main"> <div class="row"> <div class="col-8 col-content"> <div class="tsd-panel tsd-typography"> <p><a href="http://badge.fury.io/js/chevrotain"><img src="https://badge.fury.io/js/chevrotain.svg" alt="npm version"></a> <a href="https://travis-ci.org/SAP/chevrotain"><img src="https://travis-ci.org/SAP/chevrotain.svg?branch=master" alt="Build Status"></a> <a href="https://coveralls.io/r/SAP/chevrotain?branch=master"><img src="https://coveralls.io/repos/SAP/chevrotain/badge.svg?branch=master" alt="Coverage Status"></a> <a href="https://david-dm.org/SAP/chevrotain"><img src="https://img.shields.io/david/SAP/chevrotain.svg" alt="Dependency status"></a> <a href="https://david-dm.org/SAP/chevrotain#info=devDependencies"><img src="https://img.shields.io/david/dev/SAP/chevrotain.svg" alt="devDependency Status"></a></p> <h1 id="chevrotain">Chevrotain</h1> <p>Chevrotain is a <strong>Javascript parsing DSL</strong> for building fault tolerant recursive decent parsers.</p> <p>Chevrotain is <strong>NOT</strong> a parser generator. it solves the same kind of problems as a parser generator, just without any code generation phase.</p> <h2 id="-try-it-online-http-sap-github-io-chevrotain-playground-"><a href="http://sap.github.io/chevrotain/playground/">---&gt; Try it online &lt;---</a></h2> <h2 id="features">Features</h2> <ul> <li><p><strong>Lexer engine</strong> based on RexExps.</p> <ul> <li>Supports Token location tracking.</li> <li>Supports Token skipping (whitespace/comments/...)</li> <li>Allows prioritising shorter matches (Keywords vs Identifiers).</li> <li><strong>No code generation</strong> The Lexer does not require any code generation phase. </li> </ul> </li> <li><p><strong>Parsing DSL</strong> for creating the parsing rules.</p> <ul> <li><strong>No code generation</strong><ul> <li>The DSL is just javascript not an external language, what is written is what will be run.</li> <li>Speeds up development, </li> <li>Makes debugging trivial. </li> <li>Allows great flexibility for inserting custom Parser actions.</li> </ul> </li> <li><strong>Error Reporting</strong> with full location information. </li> <li>Strong <strong>Error Recovery/fault tolerance</strong> capabilities based on Antlr3&#39;s algorithms.</li> <li>Automatic lookahead calculation for LL(1) grammars.</li> <li>Supports Custom lookahead logic for LL(k) grammars.</li> <li>Backtracking support. </li> </ul> </li> <li><p><a href="http://jsperf.com/json-parsers-comparison/20"><strong>High performance.</strong></a></p> </li> <li><p><strong>Grammar Reflection/Introspection</strong></p> <ul> <li>A Parser&#39;s grammar&#39;s structure is known and <strong>exposed</strong> at runtime.</li> <li>Can be used to implement advanced features such as dynamically generated syntax diagrams or Syntactic error recovery.</li> </ul> </li> <li><p>Well tested with <strong>~100% code coverage</strong>, Unit &amp; Integration tests</p> </li> </ul> <h2 id="installation">Installation</h2> <ul> <li><strong>npm</strong>: <code>npm install chevrotain</code></li> <li><strong>Bower</strong> <code>bower install chevrotain</code></li> <li>or download directly from <a href="https://github.com/SAP/chevrotain/releases/latest">github releases</a>:<ul> <li>the &#39;chevrotain-binaries-...&#39; files contain the compiled javascript code.</li> </ul> </li> </ul> <h2 id="getting-started">Getting Started</h2> <ul> <li><p><strong>Online tutorial</strong></p> <ul> <li><a href="http://sap.github.io/chevrotain/playground/?example=tutorial%20lexer">step #1 Building a lexer</a></li> <li><a href="http://sap.github.io/chevrotain/playground/?example=tutorial%20grammar">step #2 Implementing a grammar</a></li> <li><a href="http://sap.github.io/chevrotain/playground/?example=tutorial%20actions">step #3 Adding actions to the grammar</a></li> </ul> </li> <li><p><strong><a href="https://github.com/SAP/chevrotain/blob/master/examples">Examples</a></strong></p> </li> </ul> <h2 id="documentation">Documentation</h2> <ul> <li><p><a href="http://sap.github.io/chevrotain/documentation">Latest released version&#39;s HTML docs</a></p> <ul> <li><a href="http://sap.github.io/chevrotain/documentation/0_5_13/classes/chevrotain.parser.html#at_least_one">Parsing DSL</a></li> </ul> </li> <li><p>Annotated source code (dev version):</p> <ul> <li><a href="https://github.com/SAP/chevrotain/blob/master/src/scan/tokens_public.ts">tokens_public.ts</a></li> <li><a href="https://github.com/SAP/chevrotain/blob/master/src/scan/lexer_public.ts">lexer_public.ts</a></li> <li><a href="https://github.com/SAP/chevrotain/blob/master/src/parse/parser_public.ts">parser_public.ts</a></li> <li><a href="https://github.com/SAP/chevrotain/blob/master/src/parse/grammar/gast.ts">gast_public.ts</a></li> </ul> </li> <li><p>The aggregated Typescript definitions :</p> <ul> <li><a href="https://github.com/SAP/chevrotain/blob/master/release/chevrotain.d.ts">chevrotain.d.ts</a> (latest version)</li> </ul> </li> </ul> <h2 id="dependencies">Dependencies</h2> <p>Only a <strong>single</strong> dependency to <a href="https://lodash.com/">lodash</a>.</p> <h2 id="compatibility">Compatibility</h2> <p>The Generated artifact(chevrotain.js) should run on any modern Javascript ES5.1 runtime. </p> <ul> <li>The CI build runs the tests under <ul> <li>Node.js (0.10 / 0.12 / 4 / 5).</li> <li>latest Chromium</li> <li>latest Firefox</li> </ul> </li> <li>Additionally local testing is done on latest versions of Chrome/Firefox/IE.</li> <li>Uses <a href="https://github.com/umdjs/umd">UMD</a> to work with common module loaders (browser global / require.js / node.js)</li> </ul> </div> </div> <div class="col-4 col-menu menu-sticky-wrap menu-highlight"> <nav class="tsd-navigation primary"> <ul> <li class="globals "> <a href="globals.html"><em>Globals</em></a> </li> <li class=" tsd-kind-module"> <a href="modules/chevrotain.html">chevrotain</a> </li> <li class=" tsd-kind-module tsd-parent-kind-module"> <a href="modules/chevrotain.exceptions.html">chevrotain.exceptions</a> </li> <li class=" tsd-kind-module tsd-parent-kind-module"> <a href="modules/chevrotain.gast.html">chevrotain.gast</a> </li> </ul> </nav> <nav class="tsd-navigation secondary menu-sticky"> <ul class="before-current"> </ul> </nav> </div> </div> </div> <footer class="with-border-bottom"> <div class="container"> <h2>Legend</h2> <div class="tsd-legend-group"> <ul class="tsd-legend"> <li class="tsd-kind-module"><span class="tsd-kind-icon">Module</span></li> <li class="tsd-kind-object-literal"><span class="tsd-kind-icon">Object literal</span></li> <li class="tsd-kind-variable"><span class="tsd-kind-icon">Variable</span></li> <li class="tsd-kind-function"><span class="tsd-kind-icon">Function</span></li> <li class="tsd-kind-function tsd-has-type-parameter"><span class="tsd-kind-icon">Function with type parameter</span></li> <li class="tsd-kind-index-signature"><span class="tsd-kind-icon">Index signature</span></li> <li class="tsd-kind-type-alias"><span class="tsd-kind-icon">Type alias</span></li> </ul> <ul class="tsd-legend"> <li class="tsd-kind-enum"><span class="tsd-kind-icon">Enumeration</span></li> <li class="tsd-kind-enum-member"><span class="tsd-kind-icon">Enumeration member</span></li> <li class="tsd-kind-property tsd-parent-kind-enum"><span class="tsd-kind-icon">Property</span></li> <li class="tsd-kind-method tsd-parent-kind-enum"><span class="tsd-kind-icon">Method</span></li> </ul> <ul class="tsd-legend"> <li class="tsd-kind-interface"><span class="tsd-kind-icon">Interface</span></li> <li class="tsd-kind-interface tsd-has-type-parameter"><span class="tsd-kind-icon">Interface with type parameter</span></li> <li class="tsd-kind-constructor tsd-parent-kind-interface"><span class="tsd-kind-icon">Constructor</span></li> <li class="tsd-kind-property tsd-parent-kind-interface"><span class="tsd-kind-icon">Property</span></li> <li class="tsd-kind-method tsd-parent-kind-interface"><span class="tsd-kind-icon">Method</span></li> <li class="tsd-kind-index-signature tsd-parent-kind-interface"><span class="tsd-kind-icon">Index signature</span></li> </ul> <ul class="tsd-legend"> <li class="tsd-kind-class"><span class="tsd-kind-icon">Class</span></li> <li class="tsd-kind-class tsd-has-type-parameter"><span class="tsd-kind-icon">Class with type parameter</span></li> <li class="tsd-kind-constructor tsd-parent-kind-class"><span class="tsd-kind-icon">Constructor</span></li> <li class="tsd-kind-property tsd-parent-kind-class"><span class="tsd-kind-icon">Property</span></li> <li class="tsd-kind-method tsd-parent-kind-class"><span class="tsd-kind-icon">Method</span></li> <li class="tsd-kind-accessor tsd-parent-kind-class"><span class="tsd-kind-icon">Accessor</span></li> <li class="tsd-kind-index-signature tsd-parent-kind-class"><span class="tsd-kind-icon">Index signature</span></li> </ul> <ul class="tsd-legend"> <li class="tsd-kind-constructor tsd-parent-kind-class tsd-is-inherited"><span class="tsd-kind-icon">Inherited constructor</span></li> <li class="tsd-kind-property tsd-parent-kind-class tsd-is-inherited"><span class="tsd-kind-icon">Inherited property</span></li> <li class="tsd-kind-method tsd-parent-kind-class tsd-is-inherited"><span class="tsd-kind-icon">Inherited method</span></li> <li class="tsd-kind-accessor tsd-parent-kind-class tsd-is-inherited"><span class="tsd-kind-icon">Inherited accessor</span></li> </ul> <ul class="tsd-legend"> <li class="tsd-kind-property tsd-parent-kind-class tsd-is-protected"><span class="tsd-kind-icon">Protected property</span></li> <li class="tsd-kind-method tsd-parent-kind-class tsd-is-protected"><span class="tsd-kind-icon">Protected method</span></li> <li class="tsd-kind-accessor tsd-parent-kind-class tsd-is-protected"><span class="tsd-kind-icon">Protected accessor</span></li> </ul> <ul class="tsd-legend"> <li class="tsd-kind-property tsd-parent-kind-class tsd-is-private"><span class="tsd-kind-icon">Private property</span></li> <li class="tsd-kind-method tsd-parent-kind-class tsd-is-private"><span class="tsd-kind-icon">Private method</span></li> <li class="tsd-kind-accessor tsd-parent-kind-class tsd-is-private"><span class="tsd-kind-icon">Private accessor</span></li> </ul> <ul class="tsd-legend"> <li class="tsd-kind-property tsd-parent-kind-class tsd-is-static"><span class="tsd-kind-icon">Static property</span></li> <li class="tsd-kind-call-signature tsd-parent-kind-class tsd-is-static"><span class="tsd-kind-icon">Static method</span></li> </ul> </div> </div> </footer> <div class="container tsd-generator"> <p>Generated using <a href="http://typedoc.io" target="_blank">TypeDoc</a></p> </div> <div class="overlay"></div> <script src="assets/js/main.js"></script> <script>if (location.protocol == 'file:') document.write('<script src="assets/js/search.js"><' + '/script>');</script> </body> </html>