@abaplint/core
Version:
abaplint - Core API
45 lines • 2.27 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.CDSParser = void 0;
const tokens_1 = require("../abap/1_lexer/tokens");
const combi_1 = require("../abap/2_statements/combi");
const nodes_1 = require("../abap/nodes");
const version_1 = require("../version");
const cds_lexer_1 = require("./cds_lexer");
const Expressions = require("./expressions");
// todo: the names of the ABAP + CDS + DDL expressions might overlap, if overlapping the singleton will fail
class CDSParser {
parse(file) {
if (file === undefined) {
return undefined;
}
let tokens = cds_lexer_1.CDSLexer.run(file);
tokens = tokens.filter(t => !(t instanceof tokens_1.Comment));
// console.dir(tokens);
let res = combi_1.Combi.run(new Expressions.CDSDefineView(), tokens, version_1.defaultVersion);
if (res === undefined || !(res[0] instanceof nodes_1.ExpressionNode)) {
res = combi_1.Combi.run(new Expressions.CDSDefineAbstract(), tokens, version_1.defaultVersion);
}
if (res === undefined || !(res[0] instanceof nodes_1.ExpressionNode)) {
res = combi_1.Combi.run(new Expressions.CDSDefineProjection(), tokens, version_1.defaultVersion);
}
if (res === undefined || !(res[0] instanceof nodes_1.ExpressionNode)) {
res = combi_1.Combi.run(new Expressions.CDSAnnotate(), tokens, version_1.defaultVersion);
}
if (res === undefined || !(res[0] instanceof nodes_1.ExpressionNode)) {
res = combi_1.Combi.run(new Expressions.CDSDefineCustom(), tokens, version_1.defaultVersion);
}
if (res === undefined || !(res[0] instanceof nodes_1.ExpressionNode)) {
res = combi_1.Combi.run(new Expressions.CDSDefineTableFunction(), tokens, version_1.defaultVersion);
}
if (res === undefined || !(res[0] instanceof nodes_1.ExpressionNode)) {
res = combi_1.Combi.run(new Expressions.CDSExtendView(), tokens, version_1.defaultVersion);
}
if (res === undefined || !(res[0] instanceof nodes_1.ExpressionNode)) {
return undefined;
}
return res[0];
}
}
exports.CDSParser = CDSParser;
//# sourceMappingURL=cds_parser.js.map