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.
13 years ago
David Majda
bc5abfef5c
Replace Jakefile with Makefile
...
Doing scripting tasks in JavaScript is painful.
13 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.
13 years ago
David Majda
a2af1fe612
Semantic predicates now have access to preceding labels
...
Part of a fix for GH-69.
13 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.
13 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.
13 years ago
David Majda
9d96e1e303
README.md: Update compatibility information
13 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.
13 years ago
David Majda
a0898388fb
/bin/pegjs: Avoid calling |process.openStdin|
...
While |process.openStdin| is not officially deprecated, it's no longer
documented and just using |process.stdin| and resuming it seems to be
the official way.
13 years ago
David Majda
de256105eb
/bin/pegjs: Don't close standard output
...
Avoids "Error: process.stdout cannot be closed" error when invoked
without file arguments.
13 years ago
David Majda
70e4166bb2
Fix typo in a comment in JavaScript example grammar
13 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 ).
13 years ago
David Majda
e9d8dc8eba
More responsibility for building an error message into |SyntaxError|
13 years ago
David Majda
21c6d9ccd3
Add |offset| property to exceptions thrown by parsers
...
Based on a patch by Marcin Stefaniuk (marcin@stefaniuk.info ).
13 years ago
David Majda
8ae3eea7c4
Fix typo in JavaScript example grammar
...
Fixes GH-62.
13 years ago
David Majda
433c278e5d
Merge pull request #59 from jasondavies/typo
...
Fix typo in comment.
13 years ago
David Majda
791c495aec
Update embedded Codie to version 1.0.1
13 years ago
David Majda
fb5028eb90
Use |util| module instead of |sys|
...
|sys| emits a warning in Node.js 0.6.x.
13 years ago
David Majda
fa1523b651
Update version of Node.js and development dependencies in package.json
...
The new versions are the ones I test with.
13 years ago
Jason Davies
d386d3a351
Fix typo in comment.
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
c90e7f369b
Fix regexp for detecting command-line options in /bin/pegjs
...
Closes GH-51.
13 years ago
David Majda
5013f79e8d
Make "jake clean" and "jake distclean" check deleted directory existence
...
Closes GH-52.
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
9c3da347cc
Fix string parsing tests
...
The tests were wrong because the |string| rule is not used to parse
literals but rule names.
13 years ago
David Majda
3421bdb813
Test trailing characters for strings and literals at correct places
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
88c50a3e33
Add tests for zero- and one-char literals
...
We optimize these cases in the emitter so we should better test them.
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
950cc80738
Few small README.md fixes
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