You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
pegjs/CHANGELOG.md

8.7 KiB

0.7.0

Released: April 18, 2012

Big Changes

  • Added ability to pass options to PEG.buildParser.
  • Implemented the trackLineAndColumn option for PEG.buildParser (together with the --track-line-and-column command-line option). It makes the generated parser track line and column during parsing. These are made available inside actions and predicates as line and column variables.
  • Implemented the cache option for PEG.buildParser (together with the --cache command-line option). This option enables/disables the results cache in generated parsers, resulting in dramatic speedup when the cache is disabled (the default now). The cost is breaking the linear parsing time guarantee.
  • The current parse position is visible inside actions and predicates as the offset variable.
  • Exceptions thrown by the parser have offset, expected and found properties containing machine-readable information about the parse failure (based on a patch by Marcin Stefaniuk).
  • Semantic predicates have access to preceding labels. [GH-69]
  • Implemented case-insensitive literal and class matching. [GH-34]
  • Rewrote the code generator — split some computations into separate passes and based it on a proper templating system (Codie).
  • Rewrote variable handling in generated parsers in a stack-like fashion, simplifying the code and making the parsers smaller and faster.
  • Adapted to Node.js 0.6.6+ (no longer supported in older versions).
  • Dropped support for IE < 8.
  • As a result of several optimizations, parsers generated by 0.7.0 are ~6.4 times faster and ~19% smaller than those generated by 0.6.2 (as reported by /tools/impact).

Small Changes

  • Fixed reported error position when part of the input is not consumed. [GH-48]
  • Fixed incorrect disjunction operator in computeErrorPosition (original patch by Wolfgang Kluge).
  • Fixed regexp for detecting command-line options in /bin/pegjs. [GH-51]
  • Generate more efficient code for empty literals (original patch by Wolfgang Kluge).
  • Fixed comment typos (patches by Wolfgang Kluge and Jason Davies). [GH-59]
  • Fixed a typo in JavaScript example grammar. [GH-62]
  • Made copy & paste inclusion of the PEG.js library into another code easier by changing how the library is exported.
  • Improved the copyright comment and the “Generated by...” header.
  • Replaced Jakefile with Makefile.
  • Added make hint task that checks all JavaScript files using JSHint and resolved all issues it reported. All JavaScript files and also generated parsers are JSHint-clean now.
  • Fixed output printed during test failures (expected value was being printed instead of the actual one). Original patch by Wolfgang Kluge.
  • Added a /tools/impact script to measure speed and size impact of commits.
  • Various generated code improvements and fixes.
  • Various internal code improvements and fixes.
  • Improved README.md.

0.6.2

Released: August 20, 2011

Small Changes

  • Reset parser position when action returns null.
  • Fixed typo in JavaScript example grammar.

0.6.1

Released: April 14, 2011

Small Changes

  • Use --ascii option when generating a minified version.

0.6.0

Released: April 14, 2011

Big Changes

  • Rewrote the command-line mode to be based on Node.js instead of Rhino — no more Java dependency. This also means that PEG.js is available as a Node.js package and can be required as a module.
  • Version for the browser is built separately from the command-line one in two flavors (normal and minified).
  • Parser variable name is no longer required argument of bin/pegjs — it is module.exports by default and can be set using the -e/--export-var option. This makes parsers generated by /bin/pegjs Node.js modules by default.
  • Added ability to start parsing from any grammar rule.
  • Added several compiler optimizations — 0.6 is ~12% faster than 0.5.1 in the benchmark on V8.

Small Changes

  • Split the source code into multiple files combined together using a build system.
  • Jake is now used instead of Rake for build scripts — no more Ruby dependency.
  • Test suite can be run from the command-line.
  • Benchmark suite can be run from the command-line.
  • Benchmark browser runner improvements (users can specify number of runs, benchmarks are run using setTimeout, table is centered and fixed-width).
  • Added PEG.js version to “Generated by...” line in generated parsers.
  • Added PEG.js version information and homepage header to peg.js.
  • Generated code improvements and fixes.
  • Internal code improvements and fixes.
  • Rewrote README.md.

0.5.1

Released: November 28, 2010

Small Changes

  • Fixed a problem where “SyntaxError: Invalid range in character class.” error appeared when using command-line version on Widnows (GH-13).
  • Fixed wrong version reported by bin/pegjs --version.
  • Removed two unused variables in the code.
  • Fixed incorrect variable name on two places.

0.5

Released: June 10, 2010

Big Changes

  • Syntax change: Use labeled expressions and variables instead of $1, $2, etc.
  • Syntax change: Replaced : after a rule name with =.
  • Syntax change: Allow trailing semicolon (;) for rules
  • Semantic change: Start rule of the grammar is now implicitly its first rule.
  • Implemented semantic predicates.
  • Implemented initializers.
  • Removed ability to change the start rule when generating the parser.
  • Added several compiler optimizations — 0.5 is ~11% faster than 0.4 in the benchmark on V8.

Small Changes

  • PEG.buildParser now accepts grammars only in string format.
  • Added “Generated by ...” message to the generated parsers.
  • Formatted all grammars more consistently and transparently.
  • Added notes about ECMA-262, 5th ed. compatibility to the JSON example grammar.
  • Guarded against redefinition of undefined.
  • Made bin/pegjs work when called via a symlink (issue #1).
  • Fixed bug causing incorrect error messages (issue #2).
  • Fixed error message for invalid character range.
  • Fixed string literal parsing in the JavaScript grammar.
  • Generated code improvements and fixes.
  • Internal code improvements and fixes.
  • Improved README.md.

0.4

Released: April 17, 2010

Big Changes

  • Improved IE compatibility — IE6+ is now fully supported.
  • Generated parsers are now standalone (no runtime is required).
  • Added example grammars for JavaScript, CSS and JSON.
  • Added a benchmark suite.
  • Implemented negative character classes (e.g. [^a-z]).
  • Project moved from BitBucket to GitHub.

Small Changes

  • Code generated for the character classes is now regexp-based (= simpler and more scalable).
  • Added \uFEFF (BOM) to the definition of whitespace in the metagrammar.
  • When building a parser, left-recursive rules (both direct and indirect) are reported as errors.
  • When building a parser, missing rules are reported as errors.
  • Expected items in the error messages do not contain duplicates and they are sorted.
  • Fixed several bugs in the example arithmetics grammar.
  • Converted README to GitHub Flavored Markdown and improved it.
  • Added CHANGELOG.
  • Internal code improvements.

0.3

Released: March 14, 2010

  • Wrote README.
  • Bootstrapped the grammar parser.
  • Metagrammar recognizes JavaScript-like comments.
  • Changed standard grammar extension from .peg to .pegjs (it is more specific).
  • Simplified the example arithmetics grammar + added comment.
  • Fixed a bug with reporting of invalid ranges such as [b-a] in the metagrammar.
  • Fixed --start vs. --start-rule inconsistency between help and actual option processing code.
  • Avoided ugliness in QUnit output.
  • Fixed typo in help: parserVarparser_var.
  • Internal code improvements.

0.2.1

Released: March 8, 2010

  • Added pegjs- prefix to the name of the minified runtime file.

0.2

Released: March 8, 2010

  • Added Rakefile that builds minified runtime using Google Closure Compiler API.
  • Removed trailing commas in object initializers (Google Closure does not like them).

0.1

Released: March 8, 2010

  • Initial release.