protected Pair<ATNConfigSet, ATNConfigSet> SplitAccordingToSemanticValidity(
ATNConfigSet configSet,
ParserRuleContext outerContext)
{
ATNConfigSet succeeded = new ATNConfigSet(configSet.fullCtx);
ATNConfigSet failed = new ATNConfigSet(configSet.fullCtx);
foreach (ATNConfig c in configSet.configs)
{
if (c.semanticContext != SemanticContext.NONE)
{
bool predicateEvaluationResult = EvalSemanticContext(c.semanticContext, outerContext, c.alt, configSet.fullCtx);
if (predicateEvaluationResult)
{
succeeded.Add(c);
}
else {
failed.Add(c);
}
}
else {
succeeded.Add(c);
}
}
return new Pair<ATNConfigSet, ATNConfigSet>(succeeded, failed);
}