@drewsonne/maya-calculator-parser
Version:
Typescript package to parse plaintext calculations and create operators
108 lines • 4.37 kB
JavaScript
;
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 layer_2_test_1 = require("./layer-2-test");
var full_date_wildcard_operation_token_1 = __importDefault(require("../tokens/layer-3/full-date-wildcard-operation-token"));
var full_date_token_1 = __importDefault(require("../tokens/layer-3/full-date-token"));
var base_parser_1 = __importDefault(require("./base-parser"));
var FIFOQueue = (function () {
function FIFOQueue(length) {
this.size = length;
this.queue = [];
}
FIFOQueue.prototype.push = function (item) {
this.queue.push(item);
if (this.queue.length <= this.size) {
return undefined;
}
else {
return this.queue.shift();
}
};
Object.defineProperty(FIFOQueue.prototype, "length", {
get: function () {
return this.queue.length;
},
enumerable: false,
configurable: true
});
FIFOQueue.prototype.isFull = function () {
return this.size === this.length;
};
FIFOQueue.prototype.peek = function (size) {
return this.queue.slice(0, size);
};
FIFOQueue.prototype.reset = function () {
this.queue = [];
};
FIFOQueue.prototype.pop = function (size) {
var response = this.peek(size);
this.queue = this.queue.slice(size);
return response;
};
FIFOQueue.prototype.toString = function () {
return this.queue.join(', ');
};
return FIFOQueue;
}());
var Layer3Parser = (function (_super) {
__extends(Layer3Parser, _super);
function Layer3Parser() {
return _super !== null && _super.apply(this, arguments) || this;
}
Layer3Parser.prototype.parse = function (rawTokens) {
var tokens = [], queueLength = 2;
var window = new FIFOQueue(queueLength);
for (var cursor = 0; cursor < rawTokens.length; cursor += 1) {
var currentToken = window.push(rawTokens.index(cursor));
if (window.isFull()) {
if (currentToken !== undefined) {
tokens.push(currentToken);
}
var _a = window.peek(2), former = _a[0], latter = _a[1];
if (layer_2_test_1.isCalendarRoundWildcardOperationToken(former) ||
layer_2_test_1.isLongCountWildcardOperationToken(latter)) {
tokens.push(full_date_wildcard_operation_token_1.default.parse(former, latter));
window.pop(queueLength);
}
else if (layer_2_test_1.isCalendarRoundWildcardOperationToken(latter) ||
layer_2_test_1.isLongCountWildcardOperationToken(former)) {
tokens.push(full_date_wildcard_operation_token_1.default.parse(latter, former));
window.pop(queueLength);
}
else if (layer_2_test_1.isCalendarRoundToken(former) &&
layer_2_test_1.isLongCountToken(latter)) {
tokens.push(full_date_token_1.default.parse(former, latter));
window.pop(queueLength);
}
else {
debugger;
tokens.push();
}
}
}
while (window.length > 0) {
tokens.push(window.pop(1)[0]);
}
return new collection_1.default(this.appendLineEnd(tokens));
};
return Layer3Parser;
}(base_parser_1.default));
exports.default = Layer3Parser;
//# sourceMappingURL=layer-3-parser.js.map