Пример #1
0
        public object VisitForStatementAST([NotNull] ForStatementASTContext context)
        {
            if (context.condition() != null && context.statement(0) != null && context.statement(1) != null)
            {
                Visit(context.condition());

                int jumpIfFalse = LineCount;
                AddLine("JUMP_IF_FALSE");

                int jumpIfNext = LineCount;
                Visit(context.statement(1));
                Visit(context.statement(0));
                Visit(context.condition());
                AddLine($"JUMP_IF_TRUE {jumpIfNext}");

                SetLineOnRealIndexOf(jumpIfFalse, $"JUMP_IF_FALSE {LineCount}");
            }
            return(null);
        }
Пример #2
0
        public object VisitForStatementAST([NotNull] ForStatementASTContext context)
        {
            var iterator = Visit(context.expr()) as string ?? "none";

            if (context.condition() != null && context.statement(0) != null && context.statement(1) != null)
            {
                Visit(context.condition());
                Visit(context.statement()[0]);

                if (iterator == "int")
                {
                    if (context.statement().Length > 1)
                    {
                        Visit(context.statement()[1]);
                    }
                }
                else
                {
                    InsertError(context.expr().Start, $"El iterador debe ser de tipo 'int' pero se obtuvo '{iterator}'.");
                }

                VisitChildren(context);
                List <Pair <string, IToken> > returnedTypes = new List <Pair <string, IToken> >();
                context.statement().ToList().ForEach(statement =>
                {
                    var list = Visit(statement) as List <Pair <string, IToken> >;
                    if (list != null)
                    {
                        returnedTypes.AddRange(list);
                    }
                });
                return(returnedTypes);
            }
            return(new List <Pair <string, IToken> >());
        }