tibu
Version:
tibu is a low fuss high fun PEG parser generator/DSL written in TypeScript
297 lines • 22.8 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Input = exports.ResultTokens = exports.Result = exports.Tibu = void 0;
var tibu_Input_1 = require("./tibu.Input");
Object.defineProperty(exports, "Input", { enumerable: true, get: function () { return tibu_Input_1.Input; } });
var tibu_Result_1 = require("./tibu.Result");
Object.defineProperty(exports, "Result", { enumerable: true, get: function () { return tibu_Result_1.Result; } });
var tibu_ResultTokens_1 = require("./tibu.ResultTokens");
Object.defineProperty(exports, "ResultTokens", { enumerable: true, get: function () { return tibu_ResultTokens_1.ResultTokens; } });
var Tibu = /** @class */ (function () {
function Tibu() {
}
/**
* Removes
*/
Tibu.flat = function (arr) {
return arr.reduce(function (a, b) { return a.concat(Array.isArray(b) ? Tibu.flat(b) : b); }, []);
};
Tibu.parse = function (source) {
var input = new tibu_Input_1.Input(source);
return function () {
var rules = [];
for (var _i = 0; _i < arguments.length; _i++) {
rules[_i] = arguments[_i];
}
var results = [];
for (var _a = 0, rules_1 = rules; _a < rules_1.length; _a++) {
var rule = rules_1[_a];
var result = Tibu.parserule(input, rule);
if (result === false) {
break;
}
results.push(result);
}
return results;
};
};
Tibu.parserule = function (input, rule) {
if (rule.breakonentry) {
// tslint:disable-next-line:no-debugger
debugger;
}
var tokens = new tibu_ResultTokens_1.ResultTokens();
var ref = input.begin(tokens);
var x;
var matches = [];
for (var _i = 0, rule_1 = rule; _i < rule_1.length; _i++) {
var predicate = rule_1[_i];
x = input.consume(predicate);
matches.push(x);
if (x.success === false) {
break;
}
}
if (x.success === false) {
input.rewind(ref);
return false;
}
input.end();
var fragment = input.source.slice(ref, input.location);
if (rule.yielder) {
return rule.yielder(tokens, matches.map(function (match) { return match.yielded; }), fragment, { start: ref, end: input.location });
}
return matches;
};
Tibu.rule = function () {
var patterns = [];
for (var _i = 0; _i < arguments.length; _i++) {
patterns[_i] = arguments[_i];
}
var predicates = Tibu.ensurePredicates.apply(Tibu, patterns);
predicates.__rule__ = true;
predicates.yields = function (handler) {
predicates.yielder = handler;
return predicates;
};
predicates.passes = function (source, expected) {
Tibu.tests.push(function () {
var result = null;
Tibu.parse(source)(Tibu.rule(predicates).yields(function (r, c) {
result = c[0];
return null;
}));
return { expected: expected, actual: result, source: predicates.toString() };
});
return predicates;
};
return predicates;
};
Tibu.debugrule = function () {
var patterns = [];
for (var _i = 0; _i < arguments.length; _i++) {
patterns[_i] = arguments[_i];
}
var thisrule = Tibu.rule.apply(Tibu, patterns);
thisrule.breakonentry = true;
return thisrule;
};
Tibu.ensurePredicates = function () {
var patterns = [];
for (var _i = 0; _i < arguments.length; _i++) {
patterns[_i] = arguments[_i];
}
return patterns.map(function (pattern) {
var predicate = null;
switch (pattern.__proto__.constructor.name) {
case "String":
predicate = function (input) {
var ix = input.indexOf(pattern);
var success = ix === 0;
var startloc = input.location;
var endloc = input.location + pattern.length;
return {
success: success,
startloc: startloc,
endloc: endloc,
value: pattern,
children: [],
yielded: undefined // pattern
};
};
predicate.toString = function () {
return "" + pattern;
};
return predicate;
case "RegExp":
predicate = function (input) {
var rxix = input.indexOf(pattern);
var success = rxix.index === 0;
var startloc = input.location;
var endloc = input.location + rxix.length;
return {
success: success,
startloc: startloc,
endloc: endloc,
value: rxix.value,
children: [],
yielded: undefined // rxix.value
};
};
predicate.toString = function () {
return "regex(" + pattern.toString() + ")";
};
return predicate;
case "Function":
return pattern;
// subrule case, trampoline time!
case "Array":
predicate = function (input) {
if (pattern.breakonentry) {
// tslint:disable-next-line:no-debugger
debugger;
}
if (pattern.yielder) {
var start = input.location;
var frozentokens = input.tokens;
input.tokens = new tibu_ResultTokens_1.ResultTokens();
var result = Tibu.all.apply(Tibu, pattern)(input);
if (result.success) {
var end = input.location;
var fragment = input.source.substring(start, end);
var subruleyield = pattern.yielder(input.tokens, result.yielded, fragment, { start: start, end: end });
result.yielded = subruleyield;
}
input.tokens = frozentokens;
return result;
}
else {
return Tibu.all.apply(Tibu, pattern)(input);
}
};
predicate.toString = function () {
return "pred:" + pattern.map(function (p) { return p.toString(); }).join("/");
};
return predicate;
default:
throw new Error("oops");
}
});
};
Tibu.all = function () {
var patterns = [];
for (var _i = 0; _i < arguments.length; _i++) {
patterns[_i] = arguments[_i];
}
var all = function (input) {
var location = input.location;
var consumed = [];
var fault = false;
for (var _i = 0, _a = Tibu.ensurePredicates.apply(Tibu, patterns); _i < _a.length; _i++) {
var pattern = _a[_i];
var nxt = input.consume(pattern);
if (nxt.success) {
consumed.push(nxt);
}
else {
input.rewind(location);
// input.unconsume(...consumed);
fault = true;
break;
}
}
if (fault) {
return tibu_Result_1.Result.fault(input);
}
else {
return tibu_Result_1.Result.composite.apply(tibu_Result_1.Result, consumed);
}
};
all.pattern = patterns;
return all;
};
Tibu.optional = function () {
var patterns = [];
for (var _i = 0; _i < arguments.length; _i++) {
patterns[_i] = arguments[_i];
}
var optional = function (input) {
var outcome = Tibu.all.apply(Tibu, patterns)(input);
if (outcome.success) {
return outcome;
}
else {
return tibu_Result_1.Result.pass(input);
}
};
optional.pattern = patterns;
return optional;
};
Tibu.either = function () {
var patterns = [];
for (var _i = 0; _i < arguments.length; _i++) {
patterns[_i] = arguments[_i];
}
var either = function (input) {
var outcome = tibu_Result_1.Result.fault(input);
for (var _i = 0, _a = Tibu.ensurePredicates.apply(Tibu, patterns); _i < _a.length; _i++) {
var pattern = _a[_i];
var current = input.consume(pattern);
if (current.success) {
outcome = current;
break;
}
}
return outcome;
};
either.toString = function () {
return "either(" + patterns.map(function (p) { return p.toString(); }).join(",") + ")";
};
either.pattern = patterns;
return either;
};
Tibu.many = function () {
var patterns = [];
for (var _i = 0; _i < arguments.length; _i++) {
patterns[_i] = arguments[_i];
}
var many = function (input) {
var location;
var consumed = [];
var current;
var nothingleft = false;
while (true) {
location = input.location;
current = Tibu.all.apply(Tibu, patterns)(input);
if (current.success) {
consumed.push(current);
}
else {
nothingleft = true;
}
// stalled
if (input.location === location || nothingleft) {
break;
}
}
if (consumed.length === 0) {
consumed = [tibu_Result_1.Result.pass(input)];
}
return tibu_Result_1.Result.composite.apply(tibu_Result_1.Result, consumed);
};
many.toString = function () {
return "many(" + patterns.map(function (p) { return p.toString(); }).join(",") + ")";
};
many.pattern = patterns;
return many;
};
Tibu.token = function (name, pattern) {
var func = Tibu.ensurePredicates(pattern);
func[0].__token__ = name;
return func[0];
};
Tibu.tests = [];
return Tibu;
}());
exports.Tibu = Tibu;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlidS5qcyIsInNvdXJjZVJvb3QiOiIuL3NyYy8iLCJzb3VyY2VzIjpbInRpYnUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkNBQXFDO0FBZ1JqQyxzRkFoUkssa0JBQUssT0FnUkw7QUEvUVQsNkNBQXVDO0FBNlFuQyx1RkE3UUssb0JBQU0sT0E2UUw7QUE1UVYseURBQW1EO0FBNlEvQyw2RkE3UUssZ0NBQVksT0E2UUw7QUEzUWhCO0lBQUE7SUEwUEEsQ0FBQztJQXhQRzs7T0FFRztJQUNXLFNBQUksR0FBbEIsVUFBbUIsR0FBVTtRQUN6QixPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQ2IsVUFBQyxDQUFDLEVBQUUsQ0FBQyxJQUFLLE9BQUEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBN0MsQ0FBNkMsRUFBRSxFQUFFLENBQzlELENBQUM7SUFDTixDQUFDO0lBQ2EsVUFBSyxHQUFuQixVQUFvQixNQUFjO1FBQzlCLElBQUksS0FBSyxHQUFVLElBQUksa0JBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyQyxPQUFPO1lBQUMsZUFBZTtpQkFBZixVQUFlLEVBQWYscUJBQWUsRUFBZixJQUFlO2dCQUFmLDBCQUFlOztZQUNuQixJQUFNLE9BQU8sR0FBVSxFQUFFLENBQUM7WUFDMUIsS0FBaUIsVUFBSyxFQUFMLGVBQUssRUFBTCxtQkFBSyxFQUFMLElBQUssRUFBRTtnQkFBbkIsSUFBSSxJQUFJLGNBQUE7Z0JBQ1QsSUFBTSxNQUFNLEdBQWtCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUMxRCxJQUFJLE1BQU0sS0FBSyxLQUFLLEVBQUU7b0JBQ2xCLE1BQU07aUJBQ1Q7Z0JBQ0QsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFh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