56 lines
2.2 KiB
JavaScript
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);
|