Introduccion a Los Lenguajes Formales

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 5

INTRODUCCION A LOS LENJUAGES FORMALES

EDITOR DE ESTRUCTURA

El editor de estructura no solo realiza las funciones de creación y modificación de


texto si no que también analiza el texto ordinario.

IMPRESORAS ESTETICAS

Una impresora estética analiza un programa y lo imprime de forma que la


estructura del programa resulte visible.

TRADUCTOR
Traduce un texto desde un programa o lenguaje escrito hasta generar un
programa equivalente en el lenguaje destino.

COPILADOR
Es un tipo de traductor que trasforma el lenguaje de alto nivel a lenguaje de bajo
nivel.

INTERPRETE
Es como un copilador pero va ejecutando a la vez que traduce

Estructura de un traductor

Un traductor es un programa que tiene como entrada un texto escrito en un


lenguaje (lenguaje fuente) y como salida produce un texto escrito en un lenguaje
(lenguaje objeto) que preserva el significado de origen.

En el proceso de traducción se identifican dos fases principales:


* Fase de análisis
* Fase de Síntesis

Fase de Análisis

Esta fase se encarga de comprender el código fuente y verificar su corrección.

a) Análisis Léxico

 Divide el código fuente en unidades básicas llamadas tokens (palabras


clave, identificadores, operadores, etc.).
 Detecta errores básicos como caracteres inválidos.
 Herramientas: Lex, Flex.

b) Análisis Sintáctico

 Organiza los tokens en una estructura jerárquica llamada árbol de sintaxis


o árbol de derivación.
 Verifica que la secuencia de tokens cumpla las reglas gramaticales del
lenguaje.
 Herramientas: Yacc, Bison.

c) Análisis Semántico

 Verifica el significado del código.


 Comprueba reglas como la compatibilidad de tipos, declaración de variables
antes de su uso, etc.
 Genera una representación intermedia del código.

2. Fase de Transformación (Representación Intermedia)

 Convierte el código fuente en una representación intermedia (IR), como


un código de tres direcciones, bytecode o un grafo.
4 Fase de Síntesis

Esta fase traduce la representación intermedia al código destino.

a) Generación de Código

 Convierte la IR en un código de bajo nivel (como ensamblador o código


máquina).
 Asegura que el código generado sea ejecutable en la arquitectura objetivo.

5. Módulos Adicionales

 Gestión de Errores:
o Detecta y reporta errores en cada fase (léxicos, sintácticos,
semánticos).
o Ejemplo: "Variable no declarada".
 Gestión de Tablas de Símbolos:
o Almacena información sobre identificadores, tipos de datos,
ubicaciones de memoria, etc.
 Backend Multiplataforma:
o Genera código para múltiples arquitecturas (x86, ARM, etc.).

6. Clasificación de Traductores

 Compilador: Traduce el programa completo a código máquina antes de


ejecutarlo (C, C++).
 Intérprete: Traduce y ejecuta el código línea por línea (Python, JavaScript).
 Compilador Just-In-Time (JIT): Combina compilación e interpretación para
optimizar la ejecución (Java, .NET).

Fases de un compilador.

• Los compiladores son programas de computadora que traducen de un


lenguaje a otro. Un compilador toma como su entrada un programa escrito en
lenguaje fuente y produce un programa equivalente escrito en lenguaje objeto.
• Un compilador se compone internamente de varias etapas, o fases, que
realizan operaciones lógicas. Es útil pensar en estas fases como piezas
separadas dentro del compilador, y pueden en realidad escribirse como
operaciones codificadas separadamente aunque en la práctica a menudo se
integran.

--Análisis Léxico
– Análisis Sintáctico
– Análisis Semántico
– Generación y Optimización de código intermedio
– Generación de código objeto

Analizador léxico: lee la secuencia de caracteres de izquierda a derecha del


programa fuente y agrupa las secuencias de caracteres en unidades con
significado propio (componentes léxicos o “tokens” en ingles).

Análisis sintáctico: determina si la secuencia de componentes léxicos sigue


la sintaxis del lenguaje y obtiene la estructura jerárquica del programa en forma
de árbol, donde los nodos son las construcciones de alto nivel del lenguaje

Análisis semántico: realiza las comprobaciones necesarias sobre el árbol


sintáctico para determinar el correcto significado del programa.

Generación y optimización de código intermedio: la optimización consiste


en la calibración del árbol sintáctico donde ya no aparecen construcciones de
alto nivel. Generando un código mejorado, ya no estructurado, más fácil de
traducir directamente a código ensamblador o máquina, compuesto de un
código de tres direcciones (cada instrucción tiene un operador, y la dirección
de dos operándonos y un lugar donde guardar el resultado), también conocida
como código intermedio.
Generación de código objeto: toma como entrada la representación
intermedia y genera el código objeto. La optimización depende de la máquina,
es necesario conocer el conjunto de instrucciones, la representación de los
datos (número de bytes), modos de direccionamiento, número y propósito de
registros, jerarquía de memoria, encauzamientos, etc.

Tabla de Símbolos: es una estructura tipo diccionario con operaciones de


inserción, borrado y búsqueda, que almacena información sobre los símbolos
que van apareciendo a lo largo del programa como son: – los identificadores
(variables y funciones) – Etiquetas – tipos definidos por el usuario (arreglos,
registros, etc.)

Gestor de errores: detecta e informa de errores que se produzcan durante la


fase de análisis. Debe generar mensajes significativos y reanudar la
traducción.

Encuentra errores: – En tiempo de compilación: errores léxicos (ortográficos),


sintácticos (construcciones incorrectas) y semánticos (p.ej. errores de tipo) –
En tiempo de ejecución: direccionamiento de vectores fuera de rango,
divisiones por cero, etc. – De especificación/diseño: compilan correctamente
pero no realizan lo que el programador desea.
Se trataran sólo errores estáticos (en tiempo de compilación). Respecto a los
errores en tiempo de ejecución, es necesario que el traductor genere código
para la comprobación de errores específicos, su adecuado tratamiento y los
mecanismos de tratamiento de excepciones para que el programa se continúe
ejecutando.

También podría gustarte