UNPKG

@madie/cql-antlr-parser

Version:
67 lines 2.54 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const antlr4ts_1 = require("antlr4ts"); const tree_1 = require("antlr4ts/tree"); const generated_1 = require("../generated"); const CqlAntlrListener_1 = __importDefault(require("./CqlAntlrListener")); const CustomErrorListener_1 = __importDefault(require("./CustomErrorListener")); class CqlAntlr { constructor(cql) { this.cql = cql; } parse() { const result = CqlAntlr.initCqlResult(); if (!this.cql || !this.cql.trim()) { return result; } const tree = this.buildTree(result); const charStream = antlr4ts_1.CharStreams.fromString(this.cql); const lexer = new generated_1.cqlLexer(charStream); const bufferedTokenStream = new antlr4ts_1.BufferedTokenStream(lexer); bufferedTokenStream.fill(); const listener = new CqlAntlrListener_1.default(result, bufferedTokenStream); tree_1.ParseTreeWalker.DEFAULT.walk(listener, tree); /** * Disabled. Only partially implemented and would be * a duplicate of checks performed by the CQL-to-ELM Translator. */ // const cqlExpressionVisitor = new CqlExpressionVisitor(result); // cqlExpressionVisitor.visit(tree); return result; } static initCqlResult() { return { includes: [], usings: [], codeSystems: [], valueSets: [], codes: [], parameters: [], identifiers: [], expressionDefinitions: [], errors: [], retrieves: [], }; } buildTree(cqlResult) { const parser = this.buildParser(); // remove default ConsoleErrorListener parser.removeErrorListeners(); // add custom ErrorListener parser.addErrorListener(new CustomErrorListener_1.default(cqlResult)); return parser.library(); } buildParser() { const charStream = antlr4ts_1.CharStreams.fromString(this.cql); // eslint-disable-next-line new-cap const lexer = new generated_1.cqlLexer(charStream); const tokenStream = new antlr4ts_1.CommonTokenStream(lexer); // eslint-disable-next-line new-cap return new generated_1.cqlParser(tokenStream); } } exports.default = CqlAntlr; //# sourceMappingURL=CqlAntlr.js.map