parjs
Version:
Library for building parsers using combinators.
57 lines • 1.86 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.UNINITIALIZED_RESULT = exports.FAIL_RESULT = exports.BasicParsingState = void 0;
const result_1 = require("./result");
function worseThan(a, b) {
if (a === result_1.ResultKind.Ok) {
return b === result_1.ResultKind.Ok;
}
if (a === result_1.ResultKind.SoftFail) {
return b === result_1.ResultKind.SoftFail || b === result_1.ResultKind.Ok;
}
if (a === result_1.ResultKind.HardFail) {
return b !== result_1.ResultKind.FatalFail;
}
if (a === result_1.ResultKind.FatalFail) {
return true;
}
}
/** Basic implementation of the ParsingState interface. */
class BasicParsingState {
constructor(input, userState) {
this.input = input;
this.userState = userState;
this.position = 0;
this.stack = [];
this.initialUserState = undefined;
this.value = undefined;
}
get isOk() {
return this.kind === result_1.ResultKind.Ok;
}
get isSoft() {
return this.kind === result_1.ResultKind.SoftFail;
}
get isHard() {
return this.kind === result_1.ResultKind.HardFail;
}
get isFatal() {
return this.kind === result_1.ResultKind.FatalFail;
}
atLeast(kind) {
return worseThan(this.kind, kind);
}
atMost(kind) {
return worseThan(kind, this.kind);
}
}
exports.BasicParsingState = BasicParsingState;
/** A unique object value indicating the reuslt of a failed parser. */
exports.FAIL_RESULT = Object.create(null);
/**
* A unique object value indicating that a parser did not initialize the ParsingState's value
* property before terminating, which is an error.
*/
exports.UNINITIALIZED_RESULT = Object.create(null);
// tslint:enable:naming-convention
//# sourceMappingURL=state.js.map