8.8 KiB
0.7.0
Released: April 18, 2012
Big Changes
-
Added ability to pass options to
PEG.buildParser
. -
Implemented the
trackLineAndColumn
option forPEG.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 asline
andcolumn
variables. -
Implemented the
cache
option forPEG.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
andfound
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
withMakefile
. -
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 ismodule.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:
parserVar
→parser_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.