151 Commits (ec8889f85d2c77ea35a2aded0b17cd1f720cdba5)

Author SHA1 Message Date
David Majda ec8889f85d Jasmine: Convert tests of parser's "labeled" rule 12 years ago
David Majda bf6d412a4f Jasmine: Convert tests of parser's "prefixed" rule 12 years ago
David Majda 3e083cc51b Jasmine: Convert tests of parser's "suffixed" rule 12 years ago
David Majda 45f825c24f Jasmine: Convert tests of parser's "primary" rule 12 years ago
David Majda 57bbcd71e5 Jasmine: Convert tests of parser's "action" rule 12 years ago
David Majda 35771e15bc Jasmine: Convert tests of parser's "braced" rule 12 years ago
David Majda b1cb214e8b Jasmine: Convert non-tests of parser's character class rules 12 years ago
David Majda 4f5b78b372 Jasmine: Convert tests of parser's "identifier" rule 12 years ago
David Majda a3d93f000f Jasmine: Convert tests of parser's "literal" rule 12 years ago
David Majda 573db92583 Jasmine: Convert tests of parser's "string" rule 12 years ago
David Majda fa65018b15 Jasmine: Convert tests of parser's "doubleQuotedString" rule 12 years ago
David Majda 0e384b31f4 Jasmine: Convert tests of parser's "doubleQuotedCharacter" rule 12 years ago
David Majda 2f5f8d5932 Jasmine: Convert tests of parser's "simpleDoubleQuotedCharacter" rule 12 years ago
David Majda fb01f48c97 Jasmine: Convert tests of parser's "singleQuotedString" rule 12 years ago
David Majda d3b3fe9b78 Jasmine: Convert tests of parser's "singleQuotedCharacter" rule 12 years ago
David Majda 124e45606c Jasmine: Convert tests of parser's "simpleSingleQuotedCharacter" rule 12 years ago
David Majda ba68919b0a Jasmine: Convert tests of parser's "class" rule 12 years ago
David Majda 5fb59b05f2 Jasmine: Convert tests of parser's "classCharacterRange" rule 12 years ago
David Majda d29a753b8d Jasmine: Convert tests of parser's "classCharacter" rule 12 years ago
David Majda b9ae8f9561 Jasmine: Convert tests of parser's "bracketDelimitedCharacter" rule 12 years ago
David Majda da4ac8bb92 Jasmine: Convert tests of parser's "simpleBracketDelimitedCharacter" rule 12 years ago
David Majda 2bb266bbaf Jasmine: Convert tests of parser's "simpleEscapeSequence" rule 12 years ago
David Majda 2619becb9d Jasmine: Convert tests of parser's "zeroEscapeSequence" rule 12 years ago
David Majda 2b43f8ebb8 Jasmine: Convert tests of parser's "hexEscapeSequence" rule 12 years ago
David Majda 0bbca136a2 Jasmine: Convert tests of parser's "unicodeEscapeSequence" rule 12 years ago
David Majda a27dc5ae4a Jasmine: Convert tests of parser's "eolEscapeSequence" rule 12 years ago
David Majda 4f91286013 Jasmine: Convert non-tests of parser's character class rules 12 years ago
David Majda 3bc61c4c50 Jasmine: Convert tests of parser's "__" rule 12 years ago
David Majda fadaef84dd Jasmine: Convert tests of parser's "comment" rule 12 years ago
David Majda b5ccaed491 Jasmine: Convert tests of parser's "singleLineComment" rule 12 years ago
David Majda dac3b0d8d9 Jasmine: Convert tests of parser's "multiLineComment" rule 12 years ago
David Majda 328edf667c Jasmine: Convert tests of parser's "eol" rule 12 years ago
David Majda b4cffee9d4 Jasmine: Convert tests of parser's "eolChar" rule 12 years ago
David Majda a46b9c197b Jasmine: Convert tests of parser's "whitespace" rule 12 years ago
David Majda 53f70b9eb9 Move compiler passes and their tests into a subdirectory 12 years ago
David Majda f046e0a838 Move compiler-related source files and tests into a subdirectory 12 years ago
David Majda ef06621a2b Remove extra comma in compiler tests 12 years ago
David Majda 5b3321d302 Implement |cache| option for |PEG.buildParser|
This option enables/disables the results cache in generated parsers.
Until now, it was always enabled, but after this commit it needs to be
enabled explicitly (i.e. the |cache| option default value is |false|).
The reason is that parsing without it is *much* faster according to the
benchmark.

