antlr4-runtime
Version:
JavaScript runtime for ANTLR4
44 lines (39 loc) • 1.55 kB
JavaScript
/* 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 + "}?";
}
}