public virtual IFunctionCil Visit(MethodContext parserRule)
        {
            IFunctionCil function;
            var          contextCil = new ContextCil();

            //El unico metodo que no pertenece a una clase es entry
            if (parserRule.Parent == null)
            {
                function = CilAst.GetFunctionCilsByName($"{parserRule.idText}");
            }
            else
            {
                // El nombre metodo en el tipo tiene siempre esta estructura (Type_CoolName)
                function = CilAst.GetFunctionCilsByName($"{(parserRule.Parent as ClassContext).type.Text}_{parserRule.idText}");
                // Como toda fucion pertenece a una clase se le agrega self como una parametro
                var self = new ArgCil("self");
                function.ArgCils.Add(self);
                contextCil.Define("self");
                foreach (var formal in parserRule._formals)
                {
                    Visit(formal, function, contextCil);
                }
            }
            var result = Visit(parserRule.exprBody, function, contextCil);

            function.ThreeDirInses.Add(new ReturnCil(result));
            return(function);
        }
        public void Visit(FormalContext parserRule, IFunctionCil cilTree, IContextCil contextCil)
        {
            contextCil.Define(parserRule.idText);
            var arg = new ArgCil(contextCil.variables[parserRule.idText].Name);

            cilTree.ArgCils.Add(arg);
        }