UNPKG

@drewsonne/maya-calculator-parser

Version:

Typescript package to parse plaintext calculations and create operators

200 lines 8.78 kB
"use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); var collection_1 = __importDefault(require("../tokens/collection")); var space_token_1 = __importDefault(require("../tokens/layer-0/space-token")); var calendar_round_token_1 = __importDefault(require("../tokens/layer-1/calendar-round-token")); var long_count_token_1 = __importDefault(require("../tokens/layer-1/long-count-token")); var layer_1_test_1 = require("./layer-1-test"); var base_parser_1 = __importDefault(require("./base-parser")); var layer_2_test_1 = require("./layer-2-test"); var Layer1ParserStateValue; (function (Layer1ParserStateValue) { Layer1ParserStateValue[Layer1ParserStateValue["WAITING"] = 0] = "WAITING"; Layer1ParserStateValue[Layer1ParserStateValue["PARSING_DATE"] = 1] = "PARSING_DATE"; Layer1ParserStateValue[Layer1ParserStateValue["PARSING_CALENDAR_ROUND"] = 2] = "PARSING_CALENDAR_ROUND"; Layer1ParserStateValue[Layer1ParserStateValue["PARSING_LONG_COUNT"] = 3] = "PARSING_LONG_COUNT"; Layer1ParserStateValue[Layer1ParserStateValue["PARSING_COMMENT"] = 4] = "PARSING_COMMENT"; })(Layer1ParserStateValue || (Layer1ParserStateValue = {})); var Layer1ParserState = (function () { function Layer1ParserState() { this.state = Layer1ParserStateValue.WAITING; } Layer1ParserState.prototype.reset = function () { this.state = Layer1ParserStateValue.WAITING; }; Layer1ParserState.prototype.isWaiting = function () { return this.state === Layer1ParserStateValue.WAITING; }; Layer1ParserState.prototype.isParsingDate = function () { return this.state === Layer1ParserStateValue.PARSING_DATE; }; Layer1ParserState.prototype.isParsingCalendarRound = function () { return this.state === Layer1ParserStateValue.PARSING_CALENDAR_ROUND; }; Layer1ParserState.prototype.isParsingLongCount = function () { return this.state === Layer1ParserStateValue.PARSING_LONG_COUNT; }; Layer1ParserState.prototype.isParsingComment = function () { return this.state === Layer1ParserStateValue.PARSING_COMMENT; }; Layer1ParserState.prototype.startParsingDate = function () { this.state = Layer1ParserStateValue.PARSING_DATE; }; Layer1ParserState.prototype.startParsingCalendarRound = function () { this.state = Layer1ParserStateValue.PARSING_CALENDAR_ROUND; }; Layer1ParserState.prototype.startParsingLongCount = function () { this.state = Layer1ParserStateValue.PARSING_LONG_COUNT; }; Layer1ParserState.prototype.startParsingComment = function () { this.state = Layer1ParserStateValue.PARSING_COMMENT; }; return Layer1ParserState; }()); var Layer1Parser = (function (_super) { __extends(Layer1Parser, _super); function Layer1Parser() { var _this = _super.call(this) || this; _this.state = new Layer1ParserState(); return _this; } Layer1Parser.prototype.parse = function (rawTokens) { var tokens = []; var cache = []; for (var cursor = 0; cursor < rawTokens.length; cursor += 1) { var token = rawTokens.index(cursor); if (this.state.isWaiting()) { if (layer_1_test_1.isNumberToken(token) || layer_1_test_1.isWildcardToken(token)) { cache.push(token); this.state.startParsingDate(); } else if (layer_1_test_1.isCommentToken(token) || layer_2_test_1.isOperatorToken(token)) { tokens.push(token); } else if ((token instanceof space_token_1.default)) { continue; } else if (layer_1_test_1.isCommentToken(token) || layer_1_test_1.isLineEndToken(token)) { tokens.push(token); } else { throw new Error('Layer-1 parser in unexpected state'); } } else if (this.state.isParsingDate()) { if (layer_2_test_1.isSpaceToken(token) || layer_1_test_1.isWildcardToken(token) || layer_1_test_1.isNumberToken(token)) { cache.push(token); } else if (layer_1_test_1.isWordToken(token)) { cache.push(token); this.state.startParsingCalendarRound(); } else if (layer_1_test_1.isPeriodToken(token)) { cache.push(token); this.state.startParsingLongCount(); } else if (layer_1_test_1.isLineEndToken(token)) { debugger; } else { throw new Error('Layer-1 parser in unexpected state'); } } else if (this.state.isParsingCalendarRound()) { if (layer_1_test_1.isFullCR(cache)) { tokens.push(calendar_round_token_1.default.parse(cache)); cache = []; this.state.reset(); cursor -= 1; } else if (layer_1_test_1.isPartialCR(cache)) { cache.push(token); } else { throw new Error('Layer-1 parser in unexpected state'); } } else if (this.state.isParsingLongCount()) { if (layer_2_test_1.isSpaceToken(token)) { continue; } else if (layer_1_test_1.isPartialLC(cache, token)) { if (layer_1_test_1.isNumberToken(token) || layer_1_test_1.isPeriodToken(token) || layer_1_test_1.isWildcardToken(token)) { cache.push(token); } else if (layer_1_test_1.isLineEndToken(token) || layer_2_test_1.isOperatorToken(token) || layer_1_test_1.isCommentToken(token)) { tokens.push(long_count_token_1.default.parse(cache)); tokens.push(token); cache = []; this.state.reset(); } else if (layer_2_test_1.isSpaceToken(token)) { continue; } else { throw new Error('Layer-1 parser in unexpected state'); } } else { tokens.push(long_count_token_1.default.parse(cache)); cache = []; cursor -= 1; this.state.reset(); } } else if (this.state.isParsingComment()) { throw new Error('Layer-1 parser in unexpected state'); } else { throw new Error('Layer-1 parser in unexpected state'); } } if (cache.length > 0) { if (this.state.isParsingCalendarRound()) { if (layer_1_test_1.isFullCR(cache)) { tokens.push(calendar_round_token_1.default.parse(cache)); cache = []; } else { throw new Error('Layer-1 parser in unexpected state'); } } else if (this.state.isParsingLongCount()) { tokens.push(long_count_token_1.default.parse(cache)); cache = []; } else { throw new Error('Layer-1 parser in unexpected state'); } } return new collection_1.default(this.appendLineEnd(tokens)); }; return Layer1Parser; }(base_parser_1.default)); exports.default = Layer1Parser; //# sourceMappingURL=layer-1-parser.js.map