@madie/cql-antlr-parser
Version:
Antlr Parsing of CQL in typescript
67 lines • 2.54 kB
JavaScript
;
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