Ir al contenido principal

Entradas

Mostrando las entradas de junio, 2019

Creación de macros especiales

Para el trabajo de hoy investigue las operaciones lógicas entre números tipo flotantes, que tiene cierto caso diferente. Me dí cuenta que MIPS para flotantes solo se realizan las siguiente operaciones, vea la siguiente tabla Lo que se realizo entonces fue unos macros que hicieran estas operaciones con solo tener flotantes en ciertos registro y consultar la función hecha de antemano. Al tener solo consulta de igualdad, menor y menor igual se hicieron negaciones y ciiertos caminos para poder realizar mayor igual, mayor y diferente de. Por ejemplo, vea la siguiente imagen

Investigación de saltos especiales

En el trabajo de hoy se investigo sobre un registro y salto fundamental para la funcionalidad de condicionales e incluso para el ciclo for. Salto jal: Este salto brinca incondicionalmente a la instrucción que se le indique, esto es fundamental para que brinque a cierta etiqueta sin revisar alguna condición. Salto jr $ra : Brinca a la dirección guardada. Esto sirve para los ciclos fors. Vea la siguiente ilustración 1 para que vea el uso de lo investigado. ilustración 1

Pruebas de condicionales

Se realizaron pruebas de diferentes ejemplos para expresiones condicionales. Se analizaron cuales son los procesos que deben ser ejecutados para las expresiones condicionales en asignaciones booleanas que podrán ser utilizadas en las diferentes estructuras de control, ejemplo; for, while, if.

Investigación de condicionales

Hasta el momento se ha avanzado en el proyecto y se ha llegado la punto donde se logra generar funciones, asignaciones complejas, llamadas de funciones y varios tipos de expresiones. Al tener expresiones y la mayoría de la gramática se requiere saber como lograr hacer condiciones en MIPS, ya que es sumamente   importante para darle sentido a la funcionalidad de los códigos que se ingresan en el compilador. Gracias a la tarea II y actividad #5 del curso, se tiene un resumen sobre el comportamiento de las condiciones en MIPS, y se logro llegar a una idea sobre lo que se necesita estructurar en el código Back-End para lograr que se genere las condiciones que aparezcan en el código fuente.  

Prueba de códigos básicos

A continuación se muestra un código básico del lenguaje: string salto = "\n"@ int Edad = 5@ bool FuncionBool(bool b) { return b@ } real FuncionReal(real r) { return r+1.0@ } int FuncionInt(int i) { return i+1@ } string FuncionString(string s) { return s@ } char FuncionChar(char c) { return c@ } int main() { char c@ c = FuncionChar('I')@ print(c)@ print(salto)@ string s@ s = FuncionString("Hola Nahum")@ print(s)@ print(salto)@ int i@ i = FuncionInt(1)@ print(i)@ print(salto)@ real r@ r = FuncionReal(1.1)@ print(r)@ print(salto)@ bool b@ b = FuncionBool(True)@ print(b)@ } Seguidamente de su traducción al lenguaje MIPS .data true: .asciiz "print true" false: .asciiz "print false" Et0: .asciiz "\n" Et1: .asciiz "Hola Nahum" .text .globl main print_true: li    $v0,4 la   $a0, true syscall jr $ra print_false: li    $v0,...

Estructura de pila

En el trabajo realizado de estos dos días, luego de investigar sobre la pila de MIPS y su importancia para la completa funcionalidad, se dedujo que antes de crear el código fuente a código MIPS se debe manejar una pila de antemano. Solución: Se hicieron dos clases necesarias para manejar la pila en el proceso de la creación del código MIPS, fueron las siguientes: Clase Elemento: esta clase maneja un objeto que tiene tres atributos que sería, el valor, la posición en la SP y su tipo de valor. Esto para manejar los objetos que se ingresan a la pila en MIPS Clase Pila: la clase pila maneja una lista de objetos tipo Elemento y tiene dos métodos importantes que es agregar un elemento nuevo y retornar el valor de una posición que almacena un elemento en la lista. Por ahora estas dos clases han abierto caminos para progresar en el desarrollo de este tercer proyecto

Investigación de funciones complejos y llamadas

La investigación realizada fue para saber como se implementa casos donde se crea funciones con más de 4 parámetros y también un caso donde se llame una función con más de 4 parámetros.  En MIPS sucede que hay cuatro registros para los argumentos y no sabíamos que hacer en casos que se requiera llamar o crear una función con más de 4 argumentos. Solución La solución que se dio fue que se utiliza los 4 argumentos brindados y se empieza a reservar campos en la pila y luego guardar  los argumentos restantes en esos campos reservados. Con esto podemos tomar la funcionalidad de utilizar los cuatro primero argumentos y en dado caso que haya más parámetros se utiliza una pila temporalmente.

Investigación sobre cómo estructurar el código fuente

Se realiza la investigación de cómo debe ir estructurado el código fuente para que pueda ser aceptado por el compilador y así se realice la generación del código de manera correcta. A raíz de esto se comprende cual es la estructura del archivo .s que debe ser generado. Se toma en cuenta los archivos de pruebas utilizados anteriormente para la comprensión de cual es la estructura aceptada.

Investigación I - Generar código MIPS a cada expresión en cascada.

Como primer paso en este tercer proyecto al tener estructuras que manejan cada tipo de declaración y otras cosas que componen la gramática del lenguaje que hemos creado, nos dimos cuenta que estas estructuras tienen el propósito de ayudar para realizar el análisis sintáctico y semántico pero se analizo que estas estructuras podrían pasar por un algoritmo que va generando en forma de cascada el código respectivo en MIPS. Los pasos que se tiene pensando hacer en este algoritmo sería: Almacenar los tokens que componen cada tipo de expresión, luego lo que compone el bloque y de final las funciones. Al tener en estructura los tokens sería ir en forma de cascada generando el código MIPS para cada estructura que se almaceno. Al finalizar, sería escribir el código en archivo de extensión .s  Por el momento, se ha hecho dos reuniones para realizar un  pseudocódigo  del algoritmo. Se tiene una idea clara gracias al realizar el documento de requerimientos.