Recuerden que el código de tareas anteriores sigue apareciendo como pendiente en los archivos que les subo para las siguientes tareas. También recuerden que tuve que agregar el control_vista a todas las expresiones y a todas las sentencias para poder reportar adecuadamente los errores en el semántico. Eso significa que todos los archivos del parser (parser.h, parser_expresion.h, parser_sentencia.h, parser_aux.h) requieren algún cambio. Les sugiero que hagan un respaldo de sus archivos viejos, que trabajen sobre los archivos nuevos y que hagan un copy-paste de sus implementaciones de las tareas viejas a los archivos nuevos. Desafortunadamente y por culpa del control_vista, tendrán que hacer modificaciones al código que escribieron para la tarea 5, pero afortunadamente las modificaciones son menores: - En la implementación del reconocimiento de la sentencia_do, seguramente están haciendo algo como: return new sentencia_do(condicion, cuerpo); El control_vista llamado cv ya está declarado 115. Tendrán que agregar el control_vista como primer argumento del constructor: return new sentencia_do(cv, condicion, cuerpo); - En la implementación del reconocimiento de los parámetros de una función, seguramente están haciendo algo como: std::vector res; // es posible que existan ifs en alguna parte algún tipo de ciclo { // es posible que existan ifs en alguna parte obtener una expresión (el tipo del parámetro) obtener el nombre del parámetro guardar con res.push_back(sentencia_declaracion(tipo, nombre, nullptr)); o con res.emplace_back(tipo, nombre, nullptr); // es posible que existan ifs en alguna parte } // es posible que existan ifs en alguna parte Necesitarán declarar un control_vista justo antes de obtener el tipo del parámetro, y luego deben agregar el control_vista como primer argumento del constructor: std::vector res; // es posible que existan ifs en alguna parte algún tipo de ciclo { // es posible que existan ifs en alguna parte control_vista cv(p); obtener una expresión (el tipo del parámetro) obtener el nombre del parámetro guardar con res.push_back(sentencia_declaracion(cv, tipo, nombre, nullptr)); o con res.emplace_back(cv, tipo, nombre, nullptr); // es posible que existan ifs en alguna parte } // es posible que existan ifs en alguna parte Noten que el control_vista se inicializa para cada parámetro a reconocer. Es un error declararlo fuera del ciclo porque estarían usando el mismo control_vista para todos los parámetros. En la tarea 6, después de imprimir la ubicación del error si es que hubiera alguno (línea 24 de main), sí pueden imprimir el mensaje de error (línea 25 de main). Esto les puede ser útil para depurar. El validador personalizado que programé para este problema de omegaUp sólo verifica que: 1) Cuando el código está bien, no impriman nada. 2) Cuando el código está mal, que la ubicación del error sea la correcta. El mensaje de error posterior es ignorado. PD. Repasen los conceptos de ensamblador (especialmente registros, la pila, el stack-pointer y el direccionamiento indirecto) pues lo necesitaremos para la última etapa.