Este repositorio contiene el código fuente del trabajo práctico final de la materia. El proyecto consiste en la extensión de un compilador base para el lenguaje "Micro", añadiendo nuevas funcionalidades sintácticas y semánticas.
El compilador está escrito en C y genera código de tres direcciones como salida.
int: Números enterosfloat: Números reales de punto flotantechar: Caracteres individuales (entre comillas simples, ej:'a')
- Condicional
si-entonces-sino: Ejecución condicional de bloques de código - Bucle
mientras: Repetición mientras se cumpla una condición - Bucle
repetir-hasta: Repetición hasta que se cumpla una condición (ejecuta al menos una vez)
- Aritméticas: suma (
+), resta (-) - Relacionales:
==,!=,<,>,<=,>= - Asignación:
:= - Entrada/Salida:
leer(),escribir()
- Verificación de tipos en asignaciones y operaciones
- Control de declaración de variables antes de su uso
- Detección de errores de tipo en tiempo de compilación
- Generación de temporales con tipos correctos
.
├── src/
│ ├── scanner.c # Analizador léxico (scanner)
│ └── parser.c # Analizador sintáctico y semántico
├── main.c # Punto de entrada del compilador
├── micro.exe #
├── micro.m # Programa de ejemplo
└── micro.h # Declaraciones globales y prototipos
Para compilar el proyecto, utiliza el siguiente comando:
gcc main.c src/scanner.c src/parser.c -o micro
Para ejecutar el compilador sobre un archivo fuente en lenguaje Micro:
- En Windows:
micro micro.m- En Linux/Mac:
./micro micro.mEl compilador leerá el archivo micro.m y generará el código intermedio por salida estándar.
- Archivo de entrada:
inicio
int a;
a := 5;
repetir
a := a + 1;
escribir(a);
hasta (a == 10)
fin
- Salida por consola:
Declara a,Entera
Almacena 5,a,
L1:
Sumar a,1,Temp&1
Almacena Temp&1,a,
Write a,Entera,
ComparaIGUAL a,10,TempLog&2
Bf TempLog&2,L1,
Detiene ,,,