"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __exportStar = (this && this.__exportStar) || function(m, exports) { for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.createVisitor = exports.walk = exports.parse = void 0; // parse const antlr4ts_1 = require("antlr4ts"); const Python3Lexer_1 = require("./parser/Python3Lexer"); const Python3Parser_1 = require("./parser/Python3Parser"); // walk const ParseTreeWalker_1 = require("antlr4ts/tree/ParseTreeWalker"); // createVisitor const AbstractParseTreeVisitor_1 = require("antlr4ts/tree/AbstractParseTreeVisitor"); /** * Parses the given source code and returns the AST * @param source Python source code to parse */ function parse(source) { const chars = new antlr4ts_1.ANTLRInputStream(source); const lexer = new Python3Lexer_1.Python3Lexer(chars); const tokens = new antlr4ts_1.CommonTokenStream(lexer); const parser = new Python3Parser_1.Python3Parser(tokens); return parser.file_input(); } exports.parse = parse; /** * Walks a parse tree * @see https://github.com/antlr/antlr4/blob/master/doc/listeners.md */ function walk(listener, tree) { ParseTreeWalker_1.ParseTreeWalker.DEFAULT.walk(listener, tree); } exports.walk = walk; function createVisitor(visitor) { // we don't want users to write classes because it's not JavaScript-y // so we'll set implementation of abstract methods and other visit* methods in constructor // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore return new (class extends AbstractParseTreeVisitor_1.AbstractParseTreeVisitor { constructor() { super(); Object.assign(this, Object.assign({ defaultResult: () => undefined, aggregateResult: () => undefined }, visitor)); } })(); } exports.createVisitor = createVisitor; __exportStar(require("./parser/Python3Contexts"), exports);