Rename the "buildParser" function to "generate"

In most places, we talk about "generating a parser", not "building a
parser", which the function name should reflect. Also, mentioning a
parser in the name is not necessary as in case of a parser generator
it's pretty clear what is generated.
redux
David Majda 9 years ago
parent 0847a69643
commit f4504a93fe

@ -87,9 +87,9 @@ You can tweak the generated parser with several options:
* `--plugin` — makes PEG.js use a specified plugin (can be specified multiple
times)
* `--extra-options` — additional options (in JSON format) to pass to
`peg.buildParser`
`peg.generate`
* `--extra-options-file` — file with additional options (in JSON format) to
pass to `peg.buildParser`
pass to `peg.generate`
* `--trace` — makes the parser trace its progress
### JavaScript API
@ -102,10 +102,10 @@ In browser, include the PEG.js library in your web page or application using the
`<script>` tag. If PEG.js detects an AMD loader, it will define itself as a
module, otherwise the API will be available in the `peg` global object.
To generate a parser, call the `peg.buildParser` method and pass your grammar as
a parameter:
To generate a parser, call the `peg.generate` method and pass your grammar as a
parameter:
var parser = peg.buildParser("start = ('a' / 'b')+");
var parser = peg.generate("start = ('a' / 'b')+");
The method will return generated parser object or its source code as a string
(depending on the value of the `output` option — see below). It will throw an
@ -113,7 +113,7 @@ exception if the grammar is invalid. The exception will contain `message`
property with more details about the error.
You can tweak the generated parser by passing a second parameter with an options
object to `peg.buildParser`. The following options are supported:
object to `peg.generate`. The following options are supported:
* `cache` — if `true`, makes the parser cache results, avoiding exponential
parsing time in pathological cases but making the parser slower (default:

@ -63,7 +63,7 @@
return function() {
callbacks.benchmarkStart(benchmarks[i]);
state.parser = peg.buildParser(
state.parser = peg.generate(
callbacks.readFile("../examples/" + benchmarks[i].id + ".pegjs"),
options
);

@ -39,9 +39,9 @@ function printHelp() {
console.log(" --plugin <plugin> use a specified plugin (can be specified");
console.log(" multiple times)");
console.log(" --extra-options <options> additional options (in JSON format) to pass");
console.log(" to peg.buildParser");
console.log(" to peg.generate");
console.log(" --extra-options-file <file> file with additional options (in JSON");
console.log(" format) to pass to peg.buildParser");
console.log(" format) to pass to peg.generate");
console.log(" -v, --version print version information and exit");
console.log(" -h, --help print help and exit");
}
@ -272,7 +272,7 @@ readStream(inputStream, function(input) {
var source;
try {
source = peg.buildParser(input, options);
source = peg.generate(input, options);
} catch (e) {
if (e.location !== undefined) {
abort(e.location.start.line + ":" + e.location.start.column + ": " + e.message);

@ -22,7 +22,7 @@ var peg = {
* errors are detected during the generation and some may protrude to the
* generated parser and cause its malfunction.
*/
buildParser: function(grammar, options) {
generate: function(grammar, options) {
options = options !== void 0 ? options : {};
function convertPasses(passes) {

@ -6,19 +6,19 @@
describe("generated parser API", function() {
describe("parse", function() {
it("parses input", function() {
var parser = peg.buildParser('start = "a"');
var parser = peg.generate('start = "a"');
expect(parser.parse("a")).toBe("a");
});
it("throws an exception on syntax error", function() {
var parser = peg.buildParser('start = "a"');
var parser = peg.generate('start = "a"');
expect(function() { parser.parse("b"); }).toThrow();
});
describe("start rule", function() {
var parser = peg.buildParser([
var parser = peg.generate([
'a = "x" { return "a"; }',
'b = "x" { return "b"; }',
'c = "x" { return "c"; }'
@ -47,7 +47,7 @@ describe("generated parser API", function() {
});
describe("tracing", function() {
var parser = peg.buildParser([
var parser = peg.generate([
'start = a / b',
'a = "a"',
'b = "b"'
@ -135,7 +135,7 @@ describe("generated parser API", function() {
});
it("accepts custom options", function() {
var parser = peg.buildParser('start = "a"');
var parser = peg.generate('start = "a"');
parser.parse("a", { foo: 42 });
});

@ -3,20 +3,20 @@
"use strict";
describe("PEG.js API", function() {
describe("buildParser", function() {
describe("generate", function() {
it("builds a parser", function() {
var parser = peg.buildParser('start = "a"');
var parser = peg.generate('start = "a"');
expect(typeof parser).toBe("object");
expect(parser.parse("a")).toBe("a");
});
it("throws an exception on syntax error", function() {
expect(function() { peg.buildParser('start = @'); }).toThrow();
expect(function() { peg.generate('start = @'); }).toThrow();
});
it("throws an exception on semantic error", function() {
expect(function() { peg.buildParser('start = missing'); }).toThrow();
expect(function() { peg.generate('start = missing'); }).toThrow();
});
describe("allowed start rules", function() {
@ -34,7 +34,7 @@ describe("PEG.js API", function() {
describe("when optimizing for parsing speed", function() {
describe("when |allowedStartRules| is not set", function() {
it("generated parser can start only from the first rule", function() {
var parser = peg.buildParser(grammar, { optimize: "speed" });
var parser = peg.generate(grammar, { optimize: "speed" });
expect(parser.parse("x", { startRule: "a" })).toBe("x");
expect(
@ -48,7 +48,7 @@ describe("PEG.js API", function() {
describe("when |allowedStartRules| is set", function() {
it("generated parser can start only from specified rules", function() {
var parser = peg.buildParser(grammar, {
var parser = peg.generate(grammar, {
optimize: "speed",
allowedStartRules: ["b", "c"]
});
@ -65,7 +65,7 @@ describe("PEG.js API", function() {
describe("when optimizing for code size", function() {
describe("when |allowedStartRules| is not set", function() {
it("generated parser can start only from the first rule", function() {
var parser = peg.buildParser(grammar, { optimize: "size" });
var parser = peg.generate(grammar, { optimize: "size" });
expect(parser.parse("x", { startRule: "a" })).toBe("x");
expect(
@ -79,7 +79,7 @@ describe("PEG.js API", function() {
describe("when |allowedStartRules| is set", function() {
it("generated parser can start only from specified rules", function() {
var parser = peg.buildParser(grammar, {
var parser = peg.generate(grammar, {
optimize: "size",
allowedStartRules: ["b", "c"]
});
@ -103,7 +103,7 @@ describe("PEG.js API", function() {
describe("when |cache| is not set", function() {
it("generated parser doesn't cache intermediate parse results", function() {
var parser = peg.buildParser(grammar);
var parser = peg.generate(grammar);
expect(parser.parse("ac")).toBe(2);
});
@ -111,7 +111,7 @@ describe("PEG.js API", function() {
describe("when |cache| is set to |false|", function() {
it("generated parser doesn't cache intermediate parse results", function() {
var parser = peg.buildParser(grammar, { cache: false });
var parser = peg.generate(grammar, { cache: false });
expect(parser.parse("ac")).toBe(2);
});
@ -119,7 +119,7 @@ describe("PEG.js API", function() {
describe("when |cache| is set to |true|", function() {
it("generated parser caches intermediate parse results", function() {
var parser = peg.buildParser(grammar, { cache: true });
var parser = peg.generate(grammar, { cache: true });
expect(parser.parse("ac")).toBe(1);
});
@ -131,7 +131,7 @@ describe("PEG.js API", function() {
describe("when |trace| is not set", function() {
it("generated parser doesn't trace", function() {
var parser = peg.buildParser(grammar),
var parser = peg.generate(grammar),
tracer = jasmine.createSpyObj("tracer", ["trace"]);
parser.parse("a", { tracer: tracer });
@ -142,7 +142,7 @@ describe("PEG.js API", function() {
describe("when |trace| is set to |false|", function() {
it("generated parser doesn't trace", function() {
var parser = peg.buildParser(grammar, { trace: false }),
var parser = peg.generate(grammar, { trace: false }),
tracer = jasmine.createSpyObj("tracer", ["trace"]);
parser.parse("a", { tracer: tracer });
@ -153,7 +153,7 @@ describe("PEG.js API", function() {
describe("when |trace| is set to |true|", function() {
it("generated parser traces", function() {
var parser = peg.buildParser(grammar, { trace: true }),
var parser = peg.generate(grammar, { trace: true }),
tracer = jasmine.createSpyObj("tracer", ["trace"]);
parser.parse("a", { tracer: tracer });
@ -173,7 +173,7 @@ describe("PEG.js API", function() {
describe("when |output| is not set", function() {
it("returns generated parser object", function() {
var parser = peg.buildParser(grammar);
var parser = peg.generate(grammar);
expect(typeof parser).toBe("object");
expect(parser.parse("a")).toBe("a");
@ -182,7 +182,7 @@ describe("PEG.js API", function() {
describe("when |output| is set to |\"parser\"|", function() {
it("returns generated parser object", function() {
var parser = peg.buildParser(grammar, { output: "parser" });
var parser = peg.generate(grammar, { output: "parser" });
expect(typeof parser).toBe("object");
expect(parser.parse("a")).toBe("a");
@ -191,7 +191,7 @@ describe("PEG.js API", function() {
describe("when |output| is set to |\"source\"|", function() {
it("returns generated parser source code", function() {
var source = peg.buildParser(grammar, { output: "source" });
var source = peg.generate(grammar, { output: "source" });
expect(typeof source).toBe("string");
expect(eval(source).parse("a")).toBe("a");
@ -208,7 +208,7 @@ describe("PEG.js API", function() {
/* The |plugins| option is tested in plugin API specs. */
it("accepts custom options", function() {
peg.buildParser('start = "a"', { foo: 42 });
peg.generate('start = "a"', { foo: 42 });
});
});
});

@ -48,7 +48,7 @@ describe("plugin API", function() {
{ use: function() { pluginsUsed[2] = true; } }
];
peg.buildParser(grammar, { plugins: plugins });
peg.generate(grammar, { plugins: plugins });
expect(pluginsUsed).toEqual([true, true, true]);
});
@ -82,24 +82,24 @@ describe("plugin API", function() {
}
};
peg.buildParser(grammar, { plugins: [plugin] });
peg.generate(grammar, { plugins: [plugin] });
});
it("receives options", function() {
var plugin = {
use: function(config, options) {
expect(options).toEqual(buildParserOptions);
expect(options).toEqual(generateOptions);
}
},
buildParserOptions = { plugins: [plugin], foo: 42 };
generateOptions = { plugins: [plugin], foo: 42 };
peg.buildParser(grammar, buildParserOptions);
peg.generate(grammar, generateOptions);
});
it("can replace parser", function() {
var plugin = {
use: function(config) {
var parser = peg.buildParser([
var parser = peg.generate([
'start = .* {',
' return {',
' type: "grammar",',
@ -117,7 +117,7 @@ describe("plugin API", function() {
config.parser = parser;
}
},
parser = peg.buildParser('a', { plugins: [plugin] });
parser = peg.generate('a', { plugins: [plugin] });
expect(parser.parse("a")).toBe("a");
});
@ -132,7 +132,7 @@ describe("plugin API", function() {
config.passes.generate = [pass];
}
},
parser = peg.buildParser(grammar, { plugins: [plugin] });
parser = peg.generate(grammar, { plugins: [plugin] });
expect(parser.parse("a")).toBe(42);
});
@ -148,7 +148,7 @@ describe("plugin API", function() {
options.allowedStartRules = ["b", "c"];
}
},
parser = peg.buildParser(grammar, {
parser = peg.generate(grammar, {
allowedStartRules: ["a"],
plugins: [plugin]
});

@ -130,7 +130,7 @@ describe("generated parser behavior", function() {
varyOptimizationOptions(function(options) {
describe("initializer", function() {
it("executes the code before parsing starts", function() {
var parser = peg.buildParser([
var parser = peg.generate([
'{ var result = 42; }',
'start = "a" { return result; }'
].join("\n"), options);
@ -140,7 +140,7 @@ describe("generated parser behavior", function() {
describe("available variables and functions", function() {
it("|parser| contains the parser object", function() {
var parser = peg.buildParser([
var parser = peg.generate([
'{ var result = parser; }',
'start = "a" { return result; }'
].join("\n"), options);
@ -149,7 +149,7 @@ describe("generated parser behavior", function() {
});
it("|options| contains options", function() {
var parser = peg.buildParser([
var parser = peg.generate([
'{ var result = options; }',
'start = "a" { return result; }'
].join("\n"), options);
@ -162,7 +162,7 @@ describe("generated parser behavior", function() {
describe("rule", function() {
if (options.cache) {
it("caches rule match results", function() {
var parser = peg.buildParser([
var parser = peg.generate([
'{ var n = 0; }',
'start = (a "b") / (a "c") { return n; }',
'a = "a" { n++; }'
@ -172,7 +172,7 @@ describe("generated parser behavior", function() {
});
} else {
it("doesn't cache rule match results", function() {
var parser = peg.buildParser([
var parser = peg.generate([
'{ var n = 0; }',
'start = (a "b") / (a "c") { return n; }',
'a = "a" { n++; }'
@ -184,7 +184,7 @@ describe("generated parser behavior", function() {
describe("when the expression matches", function() {
it("returns its match result", function() {
var parser = peg.buildParser('start = "a"');
var parser = peg.generate('start = "a"');
expect(parser).toParse("a", "a");
});
@ -193,7 +193,7 @@ describe("generated parser behavior", function() {
describe("when the expression doesn't match", function() {
describe("without display name", function() {
it("reports match failure and doesn't record any expectation", function() {
var parser = peg.buildParser('start = "a"');
var parser = peg.generate('start = "a"');
expect(parser).toFailToParse("b", {
expected: [{ type: "literal", value: "a", description: '"a"' }]
@ -203,7 +203,7 @@ describe("generated parser behavior", function() {
describe("with display name", function() {
it("reports match failure and records an expectation of type \"other\"", function() {
var parser = peg.buildParser('start "start" = "a"');
var parser = peg.generate('start "start" = "a"');
expect(parser).toFailToParse("b", {
expected: [{ type: "other", description: "start" }]
@ -211,7 +211,7 @@ describe("generated parser behavior", function() {
});
it("discards any expectations recorded when matching the expression", function() {
var parser = peg.buildParser('start "start" = "a"');
var parser = peg.generate('start "start" = "a"');
expect(parser).toFailToParse("b", {
expected: [{ type: "other", description: "start" }]
@ -224,34 +224,34 @@ describe("generated parser behavior", function() {
describe("literal", function() {
describe("matching", function() {
it("matches empty literals", function() {
var parser = peg.buildParser('start = ""', options);
var parser = peg.generate('start = ""', options);
expect(parser).toParse("");
});
it("matches one-character literals", function() {
var parser = peg.buildParser('start = "a"', options);
var parser = peg.generate('start = "a"', options);
expect(parser).toParse("a");
expect(parser).toFailToParse("b");
});
it("matches multi-character literals", function() {
var parser = peg.buildParser('start = "abcd"', options);
var parser = peg.generate('start = "abcd"', options);
expect(parser).toParse("abcd");
expect(parser).toFailToParse("efgh");
});
it("is case sensitive without the \"i\" flag", function() {
var parser = peg.buildParser('start = "a"', options);
var parser = peg.generate('start = "a"', options);
expect(parser).toParse("a");
expect(parser).toFailToParse("A");
});
it("is case insensitive with the \"i\" flag", function() {
var parser = peg.buildParser('start = "a"i', options);
var parser = peg.generate('start = "a"i', options);
expect(parser).toParse("a");
expect(parser).toParse("A");
@ -260,13 +260,13 @@ describe("generated parser behavior", function() {
describe("when it matches", function() {
it("returns the matched text", function() {
var parser = peg.buildParser('start = "a"', options);
var parser = peg.generate('start = "a"', options);
expect(parser).toParse("a", "a");
});
it("consumes the matched text", function() {
var parser = peg.buildParser('start = "a" .', options);
var parser = peg.generate('start = "a" .', options);
expect(parser).toParse("ab");
});
@ -274,7 +274,7 @@ describe("generated parser behavior", function() {
describe("when it doesn't match", function() {
it("reports match failure and records an expectation of type \"literal\"", function() {
var parser = peg.buildParser('start = "a"', options);
var parser = peg.generate('start = "a"', options);
expect(parser).toFailToParse("b", {
expected: [{ type: "literal", value: "a", description: '"a"' }]
@ -286,13 +286,13 @@ describe("generated parser behavior", function() {
describe("character class", function() {
describe("matching", function() {
it("matches empty classes", function() {
var parser = peg.buildParser('start = []', options);
var parser = peg.generate('start = []', options);
expect(parser).toFailToParse("a");
});
it("matches classes with a character list", function() {
var parser = peg.buildParser('start = [abc]', options);
var parser = peg.generate('start = [abc]', options);
expect(parser).toParse("a");
expect(parser).toParse("b");
@ -301,7 +301,7 @@ describe("generated parser behavior", function() {
});
it("matches classes with a character range", function() {
var parser = peg.buildParser('start = [a-c]', options);
var parser = peg.generate('start = [a-c]', options);
expect(parser).toParse("a");
expect(parser).toParse("b");
@ -310,21 +310,21 @@ describe("generated parser behavior", function() {
});
it("matches inverted classes", function() {
var parser = peg.buildParser('start = [^a]', options);
var parser = peg.generate('start = [^a]', options);
expect(parser).toFailToParse("a");
expect(parser).toParse("b");
});
it("is case sensitive without the \"i\" flag", function() {
var parser = peg.buildParser('start = [a]', options);
var parser = peg.generate('start = [a]', options);
expect(parser).toParse("a");
expect(parser).toFailToParse("A");
});
it("is case insensitive with the \"i\" flag", function() {
var parser = peg.buildParser('start = [a]i', options);
var parser = peg.generate('start = [a]i', options);
expect(parser).toParse("a");
expect(parser).toParse("A");
@ -333,13 +333,13 @@ describe("generated parser behavior", function() {
describe("when it matches", function() {
it("returns the matched character", function() {
var parser = peg.buildParser('start = [a]', options);
var parser = peg.generate('start = [a]', options);
expect(parser).toParse("a", "a");
});
it("consumes the matched character", function() {
var parser = peg.buildParser('start = [a] .', options);
var parser = peg.generate('start = [a] .', options);
expect(parser).toParse("ab");
});
@ -347,7 +347,7 @@ describe("generated parser behavior", function() {
describe("when it doesn't match", function() {
it("reports match failure and records an expectation of type \"class\"", function() {
var parser = peg.buildParser('start = [a]', options);
var parser = peg.generate('start = [a]', options);
expect(parser).toFailToParse("b", {
expected: [{ type: "class", value: "[a]", description: "[a]" }]
@ -359,7 +359,7 @@ describe("generated parser behavior", function() {
describe("dot", function() {
describe("matching", function() {
it("matches any character", function() {
var parser = peg.buildParser('start = .', options);
var parser = peg.generate('start = .', options);
expect(parser).toParse("a");
expect(parser).toParse("b");
@ -369,13 +369,13 @@ describe("generated parser behavior", function() {
describe("when it matches", function() {
it("returns the matched character", function() {
var parser = peg.buildParser('start = .', options);
var parser = peg.generate('start = .', options);
expect(parser).toParse("a", "a");
});
it("consumes the matched character", function() {
var parser = peg.buildParser('start = . .', options);
var parser = peg.generate('start = . .', options);
expect(parser).toParse("ab");
});
@ -383,7 +383,7 @@ describe("generated parser behavior", function() {
describe("when it doesn't match", function() {
it("reports match failure and records an expectation of type \"any\"", function() {
var parser = peg.buildParser('start = .', options);
var parser = peg.generate('start = .', options);
expect(parser).toFailToParse("", {
expected: [{ type: "any", description: "any character" }]
@ -395,7 +395,7 @@ describe("generated parser behavior", function() {
describe("rule reference", function() {
describe("when referenced rule's expression matches", function() {
it("returns its result", function() {
var parser = peg.buildParser([
var parser = peg.generate([
'start = a',
'a = "a"'
].join("\n"), options);
@ -406,7 +406,7 @@ describe("generated parser behavior", function() {
describe("when referenced rule's expression doesn't match", function() {
it("reports match failure", function() {
var parser = peg.buildParser([
var parser = peg.generate([
'start = a',
'a = "a"'
].join("\n"), options);
@ -424,7 +424,7 @@ describe("generated parser behavior", function() {
* |undefined| which we can't compare against in |toParse| due to the
* way optional parameters work.
*/
var parser = peg.buildParser('start = &{ return true; } ""', options);
var parser = peg.generate('start = &{ return true; } ""', options);
expect(parser).toParse("", [undefined, ""]);
});
@ -432,7 +432,7 @@ describe("generated parser behavior", function() {
describe("when the code returns a falsey value", function() {
it("reports match failure", function() {
var parser = peg.buildParser('start = &{ return false; }', options);
var parser = peg.generate('start = &{ return false; }', options);
expect(parser).toFailToParse("");
});
@ -441,7 +441,7 @@ describe("generated parser behavior", function() {
describe("label variables", function() {
describe("in containing sequence", function() {
it("can access variables defined by preceding labeled elements", function() {
var parser = peg.buildParser(
var parser = peg.generate(
'start = a:"a" &{ return a === "a"; }',
options
);
@ -450,7 +450,7 @@ describe("generated parser behavior", function() {
});
it("cannot access variable defined by labeled predicate element", function() {
var parser = peg.buildParser(
var parser = peg.generate(
'start = "a" b:&{ return b === undefined; } "c"',
options
);
@ -459,7 +459,7 @@ describe("generated parser behavior", function() {
});
it("cannot access variables defined by following labeled elements", function() {
var parser = peg.buildParser(
var parser = peg.generate(
'start = &{ return a === "a"; } a:"a"',
options
);
@ -517,7 +517,7 @@ describe("generated parser behavior", function() {
parser, i;
for (i = 0; i < testcases.length; i++) {
parser = peg.buildParser(testcases[i].grammar, options);
parser = peg.generate(testcases[i].grammar, options);
expect(parser).toFailToParse(testcases[i].input);
}
});
@ -525,7 +525,7 @@ describe("generated parser behavior", function() {
describe("in outer sequence", function() {
it("can access variables defined by preceding labeled elements", function() {
var parser = peg.buildParser(
var parser = peg.generate(
'start = a:"a" ("b" &{ return a === "a"; })',
options
);
@ -534,7 +534,7 @@ describe("generated parser behavior", function() {
});
it("cannot access variable defined by labeled predicate element", function() {
var parser = peg.buildParser(
var parser = peg.generate(
'start = "a" b:("b" &{ return b === undefined; }) "c"',
options
);
@ -543,7 +543,7 @@ describe("generated parser behavior", function() {
});
it("cannot access variables defined by following labeled elements", function() {
var parser = peg.buildParser(
var parser = peg.generate(
'start = ("a" &{ return b === "b"; }) b:"b"',
options
);
@ -555,7 +555,7 @@ describe("generated parser behavior", function() {
describe("initializer variables & functions", function() {
it("can access variables defined in the initializer", function() {
var parser = peg.buildParser([
var parser = peg.generate([
'{ var v = 42 }',
'start = &{ return v === 42; }'
].join("\n"), options);
@ -564,7 +564,7 @@ describe("generated parser behavior", function() {
});
it("can access functions defined in the initializer", function() {
var parser = peg.buildParser([
var parser = peg.generate([
'{ function f() { return 42; } }',
'start = &{ return f() === 42; }'
].join("\n"), options);
@ -575,7 +575,7 @@ describe("generated parser behavior", function() {
describe("available variables & functions", function() {
it("|parser| contains the parser object", function() {
var parser = peg.buildParser([
var parser = peg.generate([
'{ var result; }',
'start = &{ result = parser; return true; } { return result; }'
].join("\n"), options);
@ -584,7 +584,7 @@ describe("generated parser behavior", function() {
});
it("|options| contains options", function() {
var parser = peg.buildParser([
var parser = peg.generate([
'{ var result; }',
'start = &{ result = options; return true; } { return result; }'
].join("\n"), options);
@ -593,7 +593,7 @@ describe("generated parser behavior", function() {
});
it("|location| returns current location info", function() {
var parser = peg.buildParser([
var parser = peg.generate([
'{ var result; }',
'start = line (nl+ line)* { return result; }',
'line = thing (" "+ thing)*',
@ -629,7 +629,7 @@ describe("generated parser behavior", function() {
* |undefined| which we can't compare against in |toParse| due to the
* way optional parameters work.
*/
var parser = peg.buildParser('start = !{ return false; } ""', options);
var parser = peg.generate('start = !{ return false; } ""', options);
expect(parser).toParse("", [undefined, ""]);
});
@ -637,7 +637,7 @@ describe("generated parser behavior", function() {
describe("when the code returns a truthy value", function() {
it("reports match failure", function() {
var parser = peg.buildParser('start = !{ return true; }', options);
var parser = peg.generate('start = !{ return true; }', options);
expect(parser).toFailToParse("");
});
@ -646,7 +646,7 @@ describe("generated parser behavior", function() {
describe("label variables", function() {
describe("in containing sequence", function() {
it("can access variables defined by preceding labeled elements", function() {
var parser = peg.buildParser(
var parser = peg.generate(
'start = a:"a" !{ return a !== "a"; }',
options
);
@ -655,7 +655,7 @@ describe("generated parser behavior", function() {
});
it("cannot access variable defined by labeled predicate element", function() {
var parser = peg.buildParser(
var parser = peg.generate(
'start = "a" b:!{ return b !== undefined; } "c"',
options
);
@ -664,7 +664,7 @@ describe("generated parser behavior", function() {
});
it("cannot access variables defined by following labeled elements", function() {
var parser = peg.buildParser(
var parser = peg.generate(
'start = !{ return a !== "a"; } a:"a"',
options
);
@ -722,7 +722,7 @@ describe("generated parser behavior", function() {
parser, i;
for (i = 0; i < testcases.length; i++) {
parser = peg.buildParser(testcases[i].grammar, options);
parser = peg.generate(testcases[i].grammar, options);
expect(parser).toFailToParse(testcases[i].input);
}
});
@ -730,7 +730,7 @@ describe("generated parser behavior", function() {
describe("in outer sequence", function() {
it("can access variables defined by preceding labeled elements", function() {
var parser = peg.buildParser(
var parser = peg.generate(
'start = a:"a" ("b" !{ return a !== "a"; })',
options
);
@ -739,7 +739,7 @@ describe("generated parser behavior", function() {
});
it("cannot access variable defined by labeled predicate element", function() {
var parser = peg.buildParser(
var parser = peg.generate(
'start = "a" b:("b" !{ return b !== undefined; }) "c"',
options
);
@ -748,7 +748,7 @@ describe("generated parser behavior", function() {
});
it("cannot access variables defined by following labeled elements", function() {
var parser = peg.buildParser(
var parser = peg.generate(
'start = ("a" !{ return b !== "b"; }) b:"b"',
options
);
@ -760,7 +760,7 @@ describe("generated parser behavior", function() {
describe("initializer variables & functions", function() {
it("can access variables defined in the initializer", function() {
var parser = peg.buildParser([
var parser = peg.generate([
'{ var v = 42 }',
'start = !{ return v !== 42; }'
].join("\n"), options);
@ -769,7 +769,7 @@ describe("generated parser behavior", function() {
});
it("can access functions defined in the initializer", function() {
var parser = peg.buildParser([
var parser = peg.generate([
'{ function f() { return 42; } }',
'start = !{ return f() !== 42; }'
].join("\n"), options);
@ -780,7 +780,7 @@ describe("generated parser behavior", function() {
describe("available variables & functions", function() {
it("|parser| contains the parser object", function() {
var parser = peg.buildParser([
var parser = peg.generate([
'{ var result; }',
'start = !{ result = parser; return false; } { return result; }'
].join("\n"), options);
@ -789,7 +789,7 @@ describe("generated parser behavior", function() {
});
it("|options| contains options", function() {
var parser = peg.buildParser([
var parser = peg.generate([
'{ var result; }',
'start = !{ result = options; return false; } { return result; }'
].join("\n"), options);
@ -798,7 +798,7 @@ describe("generated parser behavior", function() {
});
it("|location| returns current location info", function() {
var parser = peg.buildParser([
var parser = peg.generate([
'{ var result; }',
'start = line (nl+ line)* { return result; }',
'line = thing (" "+ thing)*',
@ -829,7 +829,7 @@ describe("generated parser behavior", function() {
describe("group", function() {
describe("when the expression matches", function() {
it("returns its match result", function() {
var parser = peg.buildParser('start = ("a")', options);
var parser = peg.generate('start = ("a")', options);
expect(parser).toParse("a", "a");
});
@ -837,7 +837,7 @@ describe("generated parser behavior", function() {
describe("when the expression doesn't match", function() {
it("reports match failure", function() {
var parser = peg.buildParser('start = ("a")', options);
var parser = peg.generate('start = ("a")', options);
expect(parser).toFailToParse("b");
});
@ -847,7 +847,7 @@ describe("generated parser behavior", function() {
describe("optional", function() {
describe("when the expression matches", function() {
it("returns its match result", function() {
var parser = peg.buildParser('start = "a"?', options);
var parser = peg.generate('start = "a"?', options);
expect(parser).toParse("a", "a");
});
@ -855,7 +855,7 @@ describe("generated parser behavior", function() {
describe("when the expression doesn't match", function() {
it("returns |null|", function() {
var parser = peg.buildParser('start = "a"?', options);
var parser = peg.generate('start = "a"?', options);
expect(parser).toParse("", null);
});
@ -865,7 +865,7 @@ describe("generated parser behavior", function() {
describe("zero or more", function() {
describe("when the expression matches zero or more times", function() {
it("returns an array of its match results", function() {
var parser = peg.buildParser('start = "a"*', options);
var parser = peg.generate('start = "a"*', options);
expect(parser).toParse("", []);
expect(parser).toParse("a", ["a"]);
@ -877,7 +877,7 @@ describe("generated parser behavior", function() {
describe("one or more", function() {
describe("when the expression matches one or more times", function() {
it("returns an array of its match results", function() {
var parser = peg.buildParser('start = "a"+', options);
var parser = peg.generate('start = "a"+', options);
expect(parser).toParse("a", ["a"]);
expect(parser).toParse("aaa", ["a", "a", "a"]);
@ -886,7 +886,7 @@ describe("generated parser behavior", function() {
describe("when the expression doesn't match", function() {
it("reports match failure", function() {
var parser = peg.buildParser('start = "a"+', options);
var parser = peg.generate('start = "a"+', options);
expect(parser).toFailToParse("");
});
@ -896,7 +896,7 @@ describe("generated parser behavior", function() {
describe("text", function() {
describe("when the expression matches", function() {
it("returns the matched text", function() {
var parser = peg.buildParser('start = $("a" "b" "c")', options);
var parser = peg.generate('start = $("a" "b" "c")', options);
expect(parser).toParse("abc", "abc");
});
@ -904,7 +904,7 @@ describe("generated parser behavior", function() {
describe("when the expression doesn't match", function() {
it("reports match failure", function() {
var parser = peg.buildParser('start = $("a")', options);
var parser = peg.generate('start = $("a")', options);
expect(parser).toFailToParse("b");
});
@ -914,13 +914,13 @@ describe("generated parser behavior", function() {
describe("positive simple predicate", function() {
describe("when the expression matches", function() {
it("returns |undefined|", function() {
var parser = peg.buildParser('start = &"a" "a"', options);
var parser = peg.generate('start = &"a" "a"', options);
expect(parser).toParse("a", [undefined, "a"]);
});
it("resets parse position", function() {
var parser = peg.buildParser('start = &"a" "a"', options);
var parser = peg.generate('start = &"a" "a"', options);
expect(parser).toParse("a");
});
@ -928,13 +928,13 @@ describe("generated parser behavior", function() {
describe("when the expression doesn't match", function() {
it("reports match failure", function() {
var parser = peg.buildParser('start = &"a"', options);
var parser = peg.generate('start = &"a"', options);
expect(parser).toFailToParse("b");
});
it("discards any expectations recorded when matching the expression", function() {
var parser = peg.buildParser('start = "a" / &"b" / "c"', options);
var parser = peg.generate('start = "a" / &"b" / "c"', options);
expect(parser).toFailToParse("d", {
expected: [
@ -949,7 +949,7 @@ describe("generated parser behavior", function() {
describe("negative simple predicate", function() {
describe("when the expression matches", function() {
it("reports match failure", function() {
var parser = peg.buildParser('start = !"a"', options);
var parser = peg.generate('start = !"a"', options);
expect(parser).toFailToParse("a");
});
@ -957,19 +957,19 @@ describe("generated parser behavior", function() {
describe("when the expression doesn't match", function() {
it("returns |undefined|", function() {
var parser = peg.buildParser('start = !"a" "b"', options);
var parser = peg.generate('start = !"a" "b"', options);
expect(parser).toParse("b", [undefined, "b"]);
});
it("resets parse position", function() {
var parser = peg.buildParser('start = !"a" "b"', options);
var parser = peg.generate('start = !"a" "b"', options);
expect(parser).toParse("b");
});
it("discards any expectations recorded when matching the expression", function() {
var parser = peg.buildParser('start = "a" / !"b" / "c"', options);
var parser = peg.generate('start = "a" / !"b" / "c"', options);
expect(parser).toFailToParse("b", {
expected: [
@ -984,7 +984,7 @@ describe("generated parser behavior", function() {
describe("label", function() {
describe("when the expression matches", function() {
it("returns its match result", function() {
var parser = peg.buildParser('start = a:"a"', options);
var parser = peg.generate('start = a:"a"', options);
expect(parser).toParse("a", "a");
});
@ -992,7 +992,7 @@ describe("generated parser behavior", function() {
describe("when the expression doesn't match", function() {
it("reports match failure", function() {
var parser = peg.buildParser('start = a:"a"', options);
var parser = peg.generate('start = a:"a"', options);
expect(parser).toFailToParse("b");
});
@ -1002,7 +1002,7 @@ describe("generated parser behavior", function() {
describe("sequence", function() {
describe("when all expressions match", function() {
it("returns an array of their match results", function() {
var parser = peg.buildParser('start = "a" "b" "c"', options);
var parser = peg.generate('start = "a" "b" "c"', options);
expect(parser).toParse("abc", ["a", "b", "c"]);
});
@ -1010,7 +1010,7 @@ describe("generated parser behavior", function() {
describe("when any expression doesn't match", function() {
it("reports match failure", function() {
var parser = peg.buildParser('start = "a" "b" "c"', options);
var parser = peg.generate('start = "a" "b" "c"', options);
expect(parser).toFailToParse("dbc");
expect(parser).toFailToParse("adc");
@ -1018,7 +1018,7 @@ describe("generated parser behavior", function() {
});
it("resets parse position", function() {
var parser = peg.buildParser('start = "a" "b" / "a"', options);
var parser = peg.generate('start = "a" "b" / "a"', options);
expect(parser).toParse("a", "a");
});
@ -1028,7 +1028,7 @@ describe("generated parser behavior", function() {
describe("action", function() {
describe("when the expression matches", function() {
it("returns the value returned by the code", function() {
var parser = peg.buildParser('start = "a" { return 42; }', options);
var parser = peg.generate('start = "a" { return 42; }', options);
expect(parser).toParse("a", 42);
});
@ -1036,13 +1036,13 @@ describe("generated parser behavior", function() {
describe("label variables", function() {
describe("in the expression", function() {
it("can access variable defined by labeled expression", function() {
var parser = peg.buildParser('start = a:"a" { return a; }', options);
var parser = peg.generate('start = a:"a" { return a; }', options);
expect(parser).toParse("a", "a");
});
it("can access variables defined by labeled sequence elements", function() {
var parser = peg.buildParser(
var parser = peg.generate(
'start = a:"a" b:"b" c:"c" { return [a, b, c]; }',
options
);
@ -1100,7 +1100,7 @@ describe("generated parser behavior", function() {
parser, i;
for (i = 0; i < testcases.length; i++) {
parser = peg.buildParser(testcases[i].grammar, options);
parser = peg.generate(testcases[i].grammar, options);
expect(parser).toFailToParse(testcases[i].input);
}
});
@ -1108,7 +1108,7 @@ describe("generated parser behavior", function() {
describe("in outer sequence", function() {
it("can access variables defined by preceding labeled elements", function() {
var parser = peg.buildParser(
var parser = peg.generate(
'start = a:"a" ("b" { return a; })',
options
);
@ -1117,7 +1117,7 @@ describe("generated parser behavior", function() {
});
it("cannot access variable defined by labeled action element", function() {
var parser = peg.buildParser(
var parser = peg.generate(
'start = "a" b:("b" { return b; }) c:"c"',
options
);
@ -1126,7 +1126,7 @@ describe("generated parser behavior", function() {
});
it("cannot access variables defined by following labeled elements", function() {
var parser = peg.buildParser(
var parser = peg.generate(
'start = ("a" { return b; }) b:"b"',
options
);
@ -1138,7 +1138,7 @@ describe("generated parser behavior", function() {
describe("initializer variables & functions", function() {
it("can access variables defined in the initializer", function() {
var parser = peg.buildParser([
var parser = peg.generate([
'{ var v = 42 }',
'start = "a" { return v; }'
].join("\n"), options);
@ -1147,7 +1147,7 @@ describe("generated parser behavior", function() {
});
it("can access functions defined in the initializer", function() {
var parser = peg.buildParser([
var parser = peg.generate([
'{ function f() { return 42; } }',
'start = "a" { return f(); }'
].join("\n"), options);
@ -1158,7 +1158,7 @@ describe("generated parser behavior", function() {
describe("available variables & functions", function() {
it("|parser| contains the parser object", function() {
var parser = peg.buildParser(
var parser = peg.generate(
'start = "a" { return parser; }',
options
);
@ -1167,7 +1167,7 @@ describe("generated parser behavior", function() {
});
it("|options| contains options", function() {
var parser = peg.buildParser(
var parser = peg.generate(
'start = "a" { return options; }',
options
);
@ -1176,7 +1176,7 @@ describe("generated parser behavior", function() {
});
it("|text| returns text matched by the expression", function() {
var parser = peg.buildParser(
var parser = peg.generate(
'start = "a" { return text(); }',
options
);
@ -1185,7 +1185,7 @@ describe("generated parser behavior", function() {
});
it("|location| returns location info of the expression", function() {
var parser = peg.buildParser([
var parser = peg.generate([
'{ var result; }',
'start = line (nl+ line)* { return result; }',
'line = thing (" "+ thing)*',
@ -1213,7 +1213,7 @@ describe("generated parser behavior", function() {
describe("|expected|", function() {
it("terminates parsing and throws an exception", function() {
var parser = peg.buildParser(
var parser = peg.generate(
'start = "a" { expected("a"); }',
options
);
@ -1229,7 +1229,7 @@ describe("generated parser behavior", function() {
});
it("allows to set custom location info", function() {
var parser = peg.buildParser([
var parser = peg.generate([
'start = "a" {',
' expected("a", {',
' start: { offset: 1, line: 1, column: 2 },',
@ -1251,7 +1251,7 @@ describe("generated parser behavior", function() {
describe("|error|", function() {
it("terminates parsing and throws an exception", function() {
var parser = peg.buildParser(
var parser = peg.generate(
'start = "a" { error("a"); }',
options
);
@ -1267,7 +1267,7 @@ describe("generated parser behavior", function() {
});
it("allows to set custom location info", function() {
var parser = peg.buildParser([
var parser = peg.generate([
'start = "a" {',
' error("a", {',
' start: { offset: 1, line: 1, column: 2 },',
@ -1291,13 +1291,13 @@ describe("generated parser behavior", function() {
describe("when the expression doesn't match", function() {
it("reports match failure", function() {
var parser = peg.buildParser('start = "a" { return 42; }', options);
var parser = peg.generate('start = "a" { return 42; }', options);
expect(parser).toFailToParse("b");
});
it("doesn't execute the code", function() {
var parser = peg.buildParser(
var parser = peg.generate(
'start = "a" { throw "Boom!"; } / "b"',
options
);
@ -1310,7 +1310,7 @@ describe("generated parser behavior", function() {
describe("choice", function() {
describe("when any expression matches", function() {
it("returns its match result", function() {
var parser = peg.buildParser('start = "a" / "b" / "c"', options);
var parser = peg.generate('start = "a" / "b" / "c"', options);
expect(parser).toParse("a", "a");
expect(parser).toParse("b", "b");
@ -1320,7 +1320,7 @@ describe("generated parser behavior", function() {
describe("when all expressions don't match", function() {
it("reports match failure", function() {
var parser = peg.buildParser('start = "a" / "b" / "c"', options);
var parser = peg.generate('start = "a" / "b" / "c"', options);
expect(parser).toFailToParse("d");
});
@ -1330,7 +1330,7 @@ describe("generated parser behavior", function() {
describe("error reporting", function() {
describe("behavior", function() {
it("reports only the rightmost error", function() {
var parser = peg.buildParser('start = "a" "b" / "a" "c" "d"', options);
var parser = peg.generate('start = "a" "b" / "a" "c" "d"', options);
expect(parser).toFailToParse("ace", {
expected: [{ type: "literal", value: "d", description: '"d"' }]
@ -1340,7 +1340,7 @@ describe("generated parser behavior", function() {
describe("expectations reporting", function() {
it("reports expectations correctly with no alternative", function() {
var parser = peg.buildParser('start = "a"', options);
var parser = peg.generate('start = "a"', options);
expect(parser).toFailToParse("ab", {
expected: [{ type: "end", description: "end of input" }]
@ -1348,7 +1348,7 @@ describe("generated parser behavior", function() {
});
it("reports expectations correctly with one alternative", function() {
var parser = peg.buildParser('start = "a"', options);
var parser = peg.generate('start = "a"', options);
expect(parser).toFailToParse("b", {
expected: [{ type: "literal", value: "a", description: '"a"' }]
@ -1356,7 +1356,7 @@ describe("generated parser behavior", function() {
});
it("reports expectations correctly with multiple alternatives", function() {
var parser = peg.buildParser('start = "a" / "b" / "c"', options);
var parser = peg.generate('start = "a" / "b" / "c"', options);
expect(parser).toFailToParse("d", {
expected: [
@ -1375,7 +1375,7 @@ describe("generated parser behavior", function() {
*
* See https://github.com/pegjs/pegjs/pull/146.
*/
var parser = peg.buildParser('start = "a" / "a" / "a"', options);
var parser = peg.generate('start = "a" / "a" / "a"', options);
expect(parser).toFailToParse("b", {
expected: [{ type: "literal", value: "a", description: '"a"' }]
@ -1383,7 +1383,7 @@ describe("generated parser behavior", function() {
});
it("sorts expectations", function() {
var parser = peg.buildParser('start = "c" / "b" / "a"', options);
var parser = peg.generate('start = "c" / "b" / "a"', options);
expect(parser).toFailToParse("d", {
expected: [
@ -1397,7 +1397,7 @@ describe("generated parser behavior", function() {
describe("message building", function() {
it("builds message correctly with no alternative", function() {
var parser = peg.buildParser('start = "a"', options);
var parser = peg.generate('start = "a"', options);
expect(parser).toFailToParse("ab", {
message: 'Expected end of input.'
@ -1405,7 +1405,7 @@ describe("generated parser behavior", function() {
});
it("builds message correctly with one alternative", function() {
var parser = peg.buildParser('start = "a"', options);
var parser = peg.generate('start = "a"', options);
expect(parser).toFailToParse("b", {
message: 'Expected "a".'
@ -1413,7 +1413,7 @@ describe("generated parser behavior", function() {
});
it("builds message correctly with multiple alternatives", function() {
var parser = peg.buildParser('start = "a" / "b" / "c"', options);
var parser = peg.generate('start = "a" / "b" / "c"', options);
expect(parser).toFailToParse("d", {
message: 'Expected "a", "b" or "c".'
@ -1423,7 +1423,7 @@ describe("generated parser behavior", function() {
describe("position reporting", function() {
it("reports position correctly with no trailing input", function() {
var parser = peg.buildParser('start = "a"', options);
var parser = peg.generate('start = "a"', options);
expect(parser).toFailToParse("b", {
location: {
@ -1434,7 +1434,7 @@ describe("generated parser behavior", function() {
});
it("reports position correctly with trailing input", function() {
var parser = peg.buildParser('start = "a"', options);
var parser = peg.generate('start = "a"', options);
expect(parser).toFailToParse("aa", {
location: {
@ -1445,7 +1445,7 @@ describe("generated parser behavior", function() {
});
it("reports position correctly in complex cases", function() {
var parser = peg.buildParser([
var parser = peg.generate([
'start = line (nl+ line)*',
'line = digit (" "+ digit)*',
'digit = [0-9]',
@ -1488,7 +1488,7 @@ describe("generated parser behavior", function() {
* Sum Product (('+' / '-') Product)*
* Expr Sum
*/
var parser = peg.buildParser([
var parser = peg.generate([
'Expr = Sum',
'Sum = first:Product rest:(("+" / "-") Product)* {',
' var result = first, i;',
@ -1544,7 +1544,7 @@ describe("generated parser behavior", function() {
* A a A? b
* B b B? c
*/
var parser = peg.buildParser([
var parser = peg.generate([
'S = &(A "c") a:"a"+ B:B !("a" / "b" / "c") { return a.join("") + B; }',
'A = a:"a" A:A? b:"b" { return [a, A, b].join(""); }',
'B = b:"b" B:B? c:"c" { return [b, B, c].join(""); }'
@ -1568,7 +1568,7 @@ describe("generated parser behavior", function() {
* N C / (!Begin !End Z)
* Z any single character
*/
var parser = peg.buildParser([
var parser = peg.generate([
'C = begin:Begin ns:N* end:End { return begin + ns.join("") + end; }',
'N = C',
' / !Begin !End z:Z { return z; }',

Loading…
Cancel
Save