da57118a43
Parsers can now be generated with support for tracing using the --trace CLI option or a boolean |trace| option to |PEG.buildParser|. This makes them trace their progress, which can be useful for debugging. Parsers generated with tracing support are called "tracing parsers". When a tracing parser executes, by default it traces the rules it enters and exits by writing messages to the console. For example, a parser built from this grammar: start = a / b a = "a" b = "b" will write this to the console when parsing input "b": 1:1 rule.enter start 1:1 rule.enter a 1:1 rule.fail a 1:1 rule.enter b 1:2 rule.match b 1:2 rule.match start You can customize tracing by passing a custom *tracer* to parser's |parse| method using the |tracer| option: parser.parse(input, { trace: tracer }); This will replace the built-in default tracer (which writes to the console) by the tracer you supplied. The tracer must be an object with a |trace| method. This method is called each time a tracing event happens. It takes one argument which is an object describing the tracing event. Currently, three events are supported: * rule.enter -- triggered when a rule is entered * rule.match -- triggered when a rule matches successfully * rule.fail -- triggered when a rule fails to match These events are triggered in nested pairs -- for each rule.enter event there is a matching rule.match or rule.fail event. The event object passed as an argument to |trace| contains these properties: * type -- event type * rule -- name of the rule the event is related to * offset -- parse position at the time of the event * line -- line at the time of the event * column -- column at the time of the event * result -- rule's match result (only for rule.match event) The whole tracing API is somewhat experimental (which is why it isn't documented properly yet) and I expect it will evolve over time as experience is gained. The default tracer is also somewhat bare-bones. I hope that PEG.js user community will develop more sophisticated tracers over time and I'll be able to integrate their best ideas into the default tracer. |
10 years ago | |
---|---|---|
.. | ||
api | 10 years ago | |
behavior | 10 years ago | |
unit | 11 years ago | |
vendor/jasmine | 11 years ago | |
README.md | 11 years ago | |
helpers.js | 11 years ago | |
index.html | 10 years ago |
README.md
PEG.js Spec Suite
This is the PEG.js spec suite. It ensures PEG.js works correctly. All specs should always pass on all supported platforms.
Running in Node.js
All commands in the following steps need to be executed in PEG.js root directory (one level up from this one).
-
Install all PEG.js dependencies, including development ones:
$ npm install
-
Execute the spec suite:
$ make spec
-
Watch the specs pass (or fail).
Running in the Browser
All commands in the following steps need to be executed in PEG.js root directory (one level up from this one).
-
Make sure you have Node.js and Python installed.
-
Install all PEG.js dependencies, including development ones:
$ npm install
-
Build browser version of PEG.js:
$ make browser
-
Serve PEG.js root directory using a web server:
$ python -m SimpleHTTPServer
-
Point your browser to the spec suite.
-
Watch the specs pass (or fail).