@schoenbergerb/logical-expression-parser
Version:
Logical expression parser and evaluates result, suitable for permissions management
40 lines • 1.64 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ExpressionParser = void 0;
const make_ast_1 = require("./make-ast");
const node_evaluator_1 = require("./node-evaluator");
const polish_1 = require("./polish");
const token_type_1 = require("./token-type");
const tokenizer_1 = require("./tokenizer");
class ExpressionParser {
literalCheck = (item, entities) => entities.includes(item);
tokens;
constructor(tokens, litCheck) {
this.tokens = new Map([
[token_type_1.Token.PARENTHESES_OPEN, '('],
[token_type_1.Token.PARENTHESES_CLOSE, ')'],
[token_type_1.Token.OPERATOR_NOT, '!'],
[token_type_1.Token.OPERATOR_AND, '&'],
[token_type_1.Token.OPERATOR_OR, '/'],
[token_type_1.Token.LITERAL, 'LITERAL'],
[token_type_1.Token.END, 'END'],
[token_type_1.Token.LEAF, 'LEAF'],
[token_type_1.Token.ATOMIC, 'ATOMIC'],
]);
for (const [t, v] of tokens) {
this.tokens.set(t, v);
}
if (litCheck) {
this.literalCheck = litCheck;
}
}
evaluate = (expression, entities) => {
const tokenized = (0, tokenizer_1.Tokenizer)(expression, this.tokens);
const polish = (0, polish_1.PolishNotation)(tokenized, this.tokens);
const gen = (0, polish_1.PolishGenerator)(polish);
const ast = (0, make_ast_1.make)(gen);
return (0, node_evaluator_1.nodeEvaluator)(ast, this.literalCheck, entities);
};
}
exports.ExpressionParser = ExpressionParser;
//# sourceMappingURL=expression.parser.js.map