/* 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