@abaplint/core
Version:
abaplint - Core API
48 lines • 2.08 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ABAPParser = void 0;
const version_1 = require("../version");
const lexer_1 = require("./1_lexer/lexer");
const statement_parser_1 = require("./2_statements/statement_parser");
const structure_parser_1 = require("./3_structures/structure_parser");
const abap_file_information_1 = require("./4_file_information/abap_file_information");
const abap_file_1 = require("./abap_file");
class ABAPParser {
constructor(version, globalMacros, reg) {
this.version = version ? version : version_1.defaultVersion;
this.globalMacros = globalMacros ? globalMacros : [];
this.reg = reg;
}
// files is input for a single object
parse(files) {
const issues = [];
const output = [];
const start = Date.now();
// 1: lexing
const b1 = Date.now();
const lexerResult = files.map(f => new lexer_1.Lexer().run(f));
const lexingRuntime = Date.now() - b1;
// 2: statements
const b2 = Date.now();
const statementResult = new statement_parser_1.StatementParser(this.version, this.reg).run(lexerResult, this.globalMacros);
const statementsRuntime = Date.now() - b2;
// 3: structures
const b3 = Date.now();
for (const f of statementResult) {
const result = structure_parser_1.StructureParser.run(f);
// 4: file information
const info = new abap_file_information_1.ABAPFileInformation(result.node, f.file.getFilename());
output.push(new abap_file_1.ABAPFile(f.file, f.tokens, f.statements, result.node, info));
issues.push(...result.issues);
}
const structuresRuntime = Date.now() - b3;
const end = Date.now();
return { issues,
output,
runtime: end - start,
runtimeExtra: { lexing: lexingRuntime, statements: statementsRuntime, structure: structuresRuntime },
};
}
}
exports.ABAPParser = ABAPParser;
//# sourceMappingURL=abap_parser.js.map