UNPKG

pddl-workspace

Version:
67 lines 2.76 kB
"use strict"; /* -------------------------------------------------------------------------------------------- * Copyright (c) Jan Dolejsi. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. * ------------------------------------------------------------------------------------------ */ Object.defineProperty(exports, "__esModule", { value: true }); exports.NumericExpressionParser = void 0; // import { PddlTokenType } from "./PddlTokenizer"; // import { PddlRange, DocumentPositionResolver } from "../DocumentPositionResolver"; const NumericExpression_1 = require("../NumericExpression"); const __1 = require(".."); /** * Parses `(+ (a) (b))` numeric expressions. */ class NumericExpressionParser { constructor(rootNode) { this.expression = this.parseNode(rootNode); } getExpression() { return this.expression; } parseNode(node) { switch (node.getToken().tokenText) { case '(+': const summants = this.parseChildren(node); return new NumericExpression_1.Sum(summants); case '(*': const multiplicants = this.parseChildren(node); return new NumericExpression_1.Product(multiplicants); case '(/': { const operands = this.parseChildren(node); if (operands.length === 2) { return new NumericExpression_1.Division(operands[0], operands[1]); } else { return undefined; } } case '(-': { const operands = this.parseChildren(node); if (operands.length === 2) { return new NumericExpression_1.Subtraction(operands[0], operands[1]); } else { return undefined; } } } if (node.getToken().tokenText.startsWith('(')) { return new __1.VariableExpression(node.getNestedText()); } else if (parseFloat(node.getToken().tokenText)) { // the parsed value may be NaN return new NumericExpression_1.NumericLiteral(parseFloat(node.getToken().tokenText)); } return undefined; } parseChildren(node) { return node.getNonWhitespaceNonCommentChildren() .map(childNode => this.parseNode(childNode)) // todo: should not be filtering out elements that failed to parse, but rather reporting the failure .filter(c => !!c) .map(c => c); } } exports.NumericExpressionParser = NumericExpressionParser; //# sourceMappingURL=NumericExpressionParser.js.map