simc-ast-builder
Version:
Parser and AST generator for SimulationCraft files
183 lines • 5.91 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.SimCGenericVisitor = void 0;
const AbstractParseTreeVisitor_1 = require("antlr4ts/tree/AbstractParseTreeVisitor");
const ContextHandlerRegistry_1 = require("./ContextHandlers/ContextHandlerRegistry");
/**
* Generic visitor that implements the ANTLR visitor pattern
*/
class SimCGenericVisitor extends AbstractParseTreeVisitor_1.AbstractParseTreeVisitor {
constructor() {
super();
}
/**
* Generic visit method for any context
*/
visit(tree) {
if (!tree) {
throw new Error("Null parse tree");
}
return tree.accept(this);
}
/**
* Visit an access expression context
*/
visitAccessExpr(ctx) {
return ContextHandlerRegistry_1.contextHandlerRegistry.dispatchContext("AccessExpr", ctx, this);
}
/**
* Visit an action line context
*/
visitActionLine(ctx) {
var _a;
// Set the metadata for the context handler
ContextHandlerRegistry_1.contextHandlerRegistry.setMetaData({
actionLine: ctx.text,
actionName: ctx.actionName().text,
actionParams: ctx.actionParam(),
subListName: ((_a = ctx.sublistName()) === null || _a === void 0 ? void 0 : _a.text) || "",
});
return ContextHandlerRegistry_1.contextHandlerRegistry.dispatchContext("ActionLine", ctx, this);
}
/**
* Visit an action name context
*/
visitActionName(ctx) {
return ContextHandlerRegistry_1.contextHandlerRegistry.dispatchContext("ActionName", ctx, this);
}
/**
* Visit an action parameter context
*/
visitActionParam(ctx) {
return ContextHandlerRegistry_1.contextHandlerRegistry.dispatchContext("ActionParam", ctx, this);
}
/**
* Visit an additive expression context (+ -)
*/
visitAdditiveExpr(ctx) {
return ContextHandlerRegistry_1.contextHandlerRegistry.dispatchContext("AdditiveExpr", ctx, this);
}
/**
* Visit an AND expression context
*/
visitAndExpr(ctx) {
return ContextHandlerRegistry_1.contextHandlerRegistry.dispatchContext("AndExpr", ctx, this);
}
/**
* Visit an any token expression context
*/
visitAnyTokenExpr(ctx) {
return ContextHandlerRegistry_1.contextHandlerRegistry.dispatchContext("AnyTokenExpr", ctx, this);
}
/**
* Visit a comment line context
*/
visitCommentLine(ctx) {
return ContextHandlerRegistry_1.contextHandlerRegistry.dispatchContext("CommentLine", ctx, this);
}
/**
* Visit a comparison expression context
*/
visitComparisonExpr(ctx) {
return ContextHandlerRegistry_1.contextHandlerRegistry.dispatchContext("ComparisonExpr", ctx, this);
}
/**
* Visit an expression context
*/
visitExpression(ctx) {
return this.visitChildren(ctx);
}
/**
* Visit a string expression context
*/
/**
* Visit an identifier context
*/
visitIdentifier(ctx) {
return ContextHandlerRegistry_1.contextHandlerRegistry.dispatchContext("Identifier", ctx, this);
}
/**
* Visit a math function expression context (ceil or floor)
*/
visitMathFuncExpr(ctx) {
return ContextHandlerRegistry_1.contextHandlerRegistry.dispatchContext("MathFuncExpr", ctx, this);
}
/**
* Visit a min/max expression context
*/
visitMinMaxExpr(ctx) {
return ContextHandlerRegistry_1.contextHandlerRegistry.dispatchContext("MinMaxExpr", ctx, this);
}
/**
* Visit a mixed ID expression context
*/
visitMixedIdExpr(ctx) {
return ContextHandlerRegistry_1.contextHandlerRegistry.dispatchContext("MixedIdExpr", ctx, this);
}
/**
* Visit a multiplicative expression context (* % %%)
*/
visitMultiplicativeExpr(ctx) {
return ContextHandlerRegistry_1.contextHandlerRegistry.dispatchContext("MultiplicativeExpr", ctx, this);
}
/**
* Visit a number expression context
*/
visitNumberExpr(ctx) {
return ContextHandlerRegistry_1.contextHandlerRegistry.dispatchContext("NumberExpr", ctx, this);
}
/**
* Visit an OR expression context
*/
visitOrExpr(ctx) {
return ContextHandlerRegistry_1.contextHandlerRegistry.dispatchContext("OrExpr", ctx, this);
}
/**
* Visit a parenthesized expression context
*/
visitParenExpr(ctx) {
// TODO
return this.visit(ctx.expression());
}
/**
* Visit a parse context
*/
visitParse(ctx) {
return ContextHandlerRegistry_1.contextHandlerRegistry.dispatchContext("Parse", ctx, this);
}
visitStringExpr(ctx) {
return ContextHandlerRegistry_1.contextHandlerRegistry.dispatchContext("StringExpr", ctx, this);
}
/**
* Visit a sublist name context
*/
visitSublistName(ctx) {
return ContextHandlerRegistry_1.contextHandlerRegistry.dispatchContext("SublistName", ctx, this);
}
/**
* Visit a unary expression context (+ - ! @)
*/
visitUnaryExpr(ctx) {
return ContextHandlerRegistry_1.contextHandlerRegistry.dispatchContext("UnaryExpr", ctx, this);
}
/**
* Visit a XOR expression context
*/
visitXorExpr(ctx) {
return ContextHandlerRegistry_1.contextHandlerRegistry.dispatchContext("XorExpr", ctx, this);
}
defaultResult() {
// Get the context object
const ctx = arguments[0];
// Just dump the text
if (ctx && ctx.text) {
console.error(`FAILED: ${ctx.text}`);
}
else {
console.error(`FAILED: Unknown context`);
}
throw new Error(`Parsing failed`);
}
}
exports.SimCGenericVisitor = SimCGenericVisitor;
//# sourceMappingURL=SimCGenericVisitor.js.map