Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Unidad I
Introduccin a la teora de
los lenguajes formales
Lenguajes y Autmatas I
Ing. Ricardo Ziga Hdez.
Qu es un alfabeto?
Un alfabeto es un conjunto finito no vaco de elementos los cuales
son llamados smbolos. Denotamos un alfabeto arbitrario con la
letra .
Qu es un smbolo?
Es una entidad abstracta que no se puede definir, ya que se
dejara como una axioma, igual que se define un punto en la
geometra. Normalmente los smbolos son letras (a, b, c,. z),
dgitos (0,1,9 o caracteres (+, -, *, /,>,< ..); los smbolos
pueden estar formados por varias letras o caracteres.
Lenguajes y Autmatas I
Ing. Ricardo Ziga Hdez.
Lenguajes y Autmatas I
Ing. Ricardo Ziga Hdez.
Qu es una cadena?
Es un conjunto de smbolos o palabra sobre un alfabeto ;
admitimos la existencia de una nica cadena que no tiene
smbolos, la cual se denomina cadena vaca y se denota con ; la
cadena vaca desempea, en la teora de lenguajes formales, un
papel similar al que desempea el conjunto vaco en la teora
de conjuntos.
Lenguajes y Autmatas I
Ing. Ricardo Ziga Hdez.
Lenguajes y Autmatas I
Ing. Ricardo Ziga Hdez.
Cadena vaca
Una cadena vaca es la nica cadena de caracteres de tamao
cero. Y la podemos denotar usualmente con letras o (Griegas).
Lenguajes y Autmatas I
Ing. Ricardo Ziga Hdez.
Concatenacin de cadenas
La concatenacin de dos cadenas u y v, escrita uv, es "pegar" las
dos cadenas para formar una nueva.
Ejemplo:
Sea: u = ab
v = ca
w = bb.
Entonces: uv = abca
vw = cabb
(uv) w = abcabb
u(vw) = abcabb
El resultado de la concatenacin de u, v y w es independiente del
orden en que las operaciones son ejecutadas. Matemticamente
esta propiedad es conocida como asociatividad.
Lenguajes y Autmatas I
Ing. Ricardo Ziga Hdez.
Formacin de alfabetos
Teniendo los siguientes smbolos, se puede generar los siguientes
alfabetos:
1.- = {0 , 1}
Alfabeto binario
2.- = {a, b, c, z}
El conjunto de todas las letras minsculas
3.- El conjunto de todos los caracteres ASCII
Lenguajes y Autmatas I
Ing. Ricardo Ziga Hdez.
Formacin de cadenas
Ejemplo: si = {0, 1}, entonces
1 = {0 , 1}
2 = {00, 01, 10, 11}
3 = {000, 001, 010, 011, 100, 101, 110, 111}
Ejemplo de cadena vaca:
0 = {}, independientemente de cual sea el alfabeto , es decir,
es la nica cadena cuya longitud es 0.
Lenguajes y Autmatas I
Ing. Ricardo Ziga Hdez.
Lenguajes
Es un conjunto de cadenas, todas seleccionadas de un *.
donde es un determinado alfabeto se denomina lenguaje.
Los lenguajes habituales pueden interpretarse como conjuntos
de cadenas. Un ejemplo es el lenguaje ingls, donde la
coleccin de las palabras correctas inglesas es un conjunto de
cadenas del alfabeto que consta de todas las letras. Otro
ejemplo es el lenguaje C o cualquier otro lenguaje de
programacin, donde los programas correctos son un
subconjunto de las posibles cadenas que pueden formarse a
partir del alfabeto del lenguaje.
Lenguajes y Autmatas I
Ing. Ricardo Ziga Hdez.
Ejemplos de lenguajes
1.- Un lenguaje de todas las cadenas que consta de n ceros
seguidos de n unos para cualquier n>=0; {,01,0011,000111,}
2.- El conjunto de cadenas formadas por el mismo nmero de
ceros que unos: {, 01, 10, 0011, 0101, 1001, }
3.- El conjunto de nmeros binarios cuyo valor es un nmero
primo: {,10,11,101,111,1011,}
4.- * es un lenguaje para cualquier alfabeto
5.- 0, el lenguaje vaco, es un lenguaje de cualquier alfabeto.
Lenguajes y Autmatas I
Ing. Ricardo Ziga Hdez.
Tipos de lenguajes
Lenguaje natural
El ser humano est relacionado con el concepto tradicional de
gramtica que, de esta forma intuitiva, puede considerar un
conjunto de reglas las cuales indican qu es correcto y qu no lo es
del lenguaje natural. Con este fin se puede acercar a la definicin
ms clara y formal de la lengua que se utiliza.
Ejemplo: El lenguaje espaol.
Lenguajes y Autmatas I
Ing. Ricardo Ziga Hdez.
Tipos de lenguajes
Lenguaje artificial / Computacional
Declarativos
Son fundamentalmente lenguajes de rdenes, dominados por
sentencias que expresan lo que hay que hacer en vez de cmo hacerlo.
Alto nivel
Son los ms utilizados como lenguajes de programacin, permiten que
los algoritmos se expresen en un nivel y estilo de escritura fcilmente legible
y comprensible por otros programadores.
Ensamblador
Es el programa en que se realiza la traccin de un programa escrito en
ensamblador y lo pasa a lenguaje mquina. Directa o no directa la
traduccin en que las instrucciones no son ms que instrucciones que
ejecuta la computadora.
Mquina
Es como la mquina interpreta lo que nosotros queremos hacer, es la
lectura de 0 y 1.
Lenguajes y Autmatas I
Ing. Ricardo Ziga Hdez.
Tipos de lenguajes
Lenguaje regular.
Llamamos as a los lenguajes porque sus palabras contienen
"regularidades" o repeticiones de los mismos componentes, por
ejemplo en este lenguaje L1 = { ab, abab, ababab, abababab,...}
En este ejemplo se aprecia que las palabras de L1 son solo
repeticiones de "ab" donde se repiten varias veces. Su regularidad
consiste en las palabras que contienen "ab" varias veces.
Lenguajes y Autmatas I
Ing. Ricardo Ziga Hdez.
Herramientas computacionales
ligadas con los lenguajes
Muchas herramientas computacionales que manipulan programas
fuente realizan primero algn tipo de anlisis, segn sean las
caractersticas del lenguaje que se estudia. A continuacin se
vern algunas de esas herramientas, aclarando que existe una
gran diversidad de stas.
Lenguajes y Autmatas I
Ing. Ricardo Ziga Hdez.
Editor de estructuras
Esta herramienta no solo realiza las funciones de
creacin y modificacin de textos de un editor de textos
ordinario, sino que tambin analiza el texto del
programa, imponiendo al programa fuente una
estructura jerrquica apropiada.
De esta manera, el editor de estructuras puede realizar
tareas adicionales tiles para la preparacin de
programas.
Lenguajes y Autmatas I
Ing. Ricardo Ziga Hdez.
Impresoras estticas
Una impresora esttica analiza un programa y lo
imprime de forma que la estructura del programa
resulte claramente visible.
Lenguajes y Autmatas I
Ing. Ricardo Ziga Hdez.
Traductor
Se define a un traductor como un programa que traduce o convierte
desde un texto o programa escrito en un lenguaje fuente hasta un
texto o programa equivalente escrito en un lenguaje destino
produciendo, si cabe, mensajes de error.
Lenguajes y Autmatas I
Ing. Ricardo Ziga Hdez.
Lenguajes y Autmatas I
Ing. Ricardo Ziga Hdez.
Tipos de traductores
Desde los orgenes de la computacin, ha existido un abismo
entre la forma en que las personas expresan sus necesidades y la
forma en que un ordenador es capaz de interpretar instrucciones.
1.- Traductores del idioma.
Traducen de un idioma dado a otro, como por ejemplo del ingls
al espaol. Este tipo de traductores posee multitud de problemas.
Lenguajes y Autmatas I
Ing. Ricardo Ziga Hdez.
Tipos de traductores
2.- Compiladores.
Es aquel traductor que tiene como entrada una sentencia en
lenguaje formal y como salida tiene un archivo ejecutable, es
decir, realiza una traduccin de un cdigo de alto nivel a cdigo
mquina (tambin se entiende por compilador aquel programa
que proporciona un archivo objeto en lugar del ejecutable final).
Programa fuente
Compilador
Cdigo objeto
Error de sintaxis
Editar y corregir
Lenguajes y Autmatas I
Ing. Ricardo Ziga Hdez.
Intrpretes
Es como un compilador, solo que la salida es una ejecucin. El
programa de entrada se reconoce y ejecuta a la vez. No se
produce un resultado fsico (cdigo mquina) sino lgico (una
ejecucin).
Lenguajes y Autmatas I
Ing. Ricardo Ziga Hdez.
Lenguajes y Autmatas I
Ing. Ricardo Ziga Hdez.
Lenguajes y Autmatas I
Ing. Ricardo Ziga Hdez.
Intrprete de comandos
Traduce sentencias simples a invocaciones a programas de una
biblioteca. Se utilizan especialmente en los sistemas operativos (la
Shell de Unix es un intrprete de comandos). Los programas
invocados puedes residir en el kernel (ncleo) del sistema o estar
almacenados en algn dispositivo externo.
Ejemplo:
Si bajo MS-DOS se teclea el comando copy se ejecutar la funcin
de archivos del sistema operativo, que se encuentra residente en
memoria.
Lenguajes y Autmatas I
Ing. Ricardo Ziga Hdez.
Ensambladores y macroensambladores
Un ensamblador es un compilador sencillo, en el que el lenguaje
fuente tiene una estructura tan sencilla que permite la traduccin
de cada sentencia fuente a una nica instruccin en cdigo
mquina.
Lenguajes y Autmatas I
Ing. Ricardo Ziga Hdez.
Conversores fuente-fuente
Permiten traducir desde un lenguaje de alto nivel a otro lenguaje
de alto nivel, con lo que se consigue una mayor portabilidad en
los programas de alto nivel.
Lenguajes y Autmatas I
Ing. Ricardo Ziga Hdez.
Compilador cruzado
Es un compilador que genera cdigo para ser ejecutado en otra
mquina.
Se utilizan en la fase de desarrollo de nuevos ordenadores.
Lenguajes y Autmatas I
Ing. Ricardo Ziga Hdez.
Procesadores
Permiten modificar el programa fuente antes de la verdadera
compilacin.
Hacen uso de macroinstrucciones y directivas de compilacin.
Los preprocesadores suelen actuar de manera transparente para
el programador, pudiendo incluso considerarse que son una fase
preliminar del compilador.
Algunas otras directivas de preprocesamiento permiten compilar
trozos de cdigos opcionales (lenguajes C y Clipper): #if, #ifdef,
#define, #ifndef, etc.
Lenguajes y Autmatas I
Ing. Ricardo Ziga Hdez.
Analizador lxico
Se encarga de buscar los componentes lxicos (tokens) o palabras
que componen el programa fuente, segn unas reglas o patrones.
La entrada del analizador lxico se puede definir como una
secuencia de caracteres.
Lenguajes y Autmatas I
Ing. Ricardo Ziga Hdez.
Estructura de un traductor
Recordando que un traductor es un programa que convierte desde
un texto o programa escrito en un lenguaje fuente hasta un texto
o programa equivalente escrito en un lenguaje destino,
produciendo, si cabe, mensajes de error, se pueden identificar dos
fases en este proceso:
Programa
fuente
Fase de anlisis
(Front end)
Comprueba que el
programa est escrito
conforme a las reglas
del lenguaje
Fase de sntesis
(Back end)
Programa
destino
Genera el texto
equivalente en el
lenguaje objeto
Lenguajes y Autmatas I
Ing. Ricardo Ziga Hdez.
Fase de anlisis
El objetivo de esta etapa es obtener una representacin de la
entrada que permita realizar la sntesis o la interpretacin con
comodidad.
El anlisis a su vez se divide en tres pasos:
Anlisis lxico.
Se encarga de la divisin de la entrada en componentes lxicos.
Anlisis sintctico.
Se encarga de encontrar las estructuras presentes en la entrada.
Anlisis semntico.
Se encarga de comprobar que se cumplan las restricciones
semnticas del lenguaje.
Programa
fuente
Anlisis
lxico
Secuencia
de smbolos
Gestin de errores
Anlisis
sintctico
rbol
sintctico
Tabla de smbolos
Anlisis
semntico
Lenguajes y Autmatas I
Ing. Ricardo Ziga Hdez.
Sntesis
Una vez analizado el programa de entrada, es necesario generar
cdigo, a ser posible para la mquina objetivo.
La generacin de cdigo se divide habitualmente en dos etapas:
1.- Generacin de cdigo intermedio.
2.- Generacin de cdigo objeto: Se traduce el cdigo intermedio a
cdigo mquina.
rbol
sintctico
Generador
de cdigo
intermedio
Cdigo
intermedio
Gestin de errores
Optimizador
de cdigo
intermedio
Cdigo
intermedio
optimizado
Generador
de cdigo
objeto
Tabla de smbolos
Lenguajes y Autmatas I
Ing. Ricardo Ziga Hdez.
Gestor de errores
Al programar se cometen errores, compilador debe, ante un error:
diagnosticarlo de la manera ms clara posible. Detener la
generacin de cdigo. Intenta recuperarse para poder continuar el
anlisis.
Lenguajes y Autmatas I
Ing. Ricardo Ziga Hdez.
Tabla de smbolos
Esta estructura de datos mantiene la informacin asociada con los
identificadores: funciones, variables, constantes y tipos de datos.
Esta tabla interacta con casi todas las fases del compilador.
entrada, es necesario generar cdigo, a ser posible para la mquina
objetivo.
Lenguajes y Autmatas I
Ing. Ricardo Ziga Hdez.