Unidad I: Introducción a la Teoría de Lenguajes Formales
1.1 Alfabeto
Leyendo sobre varios autores para comprender la definición de alfabeto puedo
decir claramente que Deán Kelly en su libro “Teoría de autómatas y lenguajes
formales” nos dice que un alfabeto “Es un conjunto no vacío y finito de símbolos”
por otro lado Jonh E. Hpocroft, Rajeev Motwani y Jeffrey D. Ullman en su libro
“Introducción a la teoría de autómatas, Lenguajes y Computación” nos definen que
un alfabeto es un conjunto finito no vacio de símbolos, sin embargo Otros autores
como Pedro García, Tomás Pérez, José Ruíz, Encarna Segarra, José M. Sempere
y M. Vázquez de Parga nos dicen en su libro “Teoría de autómatas y lenguajes
formales” que un alfabeto es cualquier conjunto finito y no vacío de elementos que
denominan símbolos y los denotaran con el símbolo Ʃ. Con otro autor como John
Martin en su libro “Lenguajes formales y teoría de la computación” Por tanto puedo
concluir que un alfabeto es un conjunto no vacío y finito de símbolos denotado por
el símbolo Ʃ.
1.2 Cadenas
La definición de cadena se puede encontrar con varias definiciones como Deán
Kelly en su libro “Teoría de autómatas y lenguajes formales” nos dice que en su
libro definirá cadena como palabra y dice que una secuencia finita de símbolos de
un determinado alfabeto es conocido como palabra ó cadena. Por otro lado John
Martin en su libro “Lenguajes formales y teoría de la computación” define como
cadena en un alfabeto Ʃ se obtiene al ordenar elementos de Ʃ (o posiblemente
ninguno) este autor no define la palabra cadena en sí pero si la utiliza mucho en
sus definiciones para lenguajes y alfabeto. Otra definición de Jonh E. Hpocroft,
Rajeev Motwani y Jeffrey D. Ullman en su libro “Introducción a la teoría de
autómatas, Lenguajes y Computación” nos dicen que una cadena (también
llamada palabra) es una secuencia finita de símbolos pertenecientes a un
alfabeto.
1.3 Lenguajes
La definición de lenguajes la encontré de diferentes autores y cada uno usa sus
términos como Jonh E. Hpocroft, Rajeev Motwani y Jeffrey D. Ullman en su libro
“Introducción a la teoría de autómatas, Lenguajes y Computación” nos dice que un
lenguaje es un conjunto de cadenas, todas ellas elegidas de algún Ʃ*donde Ʃ es
un alfabeto, algo que me llamo la atención de este libro es que los autores
comentan que la definición de Lenguajes puede parecer extraña más sin embargo
los lenguajes habituales se pueden considerar como conjuntos de cadenas. Otro
autor como John Martin en su libro “Lenguajes formales y teoría de la
computación” define lenguajes como que es simplemente un conjunto de cadenas
que incluyen símbolos de un alfabeto. Por tanto Lenguajes: La definición de
lenguajes la encontré de diferentes autores y cada uno usa sus términos como
Jonh E. Hpocroft, Rajeev Motwani y Jeffrey D. Ullman en su libro “Introducción a la
teoría de autómatas, Lenguajes y Computación” nos dice que un lenguaje es un
conjunto de cadenas, todas ellas elegidas de algún Ʃ*donde Ʃ es un alfabeto, algo
que me llamo la atención de este libro es que los autores comentan que la
definición de Lenguajes puede parecer extraña más sin embargo los lenguajes
habituales se pueden considerar como conjuntos de cadenas. Otro autor como
John Martin en su libro “Lenguajes formales y teoría de la computación” define
lenguajes como que es simplemente un conjunto de cadenas que incluyen
símbolos de un alfabeto. Por tanto puedo concluir que un alfabeto es un conjunto
no vacío y finito de símbolos denotado por el símbolo Ʃ. Sin embargo Deán Kelly
nos dice que un lenguaje es un conjunto de palabras o de cadenas y se puede
tener el lenguaje compuesto por ninguna cadena.
1.4 Tipos de lenguajes
Podemos encontrar varios tipos de lenguajes:
Lenguajes declarativos
Lenguajes de alto nivel
Lenguajes ensambladores
Lenguajes máquina
Los lenguajes declarativos son los más parecidos al castellano o inglés en su
potencia expresiva y funcionalidad y están en el nivel más alto respecto a los
otros. Son fundamentalmente lenguajes de órdenes, dominados por sentencias
que expresan “lo que hay que hacer” en vez de “cómo hacerlo”.
Los lenguajes de alto nivel son los más utilizados como lenguajes de
programación
Aunque no son fundamentalmente declarativos, estos lenguajes permiten que los
algoritmos se expresen en un nivel y estilo de escritura fácilmente legible y
comprensible por otros programadores. Además, los lenguajes de alto nivel suelen
tener la característica de “transportabilidad”.
1.5 Herramientas computacionales ligadas con lenguajes
Editores de estructuras:
“Un editor de estructuras toma como entrada una secuencia de órdenes para
construir un programa fuente. El editor de estructuras no sólo realiza las funciones
de creación y modificación de textos de un editor de textos ordinario, sino que
también analiza el texto del programa, imponiendo al programa fuente una
estructura jerárquica apropiada. De esa manera, el editor de estructuras puede
realizar tareas adicionales útiles para la preparación de programas” Concepto
encontrado en el libro de Compiladores de Addison Wesley, a mi punto de vista
estos editores de estructura son los que se encarga de llevar el orden de las
palabras, valla el acomodo y comprobar si la entrada está formada correctamente.
Impresoras estéticas:
“Una impresora estética analiza un programa y lo imprime de forma que la
estructura del programa resulte claramente visible” Concepto encontrado en el
libro de Compiladores de Addison Wesley.
Verificadores estáticos:
Este verificador lee un programa, lo analiza e intenta descubrir errores potenciales
sin correr el programa, algo muy parecido a la corrección de los editores de texto
como Word. “Un verificador estático puede detectar si hay partes de un programa
que nunca se podrán ejecutar o si cierta variable se usa antes de ser definida” nos
dice Addison Wesley.
Intérpretes:
“En lugar de producir un programa objeto como resultado de una traducción, un
intérprete realiza las operaciones que implica el programa fuente. Muchas veces
los interpretes se usan para ejecutar lenguajes de órdenes, pues cada operador
que se ejecuta en un lenguaje de ordenes suele ser una invocación de una rutina
compleja, como un editor o un compilador”.
1.6 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. Ejemplos de traductores
son los ensambladores y los compiladores.
1.7 Fases de un compilador
Fase de análisis
Fase de Síntesis
Comentarios
Publicar un comentario