/* 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 "atn/DecisionEventInfo.h" #include "support/BitSet.h" namespace antlr4 { namespace atn { /// /// This class represents profiling event information for an ambiguity. /// Ambiguities are decisions where a particular input resulted in an SLL /// conflict, followed by LL prediction also reaching a conflict state /// (indicating a true ambiguity in the grammar). /// /// /// This event may be reported during SLL prediction in cases where the /// conflicting SLL configuration set provides sufficient information to /// determine that the SLL conflict is truly an ambiguity. For example, if none /// of the ATN configurations in the conflicting SLL configuration set have /// traversed a global follow transition (i.e. /// is 0 for all configurations), then /// the result of SLL prediction for that input is known to be equivalent to the /// result of LL prediction for that input. /// /// /// In some cases, the minimum represented alternative in the conflicting LL /// configuration set is not equal to the minimum represented alternative in the /// conflicting SLL configuration set. Grammars and inputs which result in this /// scenario are unable to use , which in turn means /// they cannot use the two-stage parsing strategy to improve parsing performance /// for that input. /// /// /// class ANTLR4CPP_PUBLIC AmbiguityInfo : public DecisionEventInfo { public: /// The set of alternative numbers for this decision event that lead to a valid parse. antlrcpp::BitSet ambigAlts; /// /// Constructs a new instance of the class with the /// specified detailed ambiguity information. /// /// The decision number /// The final configuration set identifying the ambiguous /// alternatives for the current input /// The set of alternatives in the decision that lead to a valid parse. /// The predicted alt is the min(ambigAlts) /// The input token stream /// The start index for the current prediction /// The index at which the ambiguity was identified during /// prediction /// {@code true} if the ambiguity was identified during LL /// prediction; otherwise, {@code false} if the ambiguity was identified /// during SLL prediction AmbiguityInfo(size_t decision, ATNConfigSet *configs, const antlrcpp::BitSet &ambigAlts, TokenStream *input, size_t startIndex, size_t stopIndex, bool fullCtx); }; } // namespace atn } // namespace antlr4