public void Visit(ProgramContext parserRule) { basicTypes = new BasicTypes(parserRule, globalContext); parserRule._classes.Insert(0, basicTypes.Int); parserRule._classes.Insert(0, basicTypes.Bool); parserRule._classes.Insert(0, basicTypes.String); parserRule._classes.Insert(0, basicTypes.IO); parserRule._classes.Insert(0, basicTypes.Void); parserRule._classes.Insert(0, basicTypes.Object); foreach (var _class in parserRule._classes) { if (globalContext.IfDefineType(_class.type.Text)) { errorLogger.LogError($"El programa ya contiene una definicion para { _class.type.Text}, linea {_class.type.Line} y la columna {_class.type.Column}"); } else { globalContext.CreateChildContext(_class.type.Text); if (_class.inherits != null) { _class.father = parserRule._classes.FirstOrDefault(p => p.type.Text == _class.inherits.Text); } else if (_class.type.Text != "Object" && _class.type.Text != "void") { _class.father = basicTypes.Object; } } } if (!globalContext.IfDefineType("Main")) { errorLogger.LogError("El programa no contiene la definicion para Main"); } }