David Majda
90d164445a
Update embedded Codie to version 1.1.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
9615eb4bb6
Allow passing options to |PEG.buildParser|
...
These get passed down to the emitter templates.
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
ed45a1808e
Fix |quote| visibility in generated parsers
...
|quote| is used outside of the |parse| function so it must be defined in
more outer scope.
Fixes a problem (introduced in e9d8dc8eba
)
where construction of some error messages could throw an error.
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
d002cd6ff6
Remove comment about IE in |quoteForRegexpClass|
...
We escape null for general compatibility (see comment at the top of the
function), not only because of IE.
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
David Majda
e9d8dc8eba
More responsibility for building an error message into |SyntaxError|
12 years ago
David Majda
21c6d9ccd3
Add |offset| property to exceptions thrown by parsers
...
Based on a patch by Marcin Stefaniuk (marcin@stefaniuk.info ).
12 years ago
David Majda
791c495aec
Update embedded Codie to version 1.0.1
13 years ago
David Majda
47969a2f61
Replace |for| loop iterating over sequence elements with |each|
13 years ago
David Majda
a19ea83ffa
Replace |for| loop iterating over compiler passes with |each|
13 years ago
David Majda
cd5490dee4
Make pass list customizable via |PEG.compiler.appliedPassNames| property
13 years ago
David Majda
8a0276ffb7
Unify checks and passes
...
There is no real reason to have them separated.
13 years ago
David Majda
6cd5bdc5e6
Passes now do not return anything (they always modify the AST in-place)
13 years ago
David Majda
3983f46d5d
Rename |reportMissingReferencedRules| check to |reportMissingRules|
...
The new name is shorter, there is no real loss of meaning.
13 years ago
David Majda
64d26e5db2
Make names of compiler checks and passes verbs
13 years ago
David Majda
2a82d863e5
Regenerate src/parser.js (forgot to do it in previous commit)
13 years ago
David Majda
8acea01525
Fix reported error position when part of the input is not consumed
...
Closes GH-48.
13 years ago
David Majda
211a1116e4
Fix stack depth computations for empty sequences
...
Part of a fix for GH-53.
13 years ago
David Majda
afdcb6fc4f
Fix |posStackDepth| computation for rules
...
Rules by themselves do not need any variable for storing position.
Part of a fix for GH-53.
13 years ago
David Majda
756b6fc473
Fix |resultStackDepth| computation for sequences
...
The |1 + ...| was wrong -- sequence does not need its own variable since
it reuses the one used by the first item.
Part of a fix for GH-53.
13 years ago
David Majda
c639c1fc83
PEG.js grammar: Replace two instances of |string / ""| by |string?|
13 years ago
David Majda
c04af99df8
Implament case-insensitive class matching
13 years ago
David Majda
b540b2d460
Implement case-insensitive literal matching
13 years ago
David Majda
1c11e4aaa3
Split |literal| rule in the PEG.js grammar to |literal| and |string|
...
This is just a formality now but it will make sense later when literals
(but not strings) will allow "i" flag for case-insensitive matching.
13 years ago
David Majda
da12c2f5d4
Compile Codie templates only once
13 years ago
David Majda
a5af9611a2
Introduce |context.delta| function to make creating contexts more DRY
13 years ago
David Majda
be3b87ec71
Refactor "grammar" emitter function a bit
13 years ago
David Majda
2b09a7116d
Refactor "rule" emitter function a bit
13 years ago
David Majda
131b6dd01f
Refactor "sequence" emitter function a bit
13 years ago
David Majda
f29ff236b8
Refactor "simple_and" emitter function a bit
13 years ago
David Majda
506d8107a1
Refactor "simple_not" emitter function a bit
13 years ago
David Majda
13ae52b2bf
Refactor "semantic_and" emitter function a bit
13 years ago
David Majda
9111020ca2
Refactor "semantic_not" emitter function a bit
13 years ago
David Majda
cc3bd4f310
Refactor "zero_or_more" emitter function a bit
13 years ago
David Majda
85c1b010b6
Refactor "one_or_more" emitter function a bit
13 years ago
David Majda
b5ca96dd48
Refactor "action" emitter function a bit
13 years ago
David Majda
50a0371e2d
Refactor "rule_ref" emitter function a bit
13 years ago
David Majda
eaba6b8a9d
Refactor "literal" emitter function a bit
13 years ago
David Majda
2120c908c7
Refactor "class" emitter function a bit
13 years ago
David Majda
0748fee1d3
Use Codie for code templates
...
This will allow moving some code into the templates later.
13 years ago
David Majda
38c25efde0
Use single quotes for code in the emitter
...
Strings with code should use single quotes so that double quotes (which
I generally prefer) could be used in the code itself without escaping.
13 years ago
David Majda
45c99f8f6b
Generate more efficient code for empty literals
...
Original patch by Wolfgang Kluge:
797173f676
13 years ago
David Majda
4de3cc1716
Fix comment typos
...
Original patch by Wolfgang Kluge:
07e0cfcc02
13 years ago