/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. * Use of this file is governed by the BSD 3-clause license that * can be found in the LICENSE.txt file in the project root. */ #pragma once #include "BaseErrorListener.h" namespace antlr4 { /// /// This implementation of can be used to /// identify certain potential correctness and performance problems in grammars. /// "Reports" are made by calling /// with the appropriate message. /// ///
    ///
  • Ambiguities: These are cases where more than one path through the /// grammar can match the input.
  • ///
  • Weak context sensitivity: These are cases where full-context /// prediction resolved an SLL conflict to a unique alternative which equaled /// the minimum alternative of the SLL conflict.
  • Strong (forced) /// context sensitivity: These are cases where the full-context prediction /// resolved an SLL conflict to a unique alternative, and the minimum /// alternative of the SLL conflict was found to not be a truly viable /// alternative. Two-stage parsing cannot be used for inputs where this /// situation occurs.
  • ///
/// /// @author Sam Harwell ///
class ANTLR4CPP_PUBLIC DiagnosticErrorListener : public BaseErrorListener { /// /// When {@code true}, only exactly known ambiguities are reported. /// protected: const bool exactOnly; /// /// Initializes a new instance of /// which only reports exact ambiguities. /// public: DiagnosticErrorListener(); /// /// Initializes a new instance of , /// specifying whether all ambiguities or only exact ambiguities are reported. /// /// {@code true} to report only exact ambiguities, /// otherwise /// {@code false} to report all ambiguities. DiagnosticErrorListener(bool exactOnly); virtual void reportAmbiguity(Parser* recognizer, const dfa::DFA& dfa, size_t startIndex, size_t stopIndex, bool exact, const antlrcpp::BitSet& ambigAlts, atn::ATNConfigSet* configs) override; virtual void reportAttemptingFullContext( Parser* recognizer, const dfa::DFA& dfa, size_t startIndex, size_t stopIndex, const antlrcpp::BitSet& conflictingAlts, atn::ATNConfigSet* configs) override; virtual void reportContextSensitivity(Parser* recognizer, const dfa::DFA& dfa, size_t startIndex, size_t stopIndex, size_t prediction, atn::ATNConfigSet* configs) override; protected: virtual std::string getDecisionDescription(Parser* recognizer, const dfa::DFA& dfa); /// /// Computes the set of conflicting or ambiguous alternatives from a /// configuration set, if that information was not already provided by the /// parser. /// /// The set of conflicting or ambiguous /// alternatives, as reported by the parser. /// The conflicting or ambiguous configuration set. Returns /// {@code reportedAlts} if it is not {@code null}, otherwise returns the set /// of alternatives represented in {@code configs}. virtual antlrcpp::BitSet getConflictingAlts( const antlrcpp::BitSet& reportedAlts, atn::ATNConfigSet* configs); }; } // namespace antlr4