public void Visit(ClassContext parserRule)
 {
     type = globalContext.GetType(parserRule.type.Text);
     if (parserRule.inherits != null)
     {
         if (!globalContext.IfDefineType(parserRule.inherits.Text))
         {
             errorLogger.LogError($"El tipo con nombre {parserRule.inherits.Text} no ha sido encontrado");
         }
         if (globalContext.Int.Name == parserRule.inherits.Text)
         {
             errorLogger.LogError($"El tipo {parserRule.type.Text} no puede heredar de Int");
         }
         if (globalContext.String.Name == parserRule.inherits.Text)
         {
             errorLogger.LogError($"El tipo {parserRule.type.Text} no puede heredar de String");
         }
         if (globalContext.Bool.Name == parserRule.inherits.Text)
         {
             errorLogger.LogError($"El tipo {parserRule.type.Text} no puede heredar de Bool");
         }
         var inherits = globalContext.GetType(parserRule.inherits.Text);
         type.Inherits = inherits;
         if (inherits.Conform(type))
         {
             errorLogger.LogError("No se permite la herencia cíclica");
         }
     }
     foreach (var item in parserRule._features)
     {
         Visit(item);
     }
     //Verifico si la clase Main tiene el metodo main y si este no tiene parametros
     if (parserRule.type.Text == "Main")
     {
         if (type.IsDefineMethod("main"))
         {
             var main = type.GetMethod("main");
             if (main.Formals.Length > 0)
             {
                 errorLogger.LogError("El metodo main no tiene parametros");
             }
         }
         else
         {
             errorLogger.LogError("El metodo main no esta definido en la clase Main");
         }
     }
 }
 //El unico chequeo que hay que ser es si el tipo heredado existe
 public void Visit(ClassContext parserRuleContext)
 {
     type = globalContext.GetType(parserRuleContext.type.Text);
     foreach (var item in parserRuleContext._features)
     {
         Visit(item);
     }
 }