mirror of
https://github.com/jashkenas/coffeescript.git
synced 2026-02-18 03:21:20 -05:00
73 lines
1.8 KiB
JavaScript
73 lines
1.8 KiB
JavaScript
var Jison = require("../setup").Jison,
|
|
Lexer = require("../setup").Lexer,
|
|
assert = require("assert");
|
|
|
|
var lexData = {
|
|
rules: [
|
|
["x", "return 'x';"],
|
|
["y", "return 'y';"]
|
|
]
|
|
};
|
|
|
|
exports["test left-recursive nullable grammar"] = function () {
|
|
|
|
var grammar = {
|
|
tokens: [ 'x' ],
|
|
startSymbol: "A",
|
|
bnf: {
|
|
"A" :[ 'A x',
|
|
'' ]
|
|
}
|
|
};
|
|
|
|
var parser = new Jison.Parser(grammar, {type: "lr0"});
|
|
parser.lexer = new Lexer(lexData);
|
|
|
|
assert.ok(parser.parse('xxx'), "parse 3 x's");
|
|
assert.ok(parser.parse("x"), "parse single x");
|
|
assert["throws"](function () {parser.parse("y")}, "throws parse error on invalid token");
|
|
};
|
|
|
|
exports["test right-recursive nullable grammar"] = function () {
|
|
|
|
var grammar = {
|
|
tokens: [ 'x' ],
|
|
startSymbol: "A",
|
|
bnf: {
|
|
"A" :[ 'x A',
|
|
'' ]
|
|
}
|
|
};
|
|
|
|
var gen = new Jison.Generator(grammar, {type: "lr0"});
|
|
|
|
assert.ok(gen.table.length == 4, "table has 4 states");
|
|
assert.ok(gen.conflicts == 2, "encountered 2 conflicts");
|
|
};
|
|
|
|
exports["test 0+0 grammar"] = function () {
|
|
var lexData2 = {
|
|
rules: [
|
|
["0", "return 'ZERO';"],
|
|
["\\+", "return 'PLUS';"]
|
|
]
|
|
};
|
|
var grammar = {
|
|
tokens: [ "ZERO", "PLUS"],
|
|
startSymbol: "E",
|
|
bnf: {
|
|
"E" :[ "E PLUS T",
|
|
"T" ],
|
|
"T" :[ "ZERO" ]
|
|
}
|
|
};
|
|
|
|
var parser = new Jison.Parser(grammar, {type: "lr0"});
|
|
parser.lexer = new Lexer(lexData2);
|
|
|
|
assert.ok(parser.parse("0+0+0"), "parse");
|
|
assert.ok(parser.parse("0"), "parse single 0");
|
|
|
|
assert["throws"](function () {parser.parse("+")}, "throws parse error on invalid");
|
|
};
|