Вы находитесь на странице: 1из 16

Lenguajes y Autómatas

M.S.C. JESSICA I. RODRÍGUEZ MONTOYA


Unidad 1.

Introducción a la
Teoría de Lenguajes
Formales.
Conceptos
 1.1 Alfabeto
Es un conjunto no vacío y finito de elementos denominados símbolos y los denotaran con el símbolo Ʃ.
El símbolo es un primitivo de la teoría de los lenguajes formales y para representarlos se suelen utilizar o
bien las primeras letras del alfabeto latino o
bien dígitos. Por tanto, cualquiera de los conjuntos siguientes es un alfabeto:
Σ1={a, b, c} Σ2={0,1}
 1.2 Cadenas
Secuencia finita de símbolos unidos por concatenación que se representa disponiendo los diferentes
símbolos que la componen en el orden deseado. Por tanto, aaaw o, simplemente, w también son
cadenas. Denotamos la cadena vacía con el símbolo ε
 La longitud de una palabra es la cantidad de letras que contiene, contando las repeticiones; se
denota por |w| para una palabra w. Por ejemplo, |perro| es 5.
 1.3 Lenguajes
Conjunto de palabras o cadenas que incluyen símbolos de algún alfabeto Σ.
1.4 Tipos de Lenguajes

 Lenguajes de bajo nivel. Son lenguajes totalmente dependientes de la maquina, es


decir que el programa que se realiza con este tipo de lenguajes no se puede migrar o
utilizar en otras maquinas. Al estar prácticamente diseñados a la medida del hardware,
aprovechan al máximo las características del mismo.
• Lenguaje Maquina. Consiste en la combinación de 0 y 1 para formar las ordenes
entendibles por el hardware de la maquina. Es un lenguaje mucho mas rápido que
los de alto nivel, sin embargo, tienen una dificultad mayor de codificación y de
identificar errores.
• Lenguajes ensambladores. Es un derivado del lenguaje maquina. Formado por
abreviaturas de letras y números llamadas mnemotecnicos. A partir de este
lenguaje se crearon los programas traductores para convertir de lenguaje
ensamblador a lenguaje maquina. Los códigos fuentes son mas cortos y los
programas ocupan menos espacio en memoria. Pero con la dificultad de tener
que aprender un nuevo lenguaje.
1.4 Tipos de Lenguajes

 Lenguajes de Alto Nivel: Son aquellos que se encuentran mas cercanos al lenguaje
natural. Estos lenguajes permiten que los algoritmos se expresen en un nivel y estilo de
escritura fácilmente legible y comprensible. Son lenguajes independientes de la
arquitectura del ordenador, por lo que un programa lo puedes migrar de una maquina a
otra sin inconvenientes.
 Lenguajes declarativos. Los lenguajes declarativos son los más parecidos al castellano o
inglés. Son fundamentalmente lenguaje de órdenes, denominados por sentencias que
expresan “Lo que hay que hacer” en vez de “Como hacerlo”.
Generaciones.

 La evolución de los lenguajes de programación se puede dividir en 5 etapas o


generaciones.
• Primera Generación. Lenguaje Maquina.
• Segunda Generación. Se crearon los primeros lenguajes ensambladores.
• Tercera Generación. Se crean los primeros lenguajes de alto nivel, Ej. C, Pascal, Cobol, etc.
• Cuarta Generación. Incluye el desarrollo rápido de aplicaciones y los lenguajes Orientados
a Objetos haciendo posible la reutilización de partes de código. VisualStudio, Delphi,
Foxpro, Game Maker.
• Quinta Generación. Aquí se encuentran los lenguajes orientados a la inteligencia artificial.
1.5 Herramientas computacionales
ligadas con lenguajes
 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. Ejemplos de traductores son los ensambladores y los
compiladores.
 Compilador: El compilador es un programa informático que traduce un programa escrito
en lenguaje de programación y lo pasa a lenguaje de programación, podemos decir que
este programa nos permite traducir un código fuente de un programa en lenguaje de
nivel alto, y lo pasmos a otro nivel inferior (lenguaje maquina).
 Ensamblador: El ensamblador es el programa en que se realiza la conversión de un
programa escrito en ensamblador y lo pasa a lenguaje maquina.
 Interpretes: Un intérprete es un programa que analiza y ejecuta simultáneamente un
programa escrito en un lenguaje de alto nivel. Va traduciendo las sentencias de codigo y
ejecutándolas si están bien. Lenguajes interpretados: PHP, ASP, HTML, JavaScript, Prolog.
1.6 Estructura de un Traductor
1.6 Estructura de un Traductor
1.7 Fases de Análisis
1.-Analizador léxico: (también llamado análisis lineal)Lee la secuencia de caracteres de izquierda a derecha
del programa fuente y agrupa las secuencias de caracteres en unidades con significado propio llamadas
tokens que consiste en un nombre y un valor de atributo opcional. Se revisan las palabras clave, identificadores,
operadores, constantes numéricas, signos de puntuación como separadores de sentencias, llaves, paréntesis,
etc. Todos los espacios en blanco, líneas en blanco, comentarios y demás información innecesaria se elimina
del programa fuente.
Tenemos una proposición de asignación.
posicion=inicial + velocidad * 60
1. Identificador posicion
2. Simbolo de asignacion
3. Identificador inicial
4. Simbolo de suma
5. Identificador velocidad
6. Simbolo de multiplicacion
7. Numero 60
1.7 Fases de Análisis

2. Analizador Sintáctico. (también llamado análisis jerárquico) 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. Agrupa los componentes léxicos en frases gramaticales que el compilador utiliza
para sintetizar la salida.
1.7 Fases de Análisis

3. Analizador Semántico. Realiza las comprobaciones necesarias sobre el árbol sintáctico


para determinar el correcto significado del programa y encontrar errores semánticos.
• Las tareas básicas a realizar son: La verificación de tipos en asignaciones y expresiones, la
declaración del tipo de variables y funciones antes de su uso, el correcto uso de operadores
y si sus operandos son los permitidos (un real no debe utilizarse como índice), el ámbito de las
variables y la correcta llamada a funciones. El análisis semántico suele agregar atributos
(como tipos de datos) a la estructura del árbol semántico.
1.7 Fase de Síntesis

4.-Generación y optimización de código intermedio: La optimización consiste en la


simplificació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ándoos y un lugar donde guardar el
resultado), también conocida como código intermedio.

5.-Generador 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.
1.7 Fase de Síntesis

6.-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.).
7.-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.
Tarea:
 Investigar los diferentes tipos de interpretes.
Fecha de entrega: jueves 7 de febrero.

Вам также может понравиться