https://github.com/juaniv2002/compiler
Compilador completo para el lenguaje C-TDS desarrollado en C. Incluye análisis léxico (Flex), sintáctico (Bison), semántico, generación de código intermedio (TAC), optimizaciones y generación de código ensamblador. Proyecto académico de compiladores con documentación completa.
https://github.com/juaniv2002/compiler
abstract-syntax-tree compiler-design symbol-table three-address-code x86-64 yacc-lex
Last synced: about 9 hours ago
JSON representation
Compilador completo para el lenguaje C-TDS desarrollado en C. Incluye análisis léxico (Flex), sintáctico (Bison), semántico, generación de código intermedio (TAC), optimizaciones y generación de código ensamblador. Proyecto académico de compiladores con documentación completa.
- Host: GitHub
- URL: https://github.com/juaniv2002/compiler
- Owner: JuaniV2002
- Created: 2025-09-08T14:06:18.000Z (10 months ago)
- Default Branch: main
- Last Pushed: 2025-11-14T20:47:25.000Z (8 months ago)
- Last Synced: 2025-11-14T22:20:56.597Z (8 months ago)
- Topics: abstract-syntax-tree, compiler-design, symbol-table, three-address-code, x86-64, yacc-lex
- Language: HTML
- Homepage: https://juaniv2002.github.io/compiler/
- Size: 459 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Compilador C-TDS
## Documentación
Para acceder a la documentación online, generada con docmd, dirigirse a:
[Documentación del Compilador C-TDS](https://juaniv2002.github.io/compiler/)
## Branches
- `main`: Versión estable del compilador.
- `parser`: Versión terminal del parser.
- `analizador-semantico`: Versión terminal del analizador semantico.
- `codigo-intermedio`: Versión terminal del generador de código intermedio.
- `assembly`: Versión terminal del generador de código ensamblador.
- `optimizations`: Versión terminal con optimizaciones implementadas.
## Compilación
Para compilar el compilador:
```bash
make
```
Esto genera el ejecutable `c-tds`.
## Uso
### Sintaxis
```bash
c-tds [opcion] nombreArchivo.ctds
```
### Opciones
- **`-o `**: Renombra el archivo ejecutable a ``
- **`-target `**: Compila hasta la etapa especificada
- `scan`: Análisis léxico (genera `.lex`)
- `parse`: Análisis sintáctico (genera `.sint`)
- `codinter`: Código intermedio (genera `.ci`)
- `assembly`: Ensamblador (genera `.ass`)
- **`-opt [optimización]`**: Realiza optimizaciones sobre el código intermedio (TAC)
- `constant-propagation`: Propagación de constantes y constant folding
- `dead-code`: Eliminación de código muerto (no implementado)
- `pattern-matching`: Búqueda de patrones en expresiones aritmeticas
- `all`: Aplica todas las optimizaciones disponibles
- **`-debug`**: Imprime información de debugging. Si la opción no es dada, cuando la compilación es exitosa no se imprime ninguna salida
### Ejemplos
Compilar hasta análisis sintáctico (comportamiento por defecto):
```bash
./c-tds programa.ctds
```
Compilar con información de debugging:
```bash
./c-tds -debug programa.ctds
```
Compilar hasta la etapa de análisis léxico:
```bash
./c-tds -target scan programa.ctds
```
Especificar nombre de salida:
```bash
./c-tds -o mi_programa programa.ctds
```
Combinar múltiples opciones:
```bash
./c-tds -target assembly -o programa.asm -opt all -debug programa.ctds
```
Aplicar optimización de propagación de constantes:
```bash
./c-tds -opt constant-propagation programa.ctds
```
Generar código intermedio optimizado:
```bash
./c-tds -target codinter -opt constant-propagation -debug programa.ctds
```
## Tests
Para ejecutar tests usando el Makefile:
```bash
make test-correct # Test sintácticamente correcto
make test-incorrect # Test sintácticamente incorrecto
make test # Ambos tests
```
Para ejecutar con archivo personalizado:
```bash
make run FILE=mi_archivo.txt
```
## Limpieza
Para limpiar archivos generados:
```bash
make clean
```
## Notas
- El archivo de entrada debe tener extensión `.ctds`.
- El nombre del archivo no puede comenzar con `-`.
- Por defecto, sin especificar `-target`, la compilación procede hasta la etapa corriente.
- Sin `-o`, el archivo de salida tiene el nombre base del archivo de entrada con extensión según la etapa (`.out` por defecto).
- Sin `-debug`, cuando la compilación es exitosa no se imprime el AST ni la tabla de símbolos.