Diana Marcela Jiménez Cod.902021 Jenny Priscilla Pérez Cod.

904042 BITACORA 4 Durante esta semana se trabajó en la inicialización y validación de datos, lecturas de memoria para llevar el CH maquina a ejecución, asignación de memoria principal y la memoria del núcleo del programa. En general validación de parámetros.

Adjuntamos el código: <?php function cargadorArchivos () { ?> <h1>Cargar Ch programas </h1> <form action="paso2.php" method="post" enctype="multipart/formdata"> <input type="file" name="archivo" /> <input type="submit" /> </form> <?php } // Evalúa que no se metan números de memoria inválidos function evaluarMemorias ($principal,$operativo) { $error = FALSE; if ($principal <= 0) { echo "Error, la memoria no puede valer 0 <br />"; $error = TRUE; } if ($principal >= 99999) { echo "La memoria principal es demasiado grande <br />"; $error = TRUE; }

if ($operativo <= 0) { echo "El núcleo del sistema operativo no puede ser menor o igual a 0 <br />"; $error = TRUE; } if ($operativo >= $principal) { echo "La memoria del núcleo del sistema no debe ser mayor que la memoria principal <br />"; $error = TRUE; } return $error; }

function puedeSerVariable($operadores,$linea,$renglon) { $encontrado = false; if ($linea != null){ foreach ($operadores as $posicion => $operador) { if ($operador == $linea) { $encontrado = true; break; } } } else { return "No hay ningun operador"; }

if ($encontrado) { return "se encontró un nombre de variable inválido en la línea ". $renglon;

} else { return; }

} function existeVariable($linea){ foreach($_SESSION['tmp_variables'] as $variable) { if ($variable == $linea) { return true; } } return false; }

function compilador($linea,$renglon) { $encontrado = false; // se vuelve true si se encuentra los operadores de abajo //lista de opreadores $operadores = array ( 'cargue', 'almacene', 'vaya', 'vayasi',

'nueva', 'etiqueta', 'lea', 'sume', 'reste', 'multiplique', 'divida', 'potencia', 'modulo', 'muestre', 'imprima', 'retorne');

// comentarios if (strpos($linea,"//") != 0) { //ERROR: comentario mal puesto $error = "comentario mal puesto en la línea ".$renglon ;

} //Correcto elseif (strpos($linea,"//") == false) { //dividir línea en espacios y ponerla en minúscula $linea = explode(" ",trim(strtolower($linea))); // evaluar que el primer término sea un operador foreach ($operadores as $posicion => $operador) {

if ($operador == $linea[0]) { $encontrado = true; break; } } // Se encontró un operador en la primera parte, en posición tendré que operador está if ($encontrado) { // de un solo operador ************* LISTO CARGUE Y ALMACENE ************* if ($posicion == 0 || $posicion == 1 || $posicion == 2) { // verifico que en $linea[1] no haya ninguna variable $error $renglon); if (!$error) { $renglon; } else return; } } if ($posicion == 3) { if ($linea[1] == null || $linea[2] == null) return "Muy pocos parámetros en la línea $renglon"; else { $error $linea[1],$renglon); = puedeSerVariable($operadores, if ($linea[2] != null) { $error = "Demasiados parámetros en la línea ". = puedeSerVariable($operadores,$linea[1],

if (!$error) { $error = puedeSerVariable($operadores, $linea[2],$renglon); if (!$error) return; else return $error;

} else return $error; } } /**** crear variable */

if ($posicion == 4) { $error $renglon); if (!$error) { if $linea[2]!='i'){ return "la variable $linea[2] de la línea $renglon no es un tipo válido"; } if (!is_numeric($linea[3])) { return "la variable $linea[3] de la línea $renglon no es numérica"; } if ($linea[4] != null) { ($linea[2]!='c' && $linea[2]!='r' && = puedeSerVariable($operadores,$linea[1],

return "Demasiados parámetros en la línea $renglon"; } if(existeVariable($linea[1])) { return "la variable $linea[1] ya existe"; } $_SESSION['tmp_variables'][]=$linea[1]; } else return $error; } // etiqueta if ($posicion == 5) { if ($linea[1] == null || $linea[2] == null) return "Muy pocos parámetros en la línea $renglon"; $error $renglon); if (!$error) { if (!is_numeric($linea[2])) { return "la variable $linea[2] de la línea $renglon no es numérica"; } else if ($linea[2] <= 0) { return "la variable $linea[2] de la línea $renglon hace referencia a un valor negativo"; } else return; = puedeSerVariable($operadores,$linea[1],

} else return $error; } // lea if ($posicion == 6) { if ($linea[1] == null) return "Muy pocos parámetros en la línea $renglon"; $error $renglon); if ($error) return $error; = puedeSerVariable($operadores,$linea[1],

/* debería observar si ya almacené la variable ************************************/

} if ($posicion >= 7 && $posicion <= 14) { if ($linea[1] == null) return "Muy pocos parámetros en la línea $renglon"; if (!existeVariable($linea[1])) { return $renglon no existe"; } } } else { if ($linea[0]!="") { $error = "El término ".$linea[0]." no es un operador válido"; } "La variable $linea[1] de la línea

} } return $error;

}

function compilar($manejador) { $total = ""; $renglon = 1; // renglon que se evalúa $errores = array();// Array con los errores $_SESSION['tmp_variables'] = array(); // temporal con las variables existentes while($linea = fgets ($manejador)){ if (strlen(compilador ($linea,$renglon)) > 0) { $errores[] = compilador ($linea,$renglon); } $renglon++; } print_r($errores);

return $total; }

?>