public override GrammarParseResult VisitStatement(StatementContext context) { if (context == null) { return(GrammarParseResult.Unsuccessful(context.GetText())); } Debug.WriteLine($"VisitStatement \"{context.GetText()}\""); string labelStr = context.label()?.STRING()?.GetText(); //Successful if any of the 3 possible productions are successful var expression = context.expression(); if (expression != null) { GrammarParseResult result = _expressionVisitor.VisitExpression(expression); if (result.IsSuccessful) { result.Label = labelStr; return(result); } } var command = context.command(); if (command != null) { GrammarParseResult result = VisitCommand(command); if (result.IsSuccessful) { result.Label = labelStr; return(result); } } var action = context.action(); if (action != null) { GrammarParseResult result = VisitAction(action); if (result.IsSuccessful) { result.Label = labelStr; return(result); } } return(GrammarParseResult.Unsuccessful(context.GetText())); }