Files
motia/.npm-cache/_npx/0ebd1cb7ec11dd1f/node_modules/python-ast/dist/index.js
2025-10-19 14:57:07 +00:00

56 lines
2.2 KiB
JavaScript

"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);