Entradas

Mostrando entradas de septiembre, 2021

Construyendo el compilador Parte VI: Generación de código intermedio

Imagen
 HOLA! Hoy, veremos un poquito de teoría. En el blog pasado, les comenté que terminé mi análisis semántico. Pues, noticias noticias. Tuve errores, y ya fueron corregidos. El codigo intermedio Esta etapa es "opcional".  Primero, el código intermedio es una forma más sencilla de pasar del análisis semántico al lenguaje target (el lenguaje assembler que usaremos). Al estar en una etapa media entre estos dos bloques, permite que mediante un estándar, podamos transformar nuestro análisis semántico en algo que sea más facil de traducir a assembler. El lenguaje escogido para esta fase será: ARM Acá una imagen de en que parte del compilador vamos. Otra cosa interesante, es q ue esta es parte del "front end". Por lo tanto, al tener varios lenguajes de fornt end y uno de back end, es posible pasar de muchos apocos, para propósitos de escalamiento esto es bueno.  Es como babel. Ya tenido nuestro lenguaje tarjet (ARM) ahora es de considera cómo el código intermedio se represent...

Construyendo el compilador Parte V: Finalizando el analizar Semántico

Imagen
 Hola! He finalizado el analizador semántico. Fue duro (casi 2000 lineas de codigo en python) pero se logró. Adjuntare evidencia y una especie de readme del resultado final. Espero les guste. Acerca de... Este proyecto es el primero de tres de construccion de un compilador. Esa fase es la análisis semántico. Significa, que se construye un arbol con ANTLR 4 y luego vamos analizando recorriendo el arbol y viendo que cumpla con las reglas gramaticales. Algunos puntos vistos en este proyecto y que quiero compartir el en BLOG Lectura de archivos txt o .decaf Graficado de arboles sintácticos de ANTLR para mejor visualización Revisión semántica del código Descripción de herramientas y archivos archivos Listado de herramientas usadas para el proyecto Python 3.8.0 64bits Compiladores principios, técnicas y herramientas, 2da Edición - Alfred V. Aho VS Code Windows Terminal A lot of Coffe (more Coffe than last time) ( enought coffe for a life V3 ) Liberías NECESARIAS para correr el programa P...

Construyendo el compilador Parte IV: ANTLR V4, y gramática de Cardelli

 La entrada de hoy es algo corta. Solo quiero nombrar y enfatizar qué es una gramática de cardelli. Una gramática de cardelli o los tipos de cardelli, es una manera de expresar formalmente las reglas semánticas que definen un lenguaje de programación. Para este proyecto, serán las siguientes. Sistema de tipos Definiendo Sintaxis de los Tipos int char boolean void error Tipo de ámbito Ámbito estático-léxico Consideraciones generales Números son: [0..9]* Palabras reservadas de bool: true, false otras palabras reservadas: if, while, { },[ ],   Proposiciones : En todos los posibles ámbitos G : Ámbito Global No. Regla Explicación 1 |- true: bool |- false: bool Los lexemas “true” y “false” serán tomados con tipo de dato bool en todo el programa. 2 G |- a: int G |- b: int ------------------ G |- a + b: int G |- a - b: int G |- a * b: int G |- a / b: int G |- a % b: int G |- a < b: bool G |- a > b: bool G |- a >= b: bool G |- a <= b: bool G |- a == b: bool G |- a != b...