Introducción A La Teoría de Lenguajes Formales
Introducción A La Teoría de Lenguajes Formales
Introducción A La Teoría de Lenguajes Formales
Introduccin ................................................................................................................................. 1
1.1 Alfabeto ............................................................................................................................. 2
1.2 Cadenas ............................................................................................................................. 3
1.3 Lenguajes ........................................................................................................................... 4
1.4 Tipos de lenguajes ............................................................................................................. 4
1.5 Herramientas computacionales ligadas con lenguajes ..................................................... 8
1.6 Estructura de un traductor ................................................................................................ 9
1.7 Fases de un compilador ..................................................................................................... 10
Conclusin .................................................................................................................................... 13
Referencias bibliogrficas ............................................................................................................ 14
Introduccin
En este trabajo de investigacin se darn a conocer los conceptos bsicos de lenguajes y autmatas.
As como tambin se hablar de la relevancia de conocer cada uno de ellos y la funcin de gran
importancia que desempean en la comunicacin hombre-mquina.
La teora de los lenguajes formales estudia unas entidades matemticas abstractas denominadas
lenguajes que en ningn momento debemos confundir o equiparar con las lenguas naturales. Sin
embargo, como veremos, los lenguajes formales pueden, en determinadas circunstancias, servirnos
como modelos abstractos de determinadas propiedades de las lenguas naturales, de ah la
importancia de conocer los fundamentos de la teora.
Un lenguaje formal (en adelante, simplemente lenguaje) es un conjunto, finito o infinito, de
cadenas definidas sobre un alfabeto finito.
1.1 Alfabeto
Un Alfabeto es un conjunto finito no vaco de smbolos. As, el alfabeto del idioma espaol: E = {a, b,
c, . . . , z}, es slo uno de tantos alfabetos posibles.
En general se utiliza la notacin
posible formar secuencias o cadenas de caracteres. Las cadenas de caracteres son llamadas tambin
palabras.
Un caso particular de cadena es la palabra vaca, , la cual no tiene ninguna letra.
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 la palabra perro su longitud es 5.
Cuando escribimos varias palabras o caracteres uno a continuacin de otro, se supone que forman
una sola palabra (se concatenan).
La notacin usada para denotar la concatenacin de dos cadenas y es .
La concatenacin de palabras es asociativa esto es, (xy)z = x(yz), pero no conmutativa en el caso
general.
La longitud de una concatenacin cumple la propiedad: |uv| = |u| + |v|.
Una palabra v es subcadena de otra w cuando existen cadenas x, y - posiblemente vacas tales que
xvy = w.
El conjunto de todas las palabras que se pueden formar con un alfabeto es denotado
convencionalmente por .
Por ejemplo, si
= {a, b}
= {, a, aa, aaa, aaaa, . . . , b, bb, . . . , ab, aba, abb, . . .}
El conjunto es infinito, pero numerable.
1.2 Cadena
Una cadena o palabra es una serie arbitrariamente larga de smbolos unidos por concatenacin que
representamos disponiendo los diferentes smbolos que la componen en el orden deseado; por
ejemplo: aaabbbccc, es una cadena. Como la definicin de cadena es recursiva, podemos referirnos,
si es necesario, a una cadena completa o a una subcadena que forme parte de una cadena mayor
con las letras finales del alfabeto u, v, w, x, y y z. Por tanto, aaaw o, simplemente, w tambin son
cadenas. Denotamos la cadena vaca con el smbolo .
Cadena vaca
La cadena vaca es el elemento de identidad de la operacin de concatenacin, de tal modo que
aaabbb = aaabbb. La operacin de concatenacin de cadenas no es conmutativa (pero s
asociativa); por tanto aaabbb ab 6= ab aaabbb. La cadena vaca es aquella cadena que presenta
cero apariciones de smbolos. Esta cadena, designada por , es una cadena que puede construirse
en cualquier alfabeto.
Concatenacin de cadenas
Sean x e y dos cadenas. Entonces, xy denota la concatenacin de x e y, es decir, la cadena formada
por una copia de x seguida de una copia de y. Dicho de manera ms precisa, si x es la cadena
compuesta por i smbolos x = a1a2 ai e y es la cadena compuesta por j smbolos y = b1b2 bj,
entonces xy es la cadena de longitud i+ j: xy = a1a2 aib1b2 bj.
1.3 Lenguajes
Un conjunto de cadenas, todas ellas seleccionadas de un , donde es un determinado alfabeto se
denomina lenguaje. Si es un alfabeto y L , entonces L es un lenguaje de . Observe que un
lenguaje de no necesita incluir cadenas con todos los smbolos de , ya que una vez que hemos
establecido que L es un lenguaje de , tambin sabemos que es un lenguaje de cualquier alfabeto
que sea un superconjunto de .
La eleccin del trmino lenguaje puede parecer extraa. Sin embargo, los lenguajes habituales
pueden interpretarse como conjuntos de cadenas. Un ejemplo sera el 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. Este alfabeto es un subconjunto de los caracteres ASCII. El alfabeto en concreto puede
diferir ligeramente entre diferentes lenguajes de programacin, aunque generalmente incluye las
letras maysculas y minsculas, los dgitos, los caracteres de puntuacin y los smbolos matemticos.
Sin embargo, existen tambin otros muchos lenguajes que veremos a lo largo del estudio de los
autmatas.
Lenguaje mquina
Fue el primer lenguaje utilizado en la programacin para las primeras computadoras, pero dej de
utilizarse por su dificultad y complicacin, siendo sustituido por otros lenguajes ms fciles de
aprender y utilizar, y que adems reducen la posibilidad de cometer errores.
La informacin que hace que el
hardware de la computadora realice una
determinada
instruccin,
actividad
por
de
llama
consiguiente
una
instrucciones
interpretadas
que
directamente
son
por
la
es
el
ensamblador.
Las
conocidas
como
Una caracterstica distintiva, por ejemplo, que convierte a C en un lenguaje de medio nivel y al Pascal
en un lenguaje de alto nivel es que en el primero es posible manejar las letras como si fueran
nmeros (en Pascal no), y por el contrario en Pascal es posible concatenar las cadenas de caracteres
con el operador suma y copiarlas con la asignacin (en C es el usuario el responsable de llamar a las
funciones correspondientes).
Una de las caractersticas ms peculiares del lenguaje de
programacin C; es el uso de apuntadores, los cuales son
muy tiles en la implementacin de algoritmos como Listas
ligadas, Tablas Hash y algoritmos de bsqueda y
ordenamiento que para otros lenguajes de programacin
(como Java por ejemplo) les suele ser un poco ms
complicado implementar.
Ensambladores.
El 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.
Interpretes.
Los intrpretes son los que realizan normalmente dos operaciones:
Donde la primera pertenece al interprete el cual llama a veces al compilador, as se genera el cdigo
interno, pero no es el lenguaje de mquina, ni lenguaje de smbolos, ni mucho menos un lenguaje
de nivel alto.
Fase de anlisis
Fase de Sntesis
Lenguaje fuente
Salida
Cdigo Binario. Deber ser vinculado con las libreras correspondientes para obtener el
cdigo ejecutable.
10
Fases de un compilador
Anlisis lxico: lee la secuencia de caracteres de izquierda a derecha del programa fuente y agrupa
las secuencias de caracteres en unidades con significado propio (componentes lxicos o tokens en
ingls). Las palabras clave, identificadores, operadores, constantes numricas, signos de puntuacin
como separadores de sentencias, llaves, parntesis, etc., son diversas clasificaciones de
componentes lxicos.
11
Anlisis sintctico: determina si la secuencia de componentes lxicos sigue la sintaxis del lenguaje y
obtiene la estructura jerrquica del programa en forma de rbol, donde los nodos son las
construcciones de alto nivel del lenguaje. Se determinan las relaciones estructurales entre los
componentes lxicos, esto es semejante a realizar el anlisis gramatical sobre una frase en lenguaje
natural. La estructura sintctica la definiremos mediante las gramticas independientes del
contexto.
Anlisis semntico: realiza las comprobaciones necesarias sobre el rbol sintctico para determinar
el correcto significado del programa. Las tareas bsicas a realizar son: La verificacin e inferencia de
tipos en asignaciones y expresiones, la declaracin del tipo de variables y funciones antes de su uso,
el correcto uso de operadores, el mbito de las variables y la correcta llamada a funciones. El anlisis
semntico suele agregar atributos (como tipos de datos) a la estructura del rbol semntico.
Generacin y optimizacin de cdigo intermedio: la optimizacin consiste en la calibracin del rbol
sintctico donde ya no aparecen construcciones de alto nivel. Generando un cdigo mejorado, ya no
estructurado, ms fcil de traducir directamente a cdigo ensamblador o mquina, compuesto de
un cdigo de tres direcciones (cada instruccin tiene un operador, y la direccin de dos operndoos
y un lugar donde guardar el resultado), tambin conocida como cdigo intermedio.
Generacin de cdigo objeto: toma como entrada la representacin intermedia y genera el cdigo
objeto. La optimizacin depende de la mquina, es necesario conocer el conjunto de instrucciones,
la representacin de los datos (nmero de bytes), modos de direccionamiento, nmero y propsito
de registros, jerarqua de memoria, encauzamientos, etc. Suelen implementarse a mano, y son
complejos porque la generacin de un buen cdigo objeto requiere la consideracin de muchos
casos particulares.
Tabla de smbolos: es una estructura tipo diccionario con operaciones de insercin, borrado y
bsqueda, que almacena informacin sobre los smbolos 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 anlisis. Debe
generar mensajes significativos y reanudar la traduccin.
12
Conclusin
Es muy importante conocer los conceptos bsicos sobre lenguajes y autmatas. Adems de explicar
detalladamente los tipos de lenguajes y mencionar algunos ejemplos para que pudiera
comprenderse mucho mejor cada uno.
Tambin se aclararon algunos puntos importantes sobre las herramientas computacionales que
intervienen en la comunicacin hombre-mquina, como lo son; compilador, intrprete, traductor y
ensamblador.
Pudimos comprender la estructura de un traductor as como tambin, las fases de un compilador y
las funciones que desarrollan durante la transmisin de mensajes entre la mquina y el hombre.
13
Referencias bibliogrficas
Hopcroft John E., Introduccin a la Teora de Autmatas, Lenguajes y Computacin, 2da ed, Ed.
Addison Wesley, 2004.
Balari, S. (2014). Cap. 1: Nociones bsicas. En Teora de lenguajes formales (pp.9-13). Barcelona,
Espaa: Centro de Lingstica Terica.
Villalta, P. (2012). Introduccin a Compiladores e Intrpretes. 2016, de Blogspot Sitio web:
http://compiladores-interpretes.blogspot.mx/2012/01/introduccion-compiladores-einterpretes.html
Jos, A. (diciembre 17, 2013). Lenguaje Compilado e interpretado. 2016, de Ciencia&Educacin Sitio
web: http://cienciaeducacion502.blogspot.mx/2013/12/lenguaje-compilado-e-interpretado.html
14