Esempio n. 1
0
        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()));
        }