public SemPred(OutputModelFactory factory, [NotNull] ActionAST ast)
: base(factory, ast)
{
Debug.Assert(ast.atnState != null
&& ast.atnState.NumberOfTransitions == 1
&& ast.atnState.Transition(0) is AbstractPredicateTransition);
GrammarAST failNode = ast.GetOptionAST("fail");
predicate = ast.Text;
if (predicate.StartsWith("{") && predicate.EndsWith("}?"))
{
predicate = predicate.Substring(1, predicate.Length - 3);
}
predicate = factory.GetTarget().GetTargetStringLiteralFromString(predicate);
if (failNode == null)
return;
if (failNode is ActionAST)
{
ActionAST failActionNode = (ActionAST)failNode;
RuleFunction rf = factory.GetCurrentRuleFunction();
failChunks = ActionTranslator.TranslateAction(factory, rf,
failActionNode.Token,
failActionNode);
}
else
{
msg = factory.GetTarget().GetTargetStringLiteralFromANTLRStringLiteral(factory.GetGenerator(),
failNode.Text,
true);
}
}
}