UNPKG

pss-langserver

Version:

A Language server for the Portable Stimulus Standard

76 lines (75 loc) 3.38 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.buildAST = buildAST; exports.buildASTNew = buildASTNew; /* * Copyright (C) 2025 Darshan(@thisisthedarshan) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <https://www.gnu.org/licenses/>. */ const antlr4_1 = require("antlr4"); const pss_1 = __importDefault(require("../grammar/pss")); const pssLex_1 = __importDefault(require("../grammar/pssLex")); const visitors_1 = require("./visitors"); const advancedVisitor_1 = require("./advancedVisitor"); function buildAST(fileURI, fileContents) { let inputStream = new antlr4_1.CharStream(fileContents); let lexer = new pssLex_1.default(inputStream); let tokenStream = new antlr4_1.CommonTokenStream(lexer); let parser = new pss_1.default(tokenStream); parser.removeErrorListeners(); /* No need for error listener for now */ /*parser.addErrorListener(new PSSErrorListener())*/ let tree = parser.pss_entry(); let myVisitor = new visitors_1.visitor(tokenStream, fileURI); tree.accept(myVisitor); return [...new Set(myVisitor.getMeta())]; } function buildASTNew(fileURI, fileContents) { let inputStream = new antlr4_1.CharStream(fileContents); let lexer = new pssLex_1.default(inputStream); let tokenStream = new antlr4_1.CommonTokenStream(lexer); let parser = new pss_1.default(tokenStream); let myVisitor = new advancedVisitor_1.advancedVisitor(tokenStream, fileURI); parser.removeErrorListeners(); /* No need for error listener for now */ /*parser.addErrorListener(new PSSErrorListener())*/ let errStrategy = new antlr4_1.BailErrorStrategy(); try { parser._interp.predictionMode = antlr4_1.PredictionMode.SLL; errStrategy = parser._errHandler; parser._errHandler = new antlr4_1.BailErrorStrategy(); parser.pss_entry().accept(myVisitor); } catch (e) { try { parser._interp.predictionMode = antlr4_1.PredictionMode.LL; parser._errHandler = errStrategy; parser.pss_entry().accept(myVisitor); } catch (e) { // console.warn("Parsing failed for file: ", fileURI.substring(fileURI.lastIndexOf("/") + 1)); // const msg = e as Error; // console.warn(msg.message); return []; } // console.warn("Parsing failed for file: ", fileURI.substring(fileURI.lastIndexOf("/") + 1)); // const msg = e as Error; // console.warn(msg.message); } const res = myVisitor.getAstObjects(); // writeFileSync(fileURLToPath(fileURI) + '-lsp.json', JSON.stringify(res, null, 4), 'utf-8'); return res; }