Esempio n. 1
0
        public object VisitCallStatementAST([NotNull] CallStatementASTContext context)
        {
            Identifier identifier = (Identifier)Visit(context.designator());

            if (identifier != null && identifier is MethodIdentifier)
            {
                MethodIdentifier methodId = (MethodIdentifier)identifier;
                if (context.actPars() != null)
                {
                    Visit(context.actPars());
                }
                else if (methodId.FormPars != null)
                {
                    InsertError(context.BL().Symbol,
                                "El método '" + methodId.Id + "' recibe " + methodId.FormPars.ident().Length +
                                (methodId.FormPars.ident().Length > 1 ? " parámetros" : " parámetro") + ", y no se recibió ninguno");
                }
            }
            else
            {
                IToken token = context.BL() != null?context.BL().Symbol : ((IdentASTContext)((DesignatorASTContext)context.designator()).ident()[0]).IDENT().Symbol;

                InsertError(token, "El identificador " + ((DesignatorASTContext)context.designator()).ident()[0].GetText() + " no corresponde a un método");
            }
            return(new List <Pair <string, IToken> >());
        }
Esempio n. 2
0
        public object VisitCallStatementAST([NotNull] CallStatementASTContext context)
        {
            string scope = Visit(context.designator()) as string;
            string ident = context.designator().GetText();

            AddLine($"LOAD_{scope} {ident}");
            if (context.actPars() != null)
            {
                string numParams = Visit(context.actPars()) as string;
                AddLine($"CALL_FUNCTION {numParams}");
            }
            else
            {
                AddLine($"CALL_FUNCTION 0");
            }

            return(null);
        }