UNPKG

simc-ast-builder

Version:

Parser and AST generator for SimulationCraft files

55 lines 2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Parser = void 0; const antlr4ts_1 = require("antlr4ts"); const types_1 = require("../types"); const ConditionOptimizer_1 = require("../utils/ConditionOptimizer"); const SimCExprLexer_1 = require("./antlr4/SimCExprLexer"); const SimCExprParser_1 = require("./antlr4/SimCExprParser"); const SimCGenericVisitor_1 = require("./visitors/ast/SimCGenericVisitor"); /** * Main parser class for SimC files */ class Parser { /** * Create a new Parser instance * @param optimizerOptions Options for the condition optimizer */ constructor(optimizerOptions = types_1.DEFAULT_OPTIMIZER_OPTIONS) { this.optimizer = new ConditionOptimizer_1.ConditionOptimizer(optimizerOptions); } /** * Parse a SimC string and return the AST * * @param input - The SimC code to parse * @returns The parsed AST node */ parse(input) { // Set up the lexer and parser const charStream = antlr4ts_1.CharStreams.fromString(input.trim()); const lexer = new SimCExprLexer_1.SimCExprLexer(charStream); const tokenStream = new antlr4ts_1.CommonTokenStream(lexer); const parser = new SimCExprParser_1.SimCExprParser(tokenStream); // Parse the input const parseTree = parser.parse(); // Visit the parse tree to generate AST const visitor = new SimCGenericVisitor_1.SimCGenericVisitor(); return visitor.visit(parseTree); } /** * Parse a SimC string and optimize the resulting AST * * @param input - The SimC code to parse * @returns The optimized AST node */ parseAndOptimize(input) { const ast = this.parse(input); // Apply optimizations if this is an expression node if (ast.kind === "expression") { return this.optimizer.optimize(ast); } return ast; } } exports.Parser = Parser; //# sourceMappingURL=Parser.js.map