Note that disabling the cache breaks the linear parsing time guarantee,
meaning that with some grammars you can get exponential parsing time
with respect to the input length. This, together with the possibility of
improving the cache performance in the future, is the reason to keep it
as an option.

Speed impact
------------
Before:     214.08 kB/s
After:      827.52 kB/s
Difference: 286.54%

Size impact
-----------
Before:     1045396 b
After:      949783 b
Difference: -9.15%

(Measured by /tools/impact with Node.js v0.6.6 on x86_64 GNU/Linux.)
12 years ago
David Majda f3970bfa5c Extend QUnit a bit more cleanly 12 years ago
David Majda d35b21e9b2 Simplify the |indent| function in /test/run 12 years ago
David Majda 9d5990f80a Update code formatting in /test/run to match conventions I use elsewhere 12 years ago
David Majda 6d624a89bd Update bundled QUnit to version 1.5.0 12 years ago
David Majda 52d7ec2224 Implement |trackLineAndColumn| option for |PEG.buildParser|
This option makes the generated parser track line and column during
parsing. Tracked line and column are made available inside actions and
predicates as |line| and |column| variables.

Note that in actions these variables denote start position of the
action's expression while in predicates they denote the current
position. The slightly different behavior is motivated by expected
usage.
12 years ago
David Majda f2f88b87ea Make current parse position visible in actions and predicates
The speed/size impact is insignificant.

Speed impact
------------
Before:     214.11 kB/s
After:      214.87 kB/s
Difference: 0.35%

Size impact
-----------
Before:     1042691 b
After:      1046731 b
Difference: 0.38%

(Measured by /tools/impact with Node.js v0.6.6 on x86_64 GNU/Linux.)
12 years ago
David Majda f47da5c682 Fix a bug in param name fixup code for sequences 12 years ago
David Majda 4d5b1d58aa AST: Store rules in an array instead of an object
This simplifies the code a bit and makes the AST more regular (each node
type has a fixed set of properties). The latter may get useful later
when generalizing visitors.
12 years ago
David Majda a2af1fe612 Semantic predicates now have access to preceding labels
Part of a fix for GH-69.
12 years ago
David Majda 4cf50bcf9f Move param computations from the emitter into a separate pass
This has two main benefits:

  1. The knowledge about scoping params in at one designated place,
     making all future adjustments in this area easier.

  2. Action-related code does not handle sequences specially anymore.
     Such knowledge/behavior doesn't belong there.
12 years ago
David Majda efc38eef9b Consolidate all variable name computations into one compiler pass
Before this change, knowledge about variable names was spread between
the |computeStackDepths| pass and the code emitter code. For example,
the fact that the |&...| expression needs one variable to store a
position was represented in both places.

This changes consolidates that knowledge and introduces a new
|computeVarNames| pass. This pass replaces old |computeStackDepths|
pass, does all computations realted to variable names and stores the
results in the AST. Note that some knowledge about variables
(inevitably) remained in emitter code templates.

Beside DRYing things up, this change simplifies the emitter
significantly. By storing variable names in the AST it also allows
introduction of a pass that will identify parameters passed to actions
using proper symbol tables. Right now, this is done in a hackish way
directly in the emitter, which won't work well with changes planned in
GH-69.
12 years ago
David Majda 46b2eaf3e3 Add |expected| and |found| properties to exceptions thrown by parsers
Based on a patch by Marcin Stefaniuk (marcin@stefaniuk.info).
12 years ago