@making-sense/antlr-editor
Version:
ANTLR Typescript editor
94 lines • 3.72 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.validate = exports.createParser = exports.createLexer = void 0;
const antlr4ng_1 = require("@making-sense/antlr4ng");
const log_1 = require("./log");
// @ts-ignore VALID
class ConsoleErrorListener {
// @ts-ignore TS7006 VALID
syntaxError(recognizer, offendingSymbol, line, column, msg) {
log_1.Log.info("ERROR " + msg, "ParserFacadeV3");
}
// @ts-ignore TS7006 VALID
// eslint-disable-next-line @typescript-eslint/no-unused-vars
reportAttemptingFullContext(_recognizer, _dfa, _startIndex, _stopIndex, _conflictingAlts, _configs) {
// Optional method - can be empty
}
// @ts-ignore TS7006 VALID
// eslint-disable-next-line @typescript-eslint/no-unused-vars
reportContextSensitivity(_recognizer, _dfa, _startIndex, _stopIndex, _prediction, _configs) {
// Optional method - can be empty
}
// @ts-ignore TS7006 VALID
// eslint-disable-next-line @typescript-eslint/no-unused-vars
reportAmbiguity(_recognizer, _dfa, _startIndex, _stopIndex, _exact, _ambigAlts, _configs) {
// Optional method - can be empty
}
}
class Error {
constructor(startLine, endLine, startCol, endCol, message) {
this.startLine = startLine;
this.endLine = endLine;
this.startCol = startCol;
this.endCol = endCol;
this.message = message;
}
}
// @ts-ignore VALID
class CollectorErrorListener {
constructor(errors) {
this.errors = [];
this.errors = errors;
}
// @ts-ignore TS7006
syntaxError(recognizer, offendingSymbol, line, column, msg) {
let endColumn = column + 1;
if (offendingSymbol._text !== null && offendingSymbol._text !== undefined) {
endColumn = column + offendingSymbol._text.length;
}
this.errors.push(new Error(line, line, column, endColumn, msg));
}
// @ts-ignore TS7006
// eslint-disable-next-line @typescript-eslint/no-unused-vars
reportAttemptingFullContext(_recognizer, _dfa, _startIndex, _stopIndex, _conflictingAlts, _configs) {
// Optional method - can be empty
}
// @ts-ignore TS7006
// eslint-disable-next-line @typescript-eslint/no-unused-vars
reportContextSensitivity(_recognizer, _dfa, _startIndex, _stopIndex, _prediction, _configs) {
// Optional method - can be empty
}
// @ts-ignore TS7006
// eslint-disable-next-line @typescript-eslint/no-unused-vars
reportAmbiguity(_recognizer, _dfa, _startIndex, _stopIndex, _exact, _ambigAlts, _configs) {
// Optional method - can be empty
}
}
const createLexer = (Lexer) => (input) => {
const chars = antlr4ng_1.CharStream.fromString(input || "");
const lexer = new Lexer(chars);
return lexer;
};
exports.createLexer = createLexer;
const createParser = ({ Lexer, Parser }) => (input) => {
const lexer = (0, exports.createLexer)(Lexer)(input);
return createParserFromLexer(Parser)(lexer);
};
exports.createParser = createParser;
const createParserFromLexer = (Parser) => (lexer) => {
const tokens = new antlr4ng_1.CommonTokenStream(lexer);
return new Parser(tokens);
};
const validate = ({ Lexer, Parser, initialRule }) => (input) => {
const errors = [];
const lexer = (0, exports.createLexer)(Lexer)(input);
lexer.removeErrorListeners();
lexer.addErrorListener(new ConsoleErrorListener());
const parser = createParserFromLexer(Parser)(lexer);
parser.removeErrorListeners();
parser.addErrorListener(new CollectorErrorListener(errors));
parser[initialRule]();
return errors;
};
exports.validate = validate;
//# sourceMappingURL=ParserFacade.js.map