UNPKG

antlr4-runtime

Version:

JavaScript runtime for ANTLR4

44 lines (39 loc) 1.55 kB
/* Copyright (c) 2012-2022 The ANTLR Project Contributors. All rights reserved. * Use is of this file is governed by the BSD 3-clause license that * can be found in the LICENSE.txt file in the project root. */ import PredicateTransition from "../transition/PredicateTransition.js"; import RecognitionException from "./RecognitionException.js"; /** * A semantic predicate failed during validation. Validation of predicates * occurs when normally parsing the alternative just like matching a token. * Disambiguating predicate evaluation occurs when we test a predicate during * prediction. */ export default class FailedPredicateException extends RecognitionException { constructor(recognizer, predicate, message) { super({ message: formatMessage(predicate, message || null), recognizer: recognizer, input: recognizer.getInputStream(), ctx: recognizer._ctx }); const s = recognizer._interp.atn.states[recognizer.state] const trans = s.transitions[0] if (trans instanceof PredicateTransition) { this.ruleIndex = trans.ruleIndex; this.predicateIndex = trans.predIndex; } else { this.ruleIndex = 0; this.predicateIndex = 0; } this.predicate = predicate; this.offendingToken = recognizer.getCurrentToken(); } } function formatMessage(predicate, message) { if (message !==null) { return message; } else { return "failed predicate: {" + predicate + "}?"; } }