Skip to content

Zeta2003x/SSL_Grin_Matias

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SSL_Grin_Matias

image

📚 Sobre este Repositorio

Este repositorio contiene los trabajos prácticos desarrollados durante la cursada de Sintaxis y Semántica de los Lenguajes en la Universidad Tecnológica Nacional - Facultad Regional Buenos Aires (UTN-FRBA). La materia aborda los fundamentos teóricos y prácticos de la construcción de compiladores e intérpretes.

🎯 Objetivos del Curso

El objetivo principal de la materia es comprender los conceptos fundamentales de la teoría de compiladores y aplicarlos en el diseño e implementación de procesadores de lenguajes. A lo largo del curso se desarrollan las siguientes competencias:

  • Análisis Léxico: Reconocimiento de tokens y patrones mediante autómatas finitos
  • Análisis Sintáctico: Construcción de árboles de sintaxis utilizando gramáticas libres de contexto
  • Análisis Semántico: Verificación de tipos, tablas de símbolos y validación semántica
  • Generación de Código: Implementación de las fases de un compilador completo

📂 Estructura del Repositorio

00-PrimerProgramaC

Programa inicial en C que imprime "Hola Mundo". Introducción al lenguaje C y configuración del entorno de desarrollo.

Archivos principales:

  • Hola mundo.c - Código fuente
  • Hola mundo.exe - Ejecutable compilado

TP1: Reconocedor de Constantes Numéricas (Autómata Finito)

Implementación de un autómata finito determinístico (AFD) en C para reconocer y clasificar constantes numéricas en diferentes bases.

Objetivo: Aplicar la teoría de autómatas finitos para el análisis léxico de números en distintos formatos.

Funcionalidad:

  • Reconoce constantes DECIMAL (base 10): 127, 255
  • Reconoce constantes OCTAL (base 8): 0, 010, 0777
  • Reconoce constantes HEXADECIMAL (base 16): 0xFF, 0xABCD
  • Detecta y reporta números NO RECONOCIDOS con formato inválido

Archivos principales:

  • tp1.c - Implementación del autómata finito
  • input.txt - Casos de prueba de entrada
  • salida.txt - Resultados esperados

Ejemplo de uso:

Entrada: 0xFF,127,0159,0xaBb1,0Xx,0,010,09
Salida:
  0xFF       HEXADECIMAL 
  127        DECIMAL 
  0159       NO RECONOCIDA 
  0xaBb1     HEXADECIMAL 

TP2: Analizador Léxico con Lex/Flex

Desarrollo de un analizador léxico completo utilizando la herramienta Lex/Flex para reconocer todos los tokens del lenguaje C.

Objetivo: Utilizar herramientas de generación automática de analizadores léxicos y comprender el uso de expresiones regulares.

Funcionalidad:

  • Reconoce palabras reservadas (if, else, while, for, int, char, etc.)
  • Identifica identificadores (nombres de variables y funciones)
  • Clasifica constantes numéricas (decimales, octales, hexadecimales)
  • Detecta constantes reales (punto flotante)
  • Reconoce constantes de caracteres y literales de cadena
  • Procesa comentarios (de línea // y de bloque /* */)
  • Identifica operadores y caracteres especiales

Archivos principales:

  • tp2.l - Especificación Lex con expresiones regulares
  • funciones.c - Funciones auxiliares para procesamiento
  • input.txt - Código C de prueba
  • output.txt - Tokens reconocidos

Tecnología: Lex/Flex + C

TP3: Reconocedor de Expresiones Aritméticas (Autómata de Pila)

Implementación de un autómata de pila para validar expresiones aritméticas balanceadas.

Objetivo: Aplicar la teoría de autómatas de pila para reconocer lenguajes libres de contexto.

Funcionalidad:

  • Valida expresiones aritméticas con paréntesis balanceados
  • Reconoce operadores: +, -, *, /
  • Verifica la correcta estructura sintáctica de expresiones
  • Utiliza una pila para validar el balance de paréntesis

Archivos principales:

  • tp3.c - Implementación del autómata de pila
  • stack.h - Librería de pila (stack)

Ejemplo: Valida expresiones como (5 + 3) * 2, ((1 + 2) / 3)

TP4: Analizador Sintáctico y Semántico Completo (Lex + Yacc)

Compilador completo para un subconjunto del lenguaje C utilizando Lex/Flex (análisis léxico) y Yacc/Bison (análisis sintáctico).

Objetivo: Integrar análisis léxico, sintáctico y semántico en un compilador funcional.

Funcionalidad:

  • Análisis Léxico: Tokenización del código C
  • Análisis Sintáctico: Verificación de la estructura gramatical mediante gramáticas BNF
  • Análisis Semántico:
    • Validación de tipos de datos
    • Tabla de símbolos
    • Detección de variables duplicadas
    • Verificación de declaraciones antes de uso
    • Control de estructuras (if, while, for, switch)

Características soportadas:

  • Declaraciones de variables (int, char, float, double)
  • Arrays y punteros
  • Estructuras de control (if, else, switch, while, do-while, for)
  • Funciones (declaración, definición, llamadas)
  • Directivas del preprocesador (#include, #define)
  • Expresiones aritméticas y lógicas

Archivos principales:

  • src/TP4.l - Especificación léxica (Lex/Flex)
  • src/TP4.y - Gramática sintáctica y semántica (Yacc/Bison)
  • src/funcionesC.c / funcionesC.h - Funciones auxiliares y tabla de símbolos
  • src/entrada.txt - Código C de prueba
  • makefile - Automatización de compilación

Tecnología: Lex/Flex + Yacc/Bison + C

Compilación:

cd TP4
make

🛠️ Tecnologías Utilizadas

  • Lenguaje: C
  • Análisis Léxico: Lex/Flex
  • Análisis Sintáctico: Yacc/Bison
  • Compilador: GCC
  • Control de versiones: Git/GitHub

📖 Conceptos Teóricos Aplicados

  1. Autómatas Finitos Determinísticos (AFD) - TP1
  2. Expresiones Regulares - TP2
  3. Autómatas de Pila - TP3
  4. Gramáticas Libres de Contexto (GLC) - TP4
  5. Análisis Léxico-Sintáctico-Semántico - TP4
  6. Tabla de Símbolos - TP4
  7. Verificación de Tipos - TP4

👤 Autor

Matias Grin

  • GitHub: @Zeta2003x
  • Universidad: UTN-FRBA
  • Materia: K2051 - Sintaxis y Semántica de los Lenguajes

📝 Notas

Este repositorio documenta la evolución del aprendizaje en la construcción de compiladores, desde el reconocimiento básico de tokens hasta la implementación de un analizador sintáctico y semántico completo. Cada trabajo práctico construye sobre los conceptos del anterior, culminando en un compilador funcional para un subconjunto del lenguaje C.

About

Este es mi repositorio para la cursada de Sintaxis y Semántica de Lenguajes

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors