parjs
Version:
A parser-combinator library for JavaScript.
65 lines (64 loc) • 1.85 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
/**
* @module parjs/internal
*/
/** */
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;
// tslint:disable:naming-convention
/**
* 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