parjs
Version:
A parser-combinator library for JavaScript.
38 lines (37 loc) • 1.22 kB
JavaScript
;
/**
* @module parjs/combinators
*/
/** */
Object.defineProperty(exports, "__esModule", { value: true });
const result_1 = require("../result");
const combinator_1 = require("./combinator");
const parser_1 = require("../parser");
function exactly(count) {
return combinator_1.defineCombinator(source => {
return new class Exactly extends parser_1.ParjserBase {
constructor() {
super(...arguments);
this.type = "exactly";
this.expecting = source.expecting;
}
_apply(ps) {
let arr = [];
for (let i = 0; i < count; i++) {
source.apply(ps);
if (!ps.isOk) {
if (ps.kind === result_1.ResultKind.SoftFail && i > 0) {
ps.kind = result_1.ResultKind.HardFail;
}
// fail because the inner parser has failed.
return;
}
arr.push(ps.value);
}
ps.value = arr;
}
}();
});
}
exports.exactly = exactly;
//# sourceMappingURL=exactly.js.map