<commit_before>Bullwinkle: a runtime parser for BNF grammars
=============================================

[![Travis](https://img.shields.io/travis/sylvainhalle/Bullwinkle.svg?style=flat-square)](https://travis-ci.org/sylvainhalle/Bullwinkle)
[![Coverity Scan Build Status](https://img.shields.io/coverity/scan/15155.svg?style=flat-square)](https://scan.coverity.com/projects/sylvainhalle-bullwinkle)
[![Coverage](https://sonarcloud.io/api/project_badges/measure?project=sylvainhalle_bullwinkle&metric=coverage)](https://sonarcloud.io/dashboard?id=sylvainhalle_bullwinkle)
<img src="http://leduotang.ca/Bullwinkle.svg" height="20" alt="Downloads"/>

Bullwinkle is a parser for LL(k) languages that operates through recursive descent
with backtracking.

[Parser generators](http://en.wikipedia.org/wiki/Parser_generator) such as
ANTLR, Yacc or Bison take a grammar as input and produce code for a parser
specific to that grammar, which must then be compiled to be used. On the
contrary, Bullwinkle reads the definition of the grammar (expressed in
[Backus-Naur Form](http://en.wikipedia.org/wiki/Backus-Naur_form) (BNF)) at
*runtime* and can parse strings on the spot.

Other unique features of Bullwinkle include:

- Instances of the Bullwinkle parser can be safely serialized with
  [Azrael](https://github.com/sylvainhalle/Azrael).
- [Partial parsing](#partial), a special mode where input strings can
  contain non-terminal symbols from the grammar. A string can hence be
  partially verified for syntactical correctness.
- [Object builders](#builder), a class of objects that makes it easy to
  traverse a parse tree and build an output object recursively.

Table of Contents                                                    {#toc}
-----------------
<commit_msg>Dummy commit to force rebuild<commit_after>Bullwinkle: a runtime parser for BNF grammars
=============================================

[![Travis](https://img.shields.io/travis/sylvainhalle/Bullwinkle.svg?style=flat-square)](https://app.travis-ci.com/github/sylvainhalle/Bullwinkle)
[![Coverity Scan Build Status](https://img.shields.io/coverity/scan/15155.svg?style=flat-square)](https://scan.coverity.com/projects/sylvainhalle-bullwinkle)
[![Coverage](https://sonarcloud.io/api/project_badges/measure?project=sylvainhalle_bullwinkle&metric=coverage)](https://sonarcloud.io/dashboard?id=sylvainhalle_bullwinkle)
<img src="http://leduotang.ca/Bullwinkle.svg" height="20" alt="Downloads"/>

Bullwinkle is a parser for LL(k) languages that operates through recursive descent
with backtracking.

[Parser generators](http://en.wikipedia.org/wiki/Parser_generator) such as
ANTLR, Yacc or Bison take a grammar as input and produce code for a parser
specific to that grammar, which must then be compiled to be used. On the
contrary, Bullwinkle reads the definition of the grammar (expressed in
[Backus-Naur Form](http://en.wikipedia.org/wiki/Backus-Naur_form) (BNF)) at
*runtime* and can parse strings on the spot.

Other unique features of Bullwinkle include:

- Instances of the Bullwinkle parser can be safely serialized with
  [Azrael](https://github.com/sylvainhalle/Azrael).
- [Partial parsing](#partial), a special mode where input strings can
  contain non-terminal symbols from the grammar. A string can hence be
  partially verified for syntactical correctness.
- [Object builders](#builder), a class of objects that makes it easy to
  traverse a parse tree and build an output object recursively.

Table of Contents                                                    {#toc}
-----------------

{'fraction_non_alphanumeric': 0.13520336605890604, 'fraction_numerical': 0.003927068723702665, 'mean_word_length': 4.563182527301092, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 5, 'https://': 14, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 6, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6658886', 'n_tokens_mistral': 1093, 'n_tokens_neox': 1045, 'n_words': 310}