Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
lENGUAJES,GRAMÁTICAS y AUTÓMATAS . UN ENFOQUE PRÁCTICO ~ I LENGUAJES, GRAMÁTICAS " y AUTOMATAS UN ENFOQUE PRÁCTICO Pedro Isasi Viñuela Paloma Martínez Fernández Daniel Borrajo Millán Universidad Carlos III de Madrid .. TT ADDISON-WESLEY Harlow, Inglaterra • Reading, Massachusetts • Menlo Park. Californ ia • Nueva Yo - Don Mills, Ontario • Amsterdam • Bonn • Sydney • Singapur Tokio • Madrid • San Juan • Milán • México • Seúl • Taipei ~--------------------------------------------------------~ [lustración de la cubierta: Wassily Kandinsky, 1929. Pisos. © 1997, por Addison·Wesley Iberoamericana España, S.A. Reservados todos los derechos. No está permitida la reproducción total o parcial de este libro, ni su tratamiento informático ni la transmi- sión de ninguna forma o por cualquier medio, ya sea electrónico, por fotocopia, por registro u otros méto- dos, sin el permiso previo y por escrito de los titulares del copyrighl. ADDISON·WESLEY IBEROAMERICANA Malabia 2362-2.° G, Buenos Aires, Argentina. Cruz 1469-dpto. 21, Independencias, Santiago de Chile. Apartado aéreo 241-943, Bogotá, Colombia. Espalter 3,28014 Madrid, España. I Jacob Way, Reading, Massachusetts 01867, E.U.A. Apartado postal 22-012, México DF, México. Jr. San Antonio Este, n.O 658. dpto. D, Urb. Ventura Rossi . 25 Lima, Perú. El Monte Mall, 2.° piso, oficina 19-B. Ave. Muñoz Rivera. HalO Rey. 009 I 8 Puerto Rico. Apartado Postal 5 I 454. Caracas 1050 A. Venezuela. Impreso en España. ¡'rin/eel ill S/will. ISBN: 0-201 -65323-0 ISBN: 84-7829-014-1 Depósito legal: M. 36.039-1997 I 2 3 4 5 6 78 9 O - CO - 01 00 99 98 97 A Ana, Juan Miguel y a Isabel - -- - --- -- --- -------------------"--------~ Agradecimientos Los autores agradecen a .-\raceli anchis las correcciones realizadas a ver- siones anteriores del libro. a Julio García del Real por su valiosa ayuda en la preparación y ~ truc ' uración de la asignatura . as í como a los revisores del libro por sus coment~ios . - _--... Prefacio Los fundamentos teóricos de la informática, que han dado en llamarse In- formática Teórica, provienen de diferentes ramas del conocimiento. Este aspecto, unido a la fuerte componente teórica que esta disciplina requie- re, como no podría ser de otra forma, hace que a menudo los textos de Informática Teórica sean difíciles de leer. Sin embargo, detrás de toda es- ta componente teórica se esconde una disciplina amena, muy instructiva y con grandes posibilidades de aplicación. Todo esto queda a menudo oculto entre definiciones, teoremas y demostraciones. Este libro pretende ser una manera de superar este escollo. No pretende ser una sustitución de otros textos con mayor contenido teórico, sino más bien un complemento a los mismos. Todos los temas han sido tratados con el rigor exigible, aún cuan- do no aparezca una fuerte carga de teoremas y demostraciones. De esta forma, puede constituir un libro ideal para iniciarse en los temas tratados, o una guia rápida de consulta de los diferentes contenidos. En cualquier caso, se trata de un texto autocontenido y que no exige de conocimientos previos por parte del lector para su comprensión. Por otra parte, tiene un alto contenido práctico, entendido como un gran número de ejercicios, en los que reflejar y complementar los conte- nidos teóricos. Creemos, desde nuestra perspectiva de la docencia de la asignatura que abarca estos temas en la universidad, que la mejor forma de comprender y asentar los conocimientos es con la práctica. Afortuna- damente, las materias de la Informática Teórica son muy versátiles a la hora del planteamiento de ejercicios, y estos sirven de apoyo fundamental e imprescindible al texto. Es por esto que hemos querido que en el título apareciera explícitamente "un enfoque práctico", para resaltar el hecho de que se trata de un libro con dos partes diferenciadas; por un lado se trata de un libro de teoría autocontenido, y, por otro, un libro de ejercicios comple- to. Esto queda remarcado por el hecho de que los ejercicios aparecen todos juntos al final de cada capítulo, como si de otro capítulo independiente se tratase. Por último, hemos querido añadir un capítulo de aplicaciones, pa- ra mostrar algunos de los numerosos campos en 1 que se pueden utilizar estos conceptos. Pedro .. Paloma :\lartínez. y Daniel Borrajo ~an ' . Sept iembre de 1997 , Indice General 1 Introducción 1 1.1 Lenguajes, Gramáticas y Autómatas 1 1.2 Estructura del libro . 5 1.3 Notaciones 6 2 Lenguajes y Gramáticas Formales 7 2.1 Lenguajes .. 7 2.1.1 Definiciones básicas 7 2.1.2 Operaciones con palabras 8 2.1.3 Operaciones con lenguajes . 9 2.1.4 Otras definiciones 11 2.2 Gramáticas formales 13 2.2.1 Definiciones . 13 2.2.2 Tipos de Gramáticas 16 2.2.3 Árboles de derivación 19 2.2.4 Ambigüedad 20 2.2.5 Recursividad 21 2.2.6 Factorización a izquierdas 25 Ejercicios 27 3 Gramáticas Regulares y Autómatas Finitos 43 3.1 Gramáticas regulares. 43 3.2 Máquinas Secuenciales 46 3.2.1 Definición . 46 3.2.2 Representación 49 3.2.3 Extensión a palabras de la entrada y salida 51 3.2.4 Equivalencia de Máquinas Secuenciales. 55 · . \ 3.2.5 Equivalencia de Máquina de Mealy y Máquina de Moore 61 3.3 Autómatas Finitos Deterministas (AFD) 63 3.3.1 Definición . 63 3.3.2 Representación de un AFD 65 3.3.3 Conceptos relativos a AFDs 66 3.3.4 Equivalencia de AFD 68 3.4 Autómatas Finitos No Deterministas (AFND) 75 3.4.1 Definición 75 3.4.2 Representación 76 3.4.3 Conceptos asociados a AFNDs 77 3.4.4 Autómata Finito asociado a una G3 81 3.5 Expresiones regulares (ER) 83 3.5.1 Definiciones . 83 3.5.2 Teoremas de Kleene 85 3.6 Autómatas de Células de McCulloch-Pitts 97 3.6.1 Definición 97 3.6.2 Representación 98 3.6 .3 Construcción de un AF equIvalente . 101 3.6.4 Construcción de un Autómata de Células equivalente a un AF . 106 3.7 Autómatas probabilísticos 107 3.7.1 Definición 108 3.7.2 Matrices de probabilidad de transición 108 3.7.3 Vectores de estados. 109 3.7.4 Lenguaje aceptado por un AFP . 111 3.7.5 AF como AFP 113 Ejercicios 115 _" 4 Gramáticas Independientes del Contexto y Autómatas a Pila 237 4.1 Gramáticas Independientes del Contexto . 237 4.1.1 Definiciones. .. .... . ... .. 237 4.1.2 Forma Normal de Chomsky (FNC) 242 , 4.1.3 Forma Normal de Greibach (FNG) 246 . 4.2 Autómatas a Pila (AP) 248 4.2.1 Definición...... . . 248 4.2.2 Movimientos .. ... . 4.2.3 Descripción instantánea 251 254 4.2.4 4.2.5 4.2.6 Ejercicios Autómatas a Pila Deterministas ... . . Lenguaje aceptado por un AP ..... . Autómatas a Pila y Gramáticas de tipo 2 5 Gramáticas y autómatas generales 5.1 Máquinas de Turing 5.1.1 Definición ......... . 255 256 257 263 321 321 321 5.1.2 Movimiento. .. ...... 323 5.1.3 Lenguaje reconocido por una Máquina de Turing 326 5.1.4 Variantes de las Máquinas de Turing . 326 5.1.5 Máquina de Turing Universal (MTU) 327 5.1.6 Máquinas de Turing y computación 329 5.2 Autómatas Linealmente Acotados. 330 Ejercicios .. 6 Aplicaciones 6.1 Construcción de compiladores 6.1.1 Analizador Léxico .. ~ 6.1.2 Analizador Sintáctico 6.2 Análisis del lenguaje natural. 6.3 Aplicaciones de Control 6.4 Más aplicaciones . . . . . . . 331 343 343 346 351 357 368 372 Capítulo 1 INTRODUCCIÓN Puesto que este libro abarca la Teoría de Gramáticas, Lenguajes y Máquinas Abstractas (Autómatas) , en esta introducción se comenzará aclarando el significado de cada uno de los conceptos y la relación existente entre ellos. A continuación, se describirá la estructura del libro y algunas aclaraciones sobre la notación empleada a lo largo del texto. 1.1 Lenguajes, Gramáticas y Autómatas Toda comunicación involucra la utilización de un lenguaje. Así, por ejem- plo, las personas se comunican con el resto en los diferentes idiomas (len- guajes naturales) o con las máquinas (lenguajes artificiales) a través deconjuntos de símbolos. Se define lenguaje como un conjunto de palabras, también llamadas cadenas o sentencias, que están formadas por símbolos de un alfabeto. Así, por ejemplo, el idioma español está formado por un conjunto de palabras compuestas por letras (símbolos) del alfabeto español. Una gramática da cuenta de la estructura de un lenguaje, es decir , de las sentencias que lo forman, proporcionando las formas válidas en que se pue- den combinar los símbolos del alfabeto. En el caso del español, las oraciones deben ajustarse a una gramática. Una consideración importante es la dis- tinción entre lenguajes formales, que son los que se tratarán en este libro, y lenguajes naturales (inglés, español, etc.). Se puede decir que la diferencia estriba en que los lenguajes formales (como pueden ser los lenguajes de 1 programación) obedecen a reglas prees ab ellas , no evolucionan y han sido cread go, los lenguajes naturales (utilizad T las reglas gramaticales que rigen su """-mm .,...,, posterioridad para explicar e ta úl ÍI!la. recibir y transmitir información. nas de símbolos que se le p """...L.>oOo- o cadenas de símbolos a ~ contienen la información naresane entrada, cuál será el ~""''"'-U-'1U~1I conexión que e. e e sobre gramá ieas y m<>.ql~~ a.b~U1~a" describe genera CLenguaE) genera Figura 1.1: Conexiones entre los conceptos de lenguaje. !!TaIIlá: y autómata. El concepto de gramática procede de los estudios de Cho IT búsqueda de una descripción formalizada de las oraciones de un le turaL Chomsky clasificó las gramáticas en cuatro grandes grup G2, G3) cada uno de los cuales incluye a los siguientes ( G3~G2~G 1 =GO . Las gramáticas Tipo Ü se denominan gramáticas sin restriccion o máticas de estructura de frases; las gramáticas Tipo 1 se denominan _ , i- bIes al contexto; las gramáticas Tipo 2 se conocen como gramáticas in pendientes del contexto y, por último, las gramáticas Tipo 3 denominan gramáticas regulares. Cada tipo añade restricciones al tipo inmedia¡ame te superior y la jerarquía va desde la más general a la más restricti\a . Cada una de estas gramáticas es capaz de generar un tipo de lenguaje. e n 1 n- guaje L se llama del tipo i (i=ü, 1, 2, 3) si existe una gramática G del ipo i capaz de generar o describir ese lenguaje. Estos estudios previos sobre teorías de gramáticas formales y le ~j ::. LENGUAJES, GRAMÁTICAS y AUTÓMATAS: UN E NFOQUE PRÁCTICO 3 crearon las bases de la lingüística matemática, la cual tendría aplicación no solo al estudio del lenguaje natural sino también a los lenguajes forma- les. Así, los lingüistas distinguen entre gramática particular (propiedades de lenguajes concretos o artificiales) y gramática universal (propiedades generales que pueden aplicarse a cualquier lenguaje humano). La teoría de los autómatas proviene del campo de la ingeniería eléctrica. Shannon publicó varios trabajos donde demostraba la aplicación de la lógica matemática a los circuitos combinatorios y secuenciales. Posteriormente, sus ideas se desarrollaron para dar lugar a la Teoría de Autómatas. Mo- ore publicó el primer estudio riguroso sobre autómatas y, a finales de los años 50, se comenzó a ver la utilidad de los autómatas en relación con los lenguajes. La teoría de lenguajes y gramáticas formales tiene una relación directa con la teoría de máquinas abstractas, siendo posible establecer entre ambas un isomorfismo. Dado que las gramáticas proporcionan las reglas utilizadas en la generación de las cadenas de un lenguaje, se puede establecer una co- nexión entre la clase de lenguajes generados por ciertos tipos de gramáticas y la clase de lenguajes reconocibles por ciertas máquinas. Así, se pueden identificar los lenguajes del tipo O con la clase de lenguajes reconocidos por una Máquina de Turing; los lenguajes del tipo 1 con los Autómatas Line- almente Acotados; los lenguajes de tipo 2 con los Autómatas a Pila y, por último, los lenguajes de tipo 3 con los Autómatas Finitos, los Autómatas Probablísticos y los Autómatas de Células de McCulloch-Pitts. Al igual que ocurría con las gramáticas, cada tipo de máquina abstracta añade res- tricciones al tipo de máquina del nivel superior. Todas poseen una cinta de donde leen los símbolos de entrada, un conjunto de estados que represen- tan diferentes fases del análisis de las palabras de entrada, un lugar donde generar la salida, y, en algunos casos, cuentan con dispositivos auxiliares de memoria. Las diferencias entre ellas estriban en la capacidad para escribir en la cinta de entrada, en los distintos tipos de movimientos que pueden realizar sobre la cinta, si tienen o no memoria auxiliar, etc. Establecidas las reglas de una gramática, una cadena de símbolos perte- necerá al correspondiente lenguaje si tal cadena se ha formado obedeciendo esas reglas. A partir de una gramática se puede construir una máquina reconocedora o aceptadora del lenguaje generado por esa gramática, de tal forma que cuando reciba a su entrada una determinada cadena de símbolos indicará si dicha cadena pertenece o no al lenguaje. Una máquina reconoce un lenguaje L si es capaz de reconocer todas las sentencias pertenecientes a L y de no reconocer ninguna sentencia que no pertenezca a L. La figura 1.1 4 CAP ' o . muestra la relación existente entre los que una gramática describe formalmeme un ~.7""'r,:I¡. j€ puede ser reconocido o aceptado por una OOiamJc:Jaca r:lCSIq:::IDa G.lS~n:a o autómata, entonces es posible establecer- abstractas y gramáticas tal y como ~ Gramática Tipo O: Gramática sin Restricciones Tipo 1: Gramática Sensible al Contexto Tipo 2: Gramática de Conte:\,o Libre Tipo 3: Gramá ¡ca R~ar Regular Autómata Linealm € Acotado (ALA Autómata a Pila (AP) Autómata Fini o (AF) Tabla 1.1: Relación entre lenguaje, gramática y autómata. La teoría de gramáticas y máquinas teóricas tiene múltiples aplicacio- nes en diversas áreas de conocimiento. Algunos ejemplos de las aplicacio- nes de los lenguajes regulares y los autómatas finitos son los analizador léxicos que se utilizan en los compiladores de lenguajes de programació . Normalmente, un analizador léxico es un autómata que se utiliza para el reconocimiento de las palabras empleadas en un lenguaje de programación (variables, palabras reservadas, números, etc.). También se ut ilizan en 1 - editores de texto para buscar y reemplazar palabras que se equiparan con una expresión regular. La sintaxis de los lenguajes de programación (Pascal, C. etc. ) está d crita mediante gramáticas de Tipo 2 (independientes del contexto) aunque también pueden contener algunos aspectos que requieran de una gramá ica sensible al contexto. En cuanto a las Máquinas de Turing, se corresponden con las gramá icas sin restricciones. La peculiaridad de este tipo de gramáticas es que puede describir cualquier suceso computable. Un suceso computable es aquél que mediante un procedimiento es capaz de transformar unas determinadas entradas en las salidas requeridas. Ésta es precisamente la capacidad que ~ necesita en un computador; el poder describir un procedimiento (pro!mUll.a l que, a partir de unas entradas, sea capaz de producir una salida . í pues, existe una asociación entre las Máquinas de Turing y los fenómen computables, de forma que se dice que un suceso es computable i ~. e LENGUAJES , GRAMÁTICAS y AUTÓMATAS: UN ENFOQUE PRÁCTICO 5 una Máquina de Thring capaz de describirlo. 1.2 Estructura del libro El texto del libro trata de seguir esta misma estructura, y así está dividido en los siguientes capítulos: Capítulo 2 Se tratan los conceptos fundamentales que serán empleados a lo largo del resto del texto como son los lenguajes y las gramáticas. Capítulo 3 Siguiendo la división de Chomsky, se tratan los temas re- lacionados con las gramáticas tipo 3 y las máquinas reconocedoras de los lenguajes tipo 3, autómatas finitos , tanto en su versión determinista, como no determinista. Se tratan,también, las máquinas secuenciales que per- miten, no sólo reconocer, sino generar una salida correspondiente a una determinada entrada. También se describen las expresiones regulares, que permiten representar de forma sencilla y compacta los lenguajes regula- res. Por último, se incluyen varios tipos de autómatas finitos, como son los autómatas probabilísticos y los autómatas de células de McCulloch-Pitts . Capítulo 4 Se dedica a las gramáticas de tipo 2, independientes del contexto, y las máquinas reconocedoras de los lenguajes de este tipo de gramáticas, los autómatas a pila. La importancia que tienen estos lenguajes es que son los más utilizados para describir los lenguajes de programación de alto nivel. Capítulo 5 Se presentan las gramáticas de tipo O y 1 y las máquinas de Thring como dispositivos de cómputo universal y reconocedoras de lengua- jes de gramáticas sin restricciones. Capítulo 6 En este capítulo se realiza una breve descripción de algunas de las diferentes líneas de aplicación de los conceptos tratados en el libro. Así, se presentan ejemplos de sistemas reales cuyo diseño fundamental está completamente ligado a los conceptos teóricos descritos en el libro. 6 1.3 Notaciones El libro asume el conocimiento, por parte del básica matemática. En un breve resumen . ciones: • Conjunto: {xl ... }, significa el conjunto e • Pertenencia: x E ~ , significa que el eleme o :: -=>,....;.-,-.:!:--. .~c::::I~r::::::;;b ~. • Inclusión: G ~ G', significa que el conjun o e G' . • Cardinalidad: IGI , representa el número de clem!E::~ G. • Unión de conjuntos: G U G' , significa la unión de los conjuntos e y G' . • Intesección de conjuntos: G n G' , significa la intersección de los con- juntos G y G' . • Simplificación de notación de elementos de conjunto: a .. z ó a, . ... z . significa todas las letras entre a y z. • Aplicación entre conjuntos: f : El X E 2 X . .. x En ~ SI X S2 X ... X Sm· significa que la función f (aplicación) está definida entre los conjuntos Ei y los conjuntos Sj. También se puede entender desde el punto de vista computacional como que recibe a la entrada un elemento de cada uno de los conjuntos Ei y genera como salida un elemento de cada uno de los conjuntos Sj. • Definición: Concepto, notación: . . . , significa que la definición del concepto cuya notación aparece después de la coma es lo que aparece después de los dos puntos. Capítulo 2 LENGUAJES y GRAMÁTICAS FORMALES Este capítulo describe los elementos básicos de la Informática Teórica: los lenguajes y gramáticas formales. Dentro de las gramáticas, se estudia la . clasificación más clásica de gramáticas, que sirve de hilo conductor para el resto de capítulos. 2.1 Lenguajes En esta sección se tratarán los temas relacionados con lenguajes formales. Se verán algunas definiciones y operaciones que se pueden realizar con las palabras de un lenguaje, así como con los propios lenguajes. 2.1.1 Definiciones básicas • Alfabeto, ~: conjunto no vacío finito de símbolos (letras, números, combinaciones de letras y números , ... ) Ejemplos: el alfabeto español, el inglés, el alfabeto de los números, el alfabe- to formado por todos los símbolos del teclado de un ordenador, el alfabeto formado por los cuatro símbolos {na,pa,la, bra} 7 • 8 CAPÍTULO 2. LENGUAJES y G • Palabra ° cadena: secuencia finita de SJu 'unOO!(jE Ejemplos: "palabra", "word", "1234", "alfa-?23!", "napa- • Longitud de una palabra, Ixl: dada una palabra I C:~ ]l'C:ec:a símbolos de un alfabeto ~, su longitud es el número de . 1 alfabeto que la forman. Ejemplos: Ipalabral=7 en el caso de que los símbolos sean los del alfabe Si ~l = {na,pa,la,bra}, la longitud de la palabra palabra seria 3_ • Palabra vacía, A: palabra de longitud O (IAI = O); es decir. _ I contiene ningún símbolo • Universo de un alfabeto, W(~): todas las palabras que se puro formar con símbolos del alfabeto~ . Contiene un número infini o dE' elementos (palabras). La palabra vacía pertenece a todos los unÍn:'r- sos. Ejemplo: W (~d = {A, na,pa,la, bra, nana, napa, nala, nabra .. . . } • Lenguaje sobre un alfabeto, L(~): es todo subconjunto de W ( ~ ) . Como el universo asociado a un alfabeto es infinito, hay infinitos lenguajes asociados a un alfabeto. Ejemplos: Dos posibles lenguajes de ~l serían: Ll (~d = {nana,napa,lana}, y L2(~1) = {A,nana,pana,palabra,papa,pala} . 2.1.2 Operaciones con palabras • Concatenación: si x e y son palabras, la concatenación. x · y . una palabra formada por los símbolos de x seguidos de los símbolos de y . Muchas veces, se representará simplemente como xy. Ejemplo: En ~l, si x =pa e y =labra, x . y =palabra LENGUAJES , GRAMÁTICAS y AUTÓMATAS: UN ENFOQUE PRÁCTICO 9 . . • Potencia: la potencia i-ésima de una palabra x, x\ se forma por la concatenación i veces de X; xi = 1 . x . ,: ... :z;,. Por definición, para toda palabra x, se cumple: xO = A Ejemplo: En I: I , si x = pala, x2 =palapala Si I:2 = {O, 1} Y x = 01, x 3 = 010101 • Reflexión: si la palabra x está formada por los símbolos Al, A2, .. . , An, entonces la palabra inversa de x, x- 1, se forma invirtiendo el orden de los símbolos en la palabra; x- 1 = An ... A2Al' Ejemplo: En I:1 , si x = pala, x- 1 =lapa En I:2 , si x = 01 , x- l = 10 2.1.3 Operaciones con lenguajes • Unión: si LI y L 2 son lenguajes, su unión, LI U L 2 , contendrá todas las palabras que pertenezcan a cualquiera de los dos lenguajes; Ejemplo: Si LI (I: I ) = {nana, napa, lana}, y L 2 (I: I ) = {A,nana,pana,palabra,papa,pala} , Ll (I: I )UL2 (I:¡) = {A ,nana,napa,lana,pana,palabra,papa,pala} • Intersección: si Ll y L 2 son lenguajes, su intersección, LI n L 2 , contendrá todas las palabras que pertenezcan a los dos lenguajes; Ejemplo: Si LI(I: I) = {nana,napa,lana} , y L 2 (I:1) = {A , nana,pana,palabra,papa,pala} , L¡(I: I ) n L 2 (I: I ) = {nana} 10 CAPÍTULO 2. LENGUAJES y GRAMÁTICAS F Oru.L -~ • Resta: si Ll y L2 son lenguajes, la resta de L l y 0 - L: - L·2 · contendrá todas las palabras que pertenezcan a Ll y no pen ezca..n a L 2 ; Ejemplo: Si L1(¿;1) = {nana,napa,lana}, y L 2 (¿;l) = {A, nana,pana,palabra,papa,pala} , L1(¿;1) - L2 (¿;1) = {napa,lana} , y Ld¿;l) - L1(¿;d = {A,pana,palabra,papa,pala}. • Concatenación: dados dos lenguajes Ll y L2 , su concatenación. Ll . L2 , contendrá todas las palabras que se pueden formar por la contenación de una palabra de Ll y otra de L2 ; Ejemplo: Dados Ll (¿;l) y L2 (¿;t}, Ll (¿;t}·L2(¿;1) = {nana,napa,lana,nananana,napanana .. . . } • Potencia: la potencia i-ésima de un lenguaje corresponde a la con- catenación i veces del lenguaje con él mismo; Por definición, para todo lenguaje L i , se cumple: L? = {A} Ejemplo: Si Ll (¿;2) = {O, 1}, entonces Lr(¿;2) = {00, 01. 10. 11} • Clausura positiva: La clausura positiva de un lenguaje L se forma por la Uillon de todas las potencias del lenguaje, excluyendo la potencia O: L+ = U~l L i '. LENGUAJES , GRAMÁTICAS y AUTÓMATAS: UN ENFOQUE PRÁCTICO 11 Ejemplo: Si Ll(~2) = {O, 1} , entonces Ll (~2)+ = {O, 1,00, 01 , 10, 11,000,001, ... } La clausura positiva de cualquier alfabeto (considerado como el lenguaje formado por todos sus símbolos) corresponde al uni- verso del alfabeto excluyendo la palabra vacía (potencia O de un alfabeto); ~+ = W(~) - {A} • Iteración, cierre o clausura: El cierre de un lenguaje L se forma por la unión de la palabra vacía a la clausura positiva del lenguaje; 00 L* =L+U {A}=UL i i=O ~* = W(~) Ejemplo: Si Ll (~2) = {O, 1}, entonces Ll (~2)* = {A, 0, 1, 00, 01 , 10, 11, 000, 001 , ... } • Reflexión: la reflexión de un lenguaje L está formada por la aplica- ción de la reflexión a cada una de las palabras del lenguaje; Ejemplo: Si L2(~2 ) = {O, 1, 00, lO} , entonces L2(~2) - 1 = {O, 1, 00, 01} 2.1.4 Otras definiciones • Producción o regla, (x ::= y): es un par ordenado de palabras (x, y) , x, y E ~*. Tiene elsignificado, que se matizará posteriormente, de que si se encuentra x como parte de cualquier palabra v, se puede sustituir x por y en v, lo que permite transformar palabras en otras. , 12 CAPÍTULO 2. LENGUAJES y GRAMÁTICAS F OruLUES Ejemplo: En E2 , se podrían tener las producciones (000 ::= 010) ó (10 ::= 01) • Derivación directa, v -+ w: aplicación de una producción (x ::= y) a una palabra v para convertirla en otra palabra tL' donde v = z . x . u, w = z . y. u (v, w, z, u E E*). Se cumple que, para cada producción (x ::= y), existe una derivación directa de x a y : x -+ y, lo que se deduce de lo anterior, sin más que hacer z = u = A. Ejemplo: Con las producciones PI = (000 ::= 010) y P2 = (10 ::= 01), y la palabra 1000, se pueden hacer la.s siguientes derivaciones directas: 1000 ~ 1010, 1010 ~ 0110, 0110 ~ 0101, Y 0101 ~ 0011 • Derivación, v -+* w: aplicación de una secuencia de produccion a una palabra. Ejemplo: En el ejemplo anterior, la ejecución continuada de las derivaciones directas, proporciona una derivación de la palabra 1000 a la palabra 0011: 1000 ~ 1010 ~ 0110 ~ 0101 ~ 0011 Otra posible derivación sería pasar de la palabra 1000 a la palabra 0110. • Derivación más a la izquierda: si se utiliza en cada derivación directa la producción aplicada a los símbolos más a la izquierda de la palabra. Ejemplo: En el ejemplo anterior de derivación, la derivación más a la izquierda sería: 1000 ~ 0100 ~ 0010 ~ 0001 ~ 0101 ~ 0011 '. LENGUAJES, GRAMÁTICAS y AUTÓMATAS: UN ENFOQUE PRÁCTICO 13 • Derivación más a la derecha: si se utiliza en cada derivación directa la producción aplicada a los símbolos más a la derecha de la palabra. Ejemplo: En el ejemplo anterior de derivación, la derivación más a la derecha sería: 1000 ~ 1010 !4 1001 !4 0101 !4 0011 2.2 Gramáticas formales Las gramáticas formales son descripciones estructurales de las sentencias de los lenguajes, tanto formales (lenguajes de programación), como naturales (humanos). Las definiciones proporcionadas en la sección anterior de los lenguajes son extensionales; es decir, para describir el lenguaje se enumeran todas las palabras que lo forman. Las gramáticas permiten describir de forma intensional a los lenguajes; se describirán los lenguajes mediante: el alfabeto sobre el que se construirán sus palabras; un símbolo inicial del que partirá la obtención de cualquiera de las palabras del lenguaje, denominado axioma; un conjunto de símbolos especiales denominados no terminales que permiten representar subconjuntos del lenguaje o estados intermedios de la generación de las palabras del lenguaje; y un conjunto de producciones, que permitirán realizar las transformaciones desde los símbolos no terminales a las palabras del lenguaje. Por lo anterior, pese a que normalmente se dice que una gramática genera un lenguaje, en este libro también se dirá que una gramática describe un lenguaje. 2.2.1 Definiciones • Gramática formal, G: se define como una cuádrupla donde - ~T es el alfabeto de los denominados símbolos terminales l , /" ..... 14 CAPÍTULO 2. LENGUAJES y GRAMÁTICAS F ORMALES - L,N es el alfabeto de los denominados símbolos no terminales. cumpliéndose: y L,T n L,N = 0 8 es un símbolo no terminal especial (8 E L,N), denominado el axioma de la gramática - P es un conjunto finito de reglas (o producciones) que tienen como única restricción que en la parte izquierda de las produc- ciones debe haber al menos un símbolo no terminal. Es decir. P = {(u ::= v)lu = xAy,u E L,+,v,x,y E L,*,A E L,N} Ejemplo: G l = ({O,l},{A,B},A,P) donde P = {(A ::= lBl), (A ::= OBO), (B ::= A), (B ::= 1), (B ::= O), (B ::= A)} Una simplificación usual al describir las reglas de una gramá.tica es agrupar todas las producciones de cada símbolo no terminal y separar las partes derechas por el símbolo l. Ejemplo: Las producciones del ejemplo anterior se podrían describir como: A ::= lBl lOBO B ::= A 11 1 O 1 A • Forma sentencial: x es forma sentencial si existe una derivación desde el axioma hasta esa palabra; es decir, 8 -+* x Ejemplo: Dada la gramática definida anteriormente, G l. las siguientes son formas sentenciales: - 010: A -+ OBO -+ 010 , -, LENGUAJES, GRAMÁTICAS y AUTÓMATAS: UN ENFOQUE PRÁCTICO 15 lAl: A -+ lBl -+ lAl 1001: A -+ lBl -+ lAl -+ lOBOl -+ 1001 • Sentencia: x es sentencia si es forma sentencial y todos sus símbolos pertenecen al alfabeto de símbolos terminales; es decir, S -+* x, y x E L:Y. Ejemplo: En el ejemplo anterior, 010 y 1001 son sentencias, mientras que lAl no lo es. • Lenguaje generado por una gramática, L(G): es el conjunto de todas las sentencias de la gramática; es decir, todas las palabras que se pueden obtener a partir del axioma de la gramática por la aplicación de derivaciones: L(G) = {xlS -+* x,x E L:y} Ejemplo: El lenguaje generado por la gramática G1 sería: Lal = {11,101, 111,00,000,010, 1001, 1111,0000,0110, ... } Como se puede observar, el lenguaje obtenido es el de las palabras binarias simétricas o palíndromas (L = {xix = x- 1 }). • Equivalencia de gramáticas: dos gramáticas G1 y G2 son equi- valentes, denotado G1EG2, si L(G¡) = L(G2 ); es decir, si generan el mismo lenguaje. Ejemplo: Dada la G1 definida anteriormente y la G2 defi- nida como: G2 = ({O , l} , {A , B ,C, D} , A ,P) donde ...... 16 CAPÍTULO 2. LENGUAJES y GRAMÁTICAS F ORMALES P = {(A ::= 1B1), (A ::= OCO), (B ::= D ), (D ::= A ). (D ::= 1) , (D ::= O), (D ::= A) , (C ::= D )} G I y G2 son equivalentes ya que L(G¡) = L (G2 ). • Regla compresora: aquélla cuya parte derecha está formada por menos símbolos que la parte izquierda (al ::= a 2, la21 < 101). en ejemplo de este tipo de reglas son las reglas en las que la palabra nl.CÍa es la parte derecha de la regla: x ::= A. Se denominan así porque transforman una palabra en otra de menor longitud. Ejemplo: oeo ::= 1 y A ::= A son reglas compresoras. 2.2.2 Tipos de Gramáticas Noah Chomsky definió cuatro tipos de gramáticas formales , que se dife- rencian en los tipos de producciones de la gramática. Esta clasificación describe las gramáticas desde los tipos más generales a los más específicos. dependiendo de la forma de las reglas de la gramática. Esta clasificación permite introducir, al mismo tiempo, una clasificación en los lenguajes que las gramáticas generan, y, también, una clasificación en los autómatas que reconocen los lenguajes generados por las gramáticas . • Tipo O (sin restricciones): en la parte izquierda tiene que haber al menos un símbolo no terminal. Respecto a las partes derechas de sus producciones no hay ningún tipo de restricción; P = {u ::= vlu = xAy,u E 1:;+,v, x, y E 1:;*, A E 1:;N} Ejemplo: Una posible gramática de tipo O sería la siguiente: G3 = ({O , l} , {A,B ,S} , S,P) donde P = {(S ::= AO), (AO ::= 1B1), (lA ::= OBO), (B ::= A), (B ::= 1), (B ::= O)} LENGUAJES, GRAMÁTICAS y AUTÓMATAS: UN ENFOQUE PRÁCTICO . 17 El lenguaje generado por esta gramática es: LC3 = {11,lOl,11l} • Tipo 1 (dependientes del contexto o sensibles al contexto): las partes izquierdas y derecha tienen que tener una parte común y sólo se admite como regla compresora la regla S ::= >.. P = {(S ::= >') ó (x Ay ::= xvy)lx,y E I:*,A E I:N,v E I:+} Se denominan dependientes del contexto porque se tiene en cuenta lo que viene antes y después del símbolo que se sustituye. Así, en la fórmula anterior, x e y son el contexto de la transformación de A en v. La peculiaridad de estas gramáticas consiste en que las de- rivaciones producidas por aplicación de sus reglas cumplen que las palabras siempre tienen longitud mayor o igual que las anteriores en la derivación. Ejemplo: La gramática G3 no es de tipo 1, ya que hay una regla compresora cuya parte izquierda no es el axioma (B ::= >.). Una gramática de tipo 1 sería la siguiente: G4 = ({O,l},{A,B},A,P) donde P = {{(A ::= lBl), (A ::= 11), (lBl::= 101), (lBl ::= 11l)}. Esta gramática es equivalente a la anterior, ya que generan el mismo lenguaje: LC4 = LC3 = {11, 101, l11} ....... 18 CAPÍTULO 2. LENGUAJES y GRAMÁTICAS F ORM ALES • Tipo 2 (independientes del contexto): en estas gramát icas. la parte izquierda de las producciones sólo puede tener un símbolo no terminal: p = {(S ::= >') ó (A ::= v)IA E ~N,V E ~+} Estas gramáticas se denominan de contexto libre, porque a la hora de transformar una palabra en otra, el símbolo no terminal que se transforma no depende de los que estén a la izquierda o derecha. Así. cuando se realicen derivaciones en las que se transforme el símbolo .--1 de la fórmula anterior, no hace falta saber qué hay alrededor de él. Ejemplo: La gramática G4 no es de tipo 2, ya que varias reglas tienen en la parte izquierda más de un símbolo no terminal. Un ejemplo de gramática de tipo 2 equivalente a las anteriores sería la siguiente: G5 = ({O,l},{A,B},A,P) donde P = {(A ::= 1B1), (A ::= 11), (B ::= 1), (B ::= O)}. Esta gramática es equivalente a la anterior, ya que generan el mismo lenguaje: LC5 = LC4 = {11, 101, 111} • Tipo 3 (regulares o lineales) Estas gramáticas, las más restrictivas, pueden ser de dos tipos: Lineales por la izquierda: P = {(S ::= >') ó (A ::= Ba) ó (A ::= a)IA, B E ~N , a E Er} Lineales por la derecha: P = {(S ::= >') ó (A ::= aB) ó (A ::= a)IA,B E ~N , a E Er} = LENGUAJES, GRAMÁTICAS y AUTÓMATAS: UN ENFOQUE PRÁCTICO 19 Ejemplo: La gramática Gs no es de tipo 3, ya que las dos primeras reglas tienen partes derechas que no se ajustan a ninguna de las dos categorías de gramáticas regulares. Un ejemplo de gramática de tipo 3 lineal derecha equivalente a las anteriores sería la siguiente: G6 = ({O,l},{A,B},A,P) donde P = {(A ::= lB), (B ::= 1), (B ::= OC) , (B ::= lC), (C ::= l)}. Esta gramática es equivalente a la anterior, ya que generan el mismo lenguaje: LG6 = LG5 = {11, 101, l1l} • Existe, además, una jerarquía entre los tipos de gramáticas tal que las gramáticas del tipo i son más generales que las de tipo i + 1. Formalmente, G3 ~ G2 ~ GI ~ Go 2.2.3 Árboles de derivación Son una forma de representar las derivaciones, siendo utilizados, por ejem- plo, en la construcción de compiladores para representar el análisis sintáctico de los programas fuente y sirviendo de base para la generación de código. Sólo se pueden definir árboles de derivación para gramáticas de tipo 1 o más restrictivas (tipos 2 y 3). En los árboles de derivación: • el axioma se representa en la raíz del árbol; • los nodos hojas del árbol son símbolos terminales de la gramática; • los nodos intermedios son símbolos no terminales de la gramática; y • las derivaciones se representan creando tantos sucesores del símbolo no terminal de la izquierda de las producciones como símbolos (ter- minales y no terminales) aparezcan en la parte derecha de las pro- ducciones. 20 CAPÍTULO 2. LENGUAJES y G RAc\1ÁTICAS F OruLU ES Ejemplo: Supóngase la siguiente gramática: G7 = ({O,l,[,J,+,*},{E},E,P) P = {(E ::= [EE+]), (E ::= [EE*]), (E ::= O) , (E ::= In La figura 2.1 muestra un posible árbol de derivación para ob e- ner la palabra [O[OhJ+]). E E E + I O E E * I O 1 Figura 2.1: Ejemplo de árbol de derivación de la palabra [0[01 *J+J. 2.2.4 Ambigüedad El concepto de ambigüedad en la teoría de lenguajes y gramáticas es similar al empleado en el lenguaje coloquial; existe más de una forma de generar una palabra a partir del axioma de una gramática. La ambigüedad puede surgir a varios niveles: en sentencias, lenguajes, y gramáticas. A la hora de utilizar eficientemente los lenguajes y gramáticas, es conveniente que no exista ambigüedad, pues provoca que el análisis de las sentencias no sea determinista . • Sentencia: una sentencia es ambigua si tiene más de una derivación o árbol de derivación. Ejemplo: En el caso de la gramática Gs = ({l} , {A,B} ,A, {(A ::= 1B) , (A ::= l1) , (B ::= 1)} ) la sentencia 11 puede ser obtenida por las dos derivaciones siguientes: A -+ lB -+ 11 Y A -+ 11. LENGUAJES, GRAMÁTICAS y AUTÓMATAS: UN ENFOQUE PRÁCTICO 21 • Gramática: una gramática es ambigua si tiene al menos una sen- tencia ambigua. Ejemplo: La gramática Gs es ambigua, ya que 11 es una sentencia y es ambigua. • Lenguaje: un lenguaje es ambiguo si existe una gramática ambigua que lo genera. Ejemplo: El lenguaje Ls = {11} es ambiguo ya que la gramática G 8 lo genera y es ambigua. si todas las gramáticas que generan un lenguaje son ambiguas, el lenguaje es inherentemente ambiguo. Ejemplo: El lenguaje Ls no es inherentemente ambiguo ya que la siguiente gramática lo genera y no es ambigua. G9 = ({l},{A},A,{(A ::= 11)}) 2.2.5 Recursividad El concepto de recursividad en lenguajes y gramáticas también es análogo al utilizado en otras ramas de la computación; la definición de un concepto utiliza a ese mismo concepto en la definición. Existen varios niveles de recursividad: • Producción recursiva: si el mismo símbolo no terminal aparece en los dos lados de la producción; es decir, existe un A E ¿'N tal que (A ::= xAy) E P , (x , y E ¿,*) Ejemplo: Las siguientes producciones son recursivas: A ::= OAO, B ::= BlO, C ::= 111C J. / 22 CAPÍTULO 2. LENGUAJES y GRAMÁTICAS Fo~ L~LES • Gramática recursiva: si existe al menos una producción recursiva en su conjunto de producciones. • Recursividad por la izquierda: si el símbolo no terrrúnal aparece el primero de la parte derecha; es decir , A ::= Ay. (A E ~ _ -.y E ~' ) . Ejemplo: En el ejemplo anterior, B ::= BlO es recursi -a por la izquierda. • Recursividad por la derecha: si el símbolo no terminal aparece el último en la parte de la derecha; es decir, A :: = x A , (A E E s . .r e ~') . Ejemplo: En el ejemplo anterior, C ::= 111C es rec :I\-a por la derecha. • Recursividad por la izquierda en más de un paso: si ~ iene una regla no recursiva por la izquierda A ::= B x , A f:- B . 1--1. B E 'E N, X E E*), pero desde B hay una derivación del tipo B ---' . A. y. (y E 'E*), entonces existe recursividad por la izquierda en más de un paso con respecto al símbolo no terminal A, ya que exis e una derivación desde él de la siguiente forma: A -+* Ayx . Ejemplo: En las siguientes producciones hay recursi\idad por la izquierda en más de un paso. E .. = T + E I T * E I variable I número T .. = E I (E) ya que E -+ T + E -+ E + E. Normalmente, cuando se utilizan las gramáticas, como en el caso de la construcción de compiladores de lenguajes de alto nivel, se necesita que las gramáticas no sean recursivas (especialmente la recursividad por la izquier- da). Para eliminar la recursividad se recurre al siguiente procedimiento, dividido en dos pasos. • Primer paso. Eliminación de recursividad por la izquierda en las producciones de un mismo símbolo no terminal. LENGUAJES, GRAMÁTICAS y AUTÓMATAS: UN ENFOQUE PRÁCTICO 23 Para cada A E ~N Si las producciones de A son: p = (A ::= A· allA· a21·· ·IA· a nl,8ll,821·· ·1,8m) donde ,8i no comienzan por A Entonces Se crea un nuevo símbolo no terminal A'; ~N = ~N U {A'}; P := (p- P) U {A ::=,81· A' I,82· A'I·· .1,8m· A' , A' ::= al . A'la2 . A'I·· .Ian . A'I),} Como muchas veces no se desean las producciones del tipo (A ::= ),) cuando A no es el axioma, otra variante equivalente del procedimiento anterior consiste en modificar el conjunto de produc- ciones resultante, sustituyendo el nuevo símbolo no terminal A' en cada parte derecha de producción por )" de la siguiente forma: P := (p- P) U {A ::=,81· A' 1,82 . A'I · · ·1,8m· A' I,8ll,821·· ·1,8m, A' ::= al· A'la2 . A'I· · ·Ian . A' la lla21·· .Ian } Ejemplo: Supóngase las siguientes producciones de una gramática que genera expresiones aritméticas: P = {(E ::= E + E), (E ::= E * E), (E ::= variable), (E ::= número)} Para eliminar la recursividad por la izquierda de las dos pri- meras producciones, se crea un nuevosímbolo no terminal E' , se eliminan todas las producciones en P del conjunto de producciones de la gramática y se crean las siguientes nuevas producciones: p' = {(E ::= variable E'), (E ::= número E'), (E' ::= +EE' ), (E' ::= *EE' ), (E' ::= ),)} 24 CAPÍTULO 2. LENGUAJES y GRA~ÜnC . .\S F OruLUES o bien: p" = {(E ::= variable E'), (E ::= número E/ ). (E ::= variable ) , (E ::= número ) , (E' ::= +EE/), (E' ::= *EE/), (El :: = + E ). (E :: = %E )} • Segundo paso. Eliminación de recursividad por la izquierda en más de un paso. Aún cuando se elimine la recursividad por la izquierda de las p uc- ciones de todos los símbolos no terminales, no se asegura que haya eliminado de todas las producciones de la gramática. ya que puede estar oculta por producirse en más de un paso. El algori tmo para la eliminación de la recursividad por la izquierda en más de un ras es el siguiente: 1. Disponer los símbolos no terminales en algún orden Al ,A2 ... An 2. For i:=1 to n For j:=1 to n 2.1 Si i i- j, reemplazar cada producción Ai ::= A j . ') por: Ai ::= (h .1'162 ·1'1 · . ·16k . l' donde Aj ::= 611621 ... 16k son todas las reglas de A) 2.2 Eliminar la recursividad por la izquierda de las A , Ejemplo: En el ejemplo de la gramática de expresion aritméticas, se enumerarían primero los símbolos no termi- nales, como, por ejemplo, Al = E, A2 = T. A continua- ción, se realizan los bucles como sigue: • i=1 (Al = E), j=1 (Al = E). Se reemplazarían las producciones E ::= Ea por las que se obtendrían de sustituir la E de la parte derecha por todas las pro- ducciones a las que lleva E. Como no hay ninguna producción de ese tipo, no se hace nada. El paso 2.1 del algoritmo eliminaría la posible recursión izquierda en Al = E. Como no hay, se sigue con la siguiente iteración del bucle interno. L ENGUAJES , GRAMÁTICAS y AUTÓMATAS: UN ENFOQUE PRÁCTICO 25 • i=l (Al = E), j=2 (A2 = T). Se reemplazan todas las producciones E ::= Ta. Esto daría lugar al nuevo conjunto de producciones: E .. = E + E I E * E I (E) + E I (E) * E I variable I número T .. = E I (E) y se elimina la recursión en E , quedando: E ··= E'··= T··= (E) + EE' I (E) * EE' I variable E' I número E' +EE' I *EE' 1). E I (E) • i=2 (A2 = T) , j=l (Al = E) . Se reemplazan las pro- ducciones T ::= Ea, dando lugar a: E ··= E'··= T· ·= (E) + EE' I (E) * EE' I variable E' I número E' +EE' I *EE' I ). (E) + EE' I (E) * EE' I variable E' I número E' I (E) y se eliminaría la recursión en T si la hubiera. • i=2 (A2 = T) , j=2 (A2 = T). Se reemplazan las pro- ducciones T ::= Ta. Como no hay ese tipo de pro- ducciones, no se producen cambios y el conjunto de producciones en el que se ha eliminado la recursión es: E··= E'··= T··= (E) + EE' I (E) * EE' I variable E' I número E' +EE' I *EE' I ). (E) + EE' I (E) * EE' I variable E' I número E' I (E) 2.2.6 Factorización a izquierdas Otro problema común cuando se diseña una gramática es el hecho de que aparezcan producciones de un mismo símbolo no terminal en cuya parte de- recha, la primera parte sea común. Por ejemplo, las siguientes producciones 26 CAPÍTULO 2. LENGUAJES y GRAMÁT ICAS FOR~L-\LES pueden estar tomadas de una gramática de un lenguaje de programación de alto nivel. s .. = If e Then S Else S I If e Then S I Repeat S U ntil e I Repeat S Forever donde ~T = {If,Then,Else,Repeat ,Until,Forever} y ~N = {S. e } . Este problema presenta dificultades a la realización de compiladores para un lenguaje definido con esa gramática. El proceso que elimina ese problema se denomina factorización a izquierdas, cuyo algoritmo se detalla a continuación: Por cada A E ~N Si A ::= (3. all(3· a2 Entonces cambiar esas producciones por: A ::= (3. A' A' ::= alla2 Ejemplo: En el ejemplo anterior, la aplicación de la factorización a izquierdas crearía dos nuevos símbolos no terminales, A' y S' . y generaría las siguientes producciones. S"= A'··= S" '= If e Then S A' I Repeat S S' Else S I ,\ U ntil e I Forever LENGUAJES , GRAMÁTICAS y A UTÓMATAS: UN ENFOQUE PRÁCTICO 27 EJERCICIOS Ejercicio 12.11 Dados los siguientes alfabetos: • ~¡ = {1 , 2, 3,4, 5, 6,7,8} Y • ~2 = {a,b,c,d, e,j,g,h} y los lenguajes: • L¡(~¡) = {xi x E ~l} Y • L2(~2) = {xi x E ~2}, Definir los lenguajes Ll U L2, L l . L2 Y (L 1 . L2)2. {xix E ~l ó x E ~2} = {1,2,3,4 , 5,6, 7,8 ,a, b,c,d,e, j , g, h} {xylx E ~l e Y E ~2} = {la, 2a , . .. , 8a , lb, ... , 8b, ... , lh, ... , 8h} . En este caso, una numeración muy utilizada para los tableros de ajedrez es numerar las filas del 1 al 8 y las columnas de la a a la h, con lo que el lenguaje resultante de Ll . L2 representaría todas las casillas del ajedrez . • (L 1 • L2)2 = {x2 = X • xix E (L¡ . L2)} = = {lala , . .. , la8a , lalb, . .. , la8b, . .. , lbla , . . . , 8h8h}. El número de palabras del lenguaje resultante sería I(L¡ . L2)21 = 84 . c1 28 CAPÍTULO 2. LENGUAJES y GRAMÁTICAS F OrulALES Ejercicio 12.21 Supóngase que la Dirección General de Tráfico desea construir u sistema que sea capaz de determinar si una secuencia de símbolos forma una ma rícula española válida. Se pide diseñar el lenguaje que serviría de base para dicho sistema. Se va a construir el lenguaje final en función de lenguajes más senc i- llos. Así, primero se definirá el lenguaje de los símbolos que representan a las provincias españolas: Lp = {A, AB, AL, ... , ZA}. Luego se define el lenguaje formado por los dígitos: LD = {a, 1, 2, 3, 4, 5, 6,7,8, 9} Otro lenguaje será el formado por las letras del alfabeto, exceptuando la Ñ, Q, R y las letras compuestas: LL = {A, B, C, ... , Z}. Como último lenguaje simple, se partirá del lenguaje formado por el guión: Le = { - } . A partir de estos lenguajes simples, se pueden ir realizando operaóones sobre lenguajes para formar el lenguaje final. Así, las matrículas antiguas, como, por ejemplo, M - 624945, se pueden definir como: Las matrículas nuevas, como, por ejemplo, TE - 4123 - A ó SG - 2334 - LG se pueden definir como: Habría que hacer una salvedad con algunas matrículas no permit idas, como, por ejemplo, las que tienen una combinación de dos letras finales con una A como letra final (BA , CA, .. . ). Si se denomina Lp al lenguaje for- mado por las combinaciones de dos letras no permitidas en las matrículas, el lenguaje que describe a las matrículas sería: LENGUAJ ES, G RAMÁTICAS y A UTÓ MATAS : UN E NFOQUE PRÁCTICO 29 Ejercicio 12.31 Supóngase que el Ministerio de Economía y Hacienda ha decidido aceptar las declaraciones de la renta interactivamente por Web. Para ello, el usuario de be rellenar los datos relativos a la declaración utilizando un interface que debe detectar errores en la entrada de datos. ¿Qué lenguajes describen los siguientes campos? 1. Los nombres y apellidos pueden ocupar un maxlmo de 40 caracteres, que podrán ser letras o guiones y pueden estar separados por blancos (nombres compuestos) . 2. La casilla correspondiente al DNI,l puede rellenarse con el DNI o con el NIF. El DNI es una secuencia de, como máximo, ocho dígitos y el NIF se forma con el DNI seguido de una letra. 3. La dirección postal debe estar precedida de el si es una calle, Pza. si es una plaza, Avda. si es una avenida , o R. (resto) si no es ninguna de estas tres cosas, pudiendo aparecer en minúsculas o mayúsculas. A conti- nuación debe estar el nombre de la calle , que debe ocupar un máximo de 50 caracteres en los que sólo pueden aparecer letras, espacios en blanco, o gUiones. 4. El número de la dirección postal debe ser una secuencia de, como máximo, cuatro dígitos. 5. El código postal está compuesto de cinco dígitos. Se definen los siguientes alfabetos básicos y los lenguajes formados sólo por los símbolos de los alfabetos: • L:D = {a, 1,2,3,4,5,6, 7,8, 9} = L D • L:L = {a, b,c, ... , z, A, B ,C, ... , Z}=LL 1 Documento N aciona! de Identidad ..... - ,..., 30 CAPÍTULO 2. LENGUAJESy GRAMÁTICAS FO~~ALES • L;e = { - } = Le • L;s = {/} = Ls • L;p={.}=Lp donde # representa al espacio en blanco. A partir de estos lenruajes, se van a formar los lenguajes pedidos: 1. LN = [LL U LB U Le]40 Si se quisiera evitar que aparecieran determinadas combinaciones no deseadas, como, por ejemplo, dos guiones seguidos o un guión seguido de un blanco, habría que cambiar la unión de los lenguajes por otra fórmula más específica. Por ejemplo, si se quieren evitar dos guiones seguidos, se podría poner: L N= (LL U LB)40 U [(LLLLLL U LLLLLB U LLLLLe U LLLBLLU ULLLBLB U LLLBLe U LLLeLL U LLLe LBU ULBLLLL U LBLLLB U LBLLLe U LBLBLL U ULBLBLB U LBLBLe U LBLeLL U LBLCLB)13. ·(LL U LB)] = = (LL U LB)40 U [((LL U LB)3 U (LL U LB)Le(LL U LB )U U(LL U L B)2 Le)13 . (LL U LB)] Si se hace (LL U LB) = LLB, se tendría: Lo que se ha hecho es enumerar las posibles combinaciones de los lenguajes LL , LB Y Le, que son los que pueden aparecer. evitando aquellas combinaciones en las que haya dos guiones juntos. Para ello, también hay que evitar que puedan aparecer al final de una combinación y al principio de otra, ya que, como se repiten 13 \'eces estas combinaciones de tres elementos (13 x 3 + 1 = 40). podrían aparecer dos guiones juntos de dos pasos consecutivos. 8 . 2. LDNI=[Ui=lLb]·(LLU{A}) Es decir, son todos los posibles números entre O y 99999999 seguidos . o no, de una letra. .i LENGUAJES, GRAMÁTICAS y AUTÓMATAS: UN ENFOQUE PRÁCTICO 31 3. Como en el caso de la dirección, se marca cuáles serán los comienzos de los códigos ("el", "Pza.", "Avda." o "R."), el lenguaje se podría formar uniendo esos prefijos a un conjunto de letras, blancos y guiones cuya cardinalidad será 50 menos lo que ocupen cada uno de esos prefijos. Podría ser: LDP =[( {e} U {e}) . Ls' (LL U LB U LC)48]U [({p} U {P})· ({z} U {Z})· ({a} U {A})· Lp' (LL U LB U LC)46]U [({a} U {A})· ({v} U {V})· ({d} U {D})· ({a} U {A})· Lp' (LL U LB U LC)45]U [({r} U {R})· Lp' (LL U LB U LC)48] 4. En el caso del número de la dirección, puede ser cualquier número entre O y 9999: 5. Por último, el código postal estaría formado por cinco dígitos obliga- toriamente, pudiendo definirse como: Realmente, habría que comprobar que el código postal es uno de los válidos. Para ello se podrían enumerar todos los elementos válidos del lenguaje Lc p y formar con esos un nuevo lenguaje Lc pv. En los siguientes capítulos se estudiarán los autómatas, que son sistemas que permiten, dado un lenguaje y una palabra, decidir si la palabra perte- nece o no al lenguaje. Esto permitiría, fácilmente , construir un autómata para cada uno de estos lenguajes y que se encargara de la labor de com- probación de que se han introducido los datos correctamente. 32 CAPÍTULO 2. LENGUAJES y GRA~L\nCAS F ORliU-ES Ejercicio 12.41 Obtener derivaciones de las palabras 002 y 0001 a partir de la . iente gramática: G = ({O, 1, 2} , {A , B}, A, {(A ::= OE) , (A ::= 2) , (E ::= OA ). (B ::= )}) Describir el árbol de derivación y obtener el lenguaje que ge era . Las palabras se pueden obtener por las siguientes derivacion • 002: A --t OE --t OOA --t 002 • 0001: A --t OB --t OOA --t OOOE --t 0001 Los árboles de derivación aparecen la figura adjunta. A A 0)\ ° A I 2 ° A A °A ° B I Para obtener el lenguaje, habrá que analizar qué palabras pueden deri- varse desde el axioma. ASÍ, se pueden obtener las siguientes derivaciones: .A--t2 • A --t OB --t 01 • A --t OB --t OOA --t 002 • A --t OE --t OOA --t OOOB --t 0001 • A --t OE --t OOA --t OOOE --t OOOOA --t 00002 LENGUAJES , GRAMÁTICAS y AUTÓMATAS: UN ENFOQUE PRÁCTICO 33 Por tanto, puede aparecer un 2 precedido de un número par de Os ó un 1 precedido de un número impar de ls. Si se define un lenguaje Ll como: y un lenguaje L2 como: Entonces, el lenguaje generado por la gramática se puede definir como Le = Ll U L 2 , o, lo que es lo mismo: Ejercicio 12.51 Dada la siguiente gramática, realizar factorización a izquierdas y eliminación de recursividad por la izquierda . G = ({ or,and,not,=,(.),id} , {C} , C, P) donde P = {(C::= C and C), (C::= C or C), (C::= not C), (C::= ( C = C )), (C::= id)} Para factorizar a izquierdas se reemplazan las dos primeras producciones por: G::=CG' G'::= or G I and C A continuación, se elimina la recursividad por la izquierda de la produc- ción (C :: =C C') creando un nuevo símbolo no terminal Gil y cambiando el conjunto de producciones P por: ... 34 CAPÍTULO 20 LENGUAJES y GRA. L.\T1CA5 F Oru L-\ LES e::= not e e" I ( e = e ) e" I id e" e'::= or e I and e e"::= e' e" I .\ Ejercicio 12.61 Dada la siguiente gramática, que utiliza la notación polaca i ersa ( odos los operandos de las operaciones se colocan antes de los operadores), aa m ar a izquierdas y eliminar la recursividad por la izquierdao G = ({id, num, fune , +, *, j, - , (,), o,;, <, >, =} , {S, N , M , 0 0 R }o o P ) donde P = {(S ::= S; S), (S :: = So), (S ::= (NNR)), (S ::= (idN = )) 0 (N ::= M NON), (N ::= M NO), (N ::= id), (N ::= num)o (M ::= N), (M ::= fune(N)) , (M ::= fune(M)) , (O ::= +), (O ::= *), (O ::= -), (O ::= j), (R ::=<), (R ::=», (R ::==)} Mostrar dos sentencias del lenguaje generado por la gramática . La factorización a izquierdas influye en las producciones: (S ::= S; S) , (S ::= So), (S ::= (NNR)), (S ::= (idN =)) , (N ::= MNON), (N ::= MNO) , (M ::= fune(N)) , (M :: = func (.U )) Aplicando el algoritmo, quedarían como: (S 00- SS') (S' 00 _ 0 S) (S' 00- ) .. - , .. - , , .. -., (S ::= (S") , (S" ::= NNR)) , (S" ::= idN =)) , (N ::= MNON' ), (N' ::= N), (N' ::= .\), (M ::= fune(M/), (M' ::= N)), (M' ::= M)) La gramática modificada, quedaría: G' = (~~, ~~, S, PI) LENGUAJES, GRAMÁTICAS y AUTÓMATAS: UN ENFOQUE PRÁCTICO 35 donde E!z, = ET = {id, num, fune, +, *, /, -, (,),.,; ,<, >, =} E~ = {S,S',S",N,N',M,M',O,R} p' = {(S ::= SS'), (S ::= (S"), (S' .. -. S) (S' .. - ) .. -, , .. -., (S" ::= NNR)), (S" ::= idN =)), (N ::= M NON') , (N ::= id), (N ::= num), (N' ::= N), (N' ::= .\), (M ::= N), (M ::= fune(M'), (M' ::= N)), (M' ::= M))} (O ::= +),(0 ::= *),(0 ::= -),(0 ::= /), (R ::=<), (R ::=», (R ::==)} La recursividad por la izquierda aparece en las producciones correspon- dientes a 5, N Y M. Estas dos últimas en más de un paso. Para eliminar la recursividad por la izquierda en más de un paso, se recurre al algoritmo, ordenando los símbolos no terminales por el mismo orden en que aparecen en el conjunto E~, por ejemplo; Al = S, A2 = S', ... , Ag = R. Luego, se realizan bucles en los que se reemplazan las primeras apariciones de los símbolos no terminales en las partes derechas de las producciones por las partes derechas de las producciones de esos símbolos no terminales y se elimina la recursividad por la izquierda. • i = 1, j = 1 (S, S). Como i = j, no se hace nada en el primer paso, y luego se elimina la recursividad por la izquierda de las producciones de S, generando un nuevo símbolo no terminal S"I , quedando sus producciones como: (S ::= (S" SIII) , (SIII ::= S' SIII) , (SIII ::= .\) • i = 1,j = 2 (S, S'). No hay producciones del tipo S ::= S' y ya se ha eliminado la recursividad por la izquierda de S, con lo que no se hace nada en este punto. • Lo mismo pasa con i = 1 y j = 3 .. 9, i = 2 Y j = 1..9, e z 3,Y j = 1..3. • i = 3, j = 4 (S", N). En este caso, se sustituye la primera aparición del símbolo no terminal N en la producción (S" :: = N N R)) por to- das sus producciones, transformando dicha producción en el siguiente conjunto: .- 36 CAPÍTULO 2. LENGUAJES y GRA {ÁnCAS f OR.).H L ES (S" ::= MNON'NR)), (S" ::= idNR)) , (S" :: = n -R Como no hay recursividad por la izquierda en las prod e S" , se termina este paso. • Para i = 3 y j = 5 no hay cambios, pero sí en el i = 3. = 6 (S", M) debido a los cambios producidos en S" en el pas enor. Es necesario cambiar la M que aparece como primer ' partederecha de la producción (S" ::= MNON'NR )) por ~ partes derechas de sus producciones. Quedarían las nuevas produccion ~ de S" como: (S" ::= NNON'NR)), (S" ::= func(M'NON'NR )) que se unirían a las anteriores producciones suyas. Como no hay recursividad por la izquierda, no hay más cambios. • Para i = 3 y j = 7 .. 9 no hay cambios, así como para i = 4 Y j = 1..5. • i = 4,j = 6 (N, M). Se sustituye la M de la producción (N ::= M NON') por sus producciones , quedando: (N ::= N NON') , (N ::= func(M' NON') A continuación, se elimina la recursividad por la izquierda de _V . quedando sus producciones: (N ::= func(M' NON' N"), (N ::= idN") , (N ::= numN" ). (N" ::= NON' N"), (N" ::= >..) • Para i = 4, j = 7 .. 9 e i = 5, j = 1..3 no hay cambios. • i = 5,j = 4 (N', N). Se realizan los mismos pasos anteriores . que- dando las producciones de N' como: (N' ::= func(M'NON'N") , (N' ::= idN") , (N' ::= numN" ). (_ ' ::= >..) • En los siguientes pasos, no hay más cambios hasta i = 6. j = 4 (M, N) , donde se sustituye la N en la producción (M ::= ) por sus producciones, quedando las producciones de M como: LENGUAJES, GRAMÁTICAS y AUTÓMATAS: UN ENFOQUE PRÁCTICO 37 (M ::= func(M' NON' N"), (M ::= idN") , (M ::= numN"), (M ::= func(M') Como no hay recursividad por la izquierda, se termina al paso, no habiendo más cambios hasta i = 7,j = 4 (M', N), donde se sustituye la N en la producción (M' ::= N)) por sus producciones, quedando las producciones de M' como: (M' ::= fune(M' NON'N")), (M' ::= idN")), (M' ::= numN")) , (M' ::= M)) No hay recursividad por la izquierda, con lo que se siguen los pasos hasta i = 7,j = 6 . • i = 7, j = 6 (M' , M). Se sustituye la producción (M' ::= M)) por: (M' ::= fune(M' NON' N")), (M' ::= idN")) , (M' ::= numN")) , (M' ::= fune(M')) que no tiene recursividad. Como ya no hay ningún problema de recursividad, se terminaría el algoritmo de eliminación de la recursividad por la izquierda, quedando la siguiente gramática: G" = (E" E" S P") T' N' , donde E!f = ~~ = {id, num, fune , +, *, /, -, (,),., ; , <, >, =} E" = {S S' S" S'" N N' N" M M' O R} N """"" P' = {(S ::= (S"S"'), (S' .. _. S) (S' .. - ) .. - , , .. -. , (S" ::= NNON'NR)) , (S" ::= fune(M'NON'NR)) , (S" ::= idNR)) , (S" ::= numNR)) , (S" ::= idN =)) , (S'" ::= S' S"') , (S'" ::= ,\) (N ::= fune(M' NON' N"), (N ::= idN") , (N ::= numN") , (N' ::= fune(M'NON'N"), (N' ::= idN") , (N' ::= numN") , (N' ::= ,\), I - 38 CAPÍTULO 2. LENGUAJES y GRAMÁTICAS FORMALES (N" ::= NON' N"), (N" ::= A) (M ::= func(M' NON' N") , (M ::= idN") , (M :: = numN" ). (M ::= func(M') (M' ::= func(M' NON' N")) , (M' ::= idN")) , (M' ::= numN")) , (M' ::= func(M')) (O ::= +) , (O ::= *), (O ::= -) , (O ::= j) , (R ::=<), (R ::=», (R ::==)} Para obtener sentencias del lenguaje, no hay más que derivar desde el axioma, utilizando las producciones de la gramática. Si se utiliza la gramática primitiva (sería equivalente hacerlo con la nueva), y deriyando por la izquierda, se podrían obtener, por ejemplo, las siguientes dos sen- tencias: .S -+ -+ -+ -+ -+ • S -+ S; S -+ (NNR) ; S -+ (id NR); S -+ (id MNOR) ; S-+ (id NNOR); S -+ (id num NOR); S -+ (id num num OR ): S -+ (id num num * R); S -+ (id num num * < ); S -+ (id num num * < ); S. -+ (id num num * < ); (id N = ). -+ (id num num * <); (id id =). S . -+ (NNR). -+ (num NR). -+ (num num R). -+ (num num = ) . Ejercicio 12.71 Dada la gramática G = {~T,~N,E,P}, donde ~T ~N = {E , T , F}, E es el axioma y Pes: E T F E+ T I (E) I a T*FI (E) I a (E) I a {a . - . x. ) . 0, Eliminar la recursividad por la izquierda y construir el árbol de de rivació n para las sentencias: a+a+a+a+a ya+(a+a). Se eliminará primero la recursividad por la izquierda de la producción E::= E+T. Para ello, se añadirá un nuevo símbolo no terminal A y se sustituirá la producción por las siguientes producciones. LENGUAJES , GRAMÁTICAS y AUTÓMATAS: UN ENFOQUE PRÁCTICO 39 E .. - A 00- aA I a I (E)A I (E) +TA I +T El nuevo conjunto de producciones es: E 00- aA I a I (E)A I (E) 00 A 00- +TA I +T 00 T 00 - T *F I (E) l a 00 F 00- (E) I a 00 Se eliminirá ahora la recursividad por la izquierda de la producción T : : = T * F introduciendo un nuevo símbolo no terminal B. Las nuevas producciones son: T B 00- 00 00- 00 (E)B I aB I (E) I a *FB I *F El conjunto final de producciones es: E 00- aA I a I (E)A I (E) 00 A 00 - +TA I +T 00 T 00- (E)B I aB I (E) I a 00 B 00- *FB I *F 00 F 00 - (E) I a 00 Las figura 2.2 muestra el árbol de derivación de la primera sentencia y la figura 2.3 el á.rbol de derivación de la segunda. - 40 CAPÍTULO 2. LENGUAJES y GRA~L~TIC.\.S f OIDL\LES + T A 1\ a + a Figura 2.2: Arbol de derivación para la sentencia a + a + a - a - a . + T ( E ) /\ a A 1\ + T I a Figura 2.3: Arbol de derivación para la sentencia a + (a + a). LENGUAJES, GRAMÁTICAS y AUTÓMATAS: UN ENFOQUE PRÁCTICO 41 Ejercicio 12.81 Dados los siguientes lenguajes: • Ll = {raíces de los verbos regulares de la primera congujación} • L 2 = {terminaciones de presente de indicativo de la primera congujación} • L3 = {raíces de adjetivos calificativos que admiten desinencia de género} • L4 = {morfemas de género} • L5 = {morfemas de número} Definir los lenguajes de las formas verbales regulares de presente de indi- cativo y de los adjetivos calificativos masculinos y femeninos tanto singulares como plurales. Simplificando estos lenguajes pueden ser: • Ll = {cant, am, salt, ... } • L 2 = {o, as, a, amos, ais, an } • L3 = {bonit, ric, guap, amarill, ... } • L4 = {o, a } • L5 = {A, s } Así, L 1 ·L2 define el lenguaje de las formas verbales regulares de presente de indicativo de la primera conjugación: Ll . L 2 = {canto, cantas, ... , ama, amamos, . .. , saltais, saltan, ... } Para los adjetivos, L3 . L4 incluye los adjetivos masculinos y femeninos : L3 . L4 = {bonito, bonita, amarillo, amarilla, ... } Por último, el lenguaje L 3·L4·L5 incluye también los adjetivos singulares y plurales, pues: L3 . L4 . L 5= {bonito, bonita, bonitos, bonitas, amarillo, amarilla, .. . } ... Capítulo 3 GRAMÁTICAS REGULARES y AUTÓMATAS FINITOS En este capítulo se van a estudiar las gramáticas regulares, de tipo 3 según la clasificación de Chomsky. A continuación, se tratarán los autómatas que reconocen el lenguaje generado por una gramática de ese tipo: las Máquinas Secuenciales; los Autómatas Finitos Deterministas, No Determi- nistas, y Probabilísticos; y los autómatas de Células de McCulloch-Pitts. También se estudiarán las Expresiones Regulares que permiten describir de forma concisa el lenguaje generado por una gramática de tipo 3 (Lenguajes Regulares) y, por tanto, aceptado por un autómata de los tipos enunciados anteriormente. 3.1 Gramáticas regulares Las Gramáticas Regulares son el tipo más específico de gramática según la jerarquía de Chomsky. Como se ha visto, las producciones pueden ser de dos tipos, según sea regular (lineal) por la derecha o por la izquierda: • Lineales por la izquierda: p = {(S ::= A) ó (A ::= Ba) ó (A ::= a)IA, BE ¿'N, a E ¿'T} • Lineales por la derecha: p = {(S ::= A) ó (A ::= aB) ó (A ::= a)IA,B E ¿'N,a E ¿'T} 43 44 CAPÍTULO 3. GRAMÁTICAS REGULARES y AUTÓMATAS FI ITOS A continuación, se estudiará la equivalencia entre ambas representa- ciones, ya que, para cada Gramática Lineal derecha existe una Gramática Lineal izquierda equivalente y viceversa. El algoritmo para convertir una gramática lineal derecha en otra equivalente lineal izquierda tiene cuatro pasos: 1. Se transforma la gramática de forma que no haya ninguna regla en cuya parte derecha esté el axioma de la gramática (cuando esto ocu- rre se denomina axioma inducido) . Para ello, se aplica el si!!UÍente proceso: • Se crea un nuevo símbolo no terminal S'. • Por cada regla de la forma S ::= x, donde S es el axioma.y x E ~*, se crea una nueva regla S' ::= x. • Cada regla de la forma A transforma en A ::= xS'y. 2. Se crea un grafo G dirigido: xSy (A E ~N, x, Y E L' ). se • Para cada A E ~N U {A} se crea un nodo. • Para cada producción (A ::= aB) E P (A, B E ~N, a E LT ). se crea un arco etiquetado con a que va del nodo A al nodo B. • Para cada producción (A ::= a) E P (a E ~T) , se crea un arco etiquetado con a que va del nodo A al nodo A. • Si existe una regla S ::= A, se crea un arco sin etiqueta de de el nodo del axioma al nodo A. 3. Se crea otro grafo G' a partir de G: • Se intercambian las etiquetas del axioma, S, y A. • Se invierte la dirección de todos los arcos. 4. Se transforma en un conjunto de reglas: • Para cada nodo, se crea un símbolo no terminal de la gramática, excepto para el etiquetado como A. • Para cada arco etiquetado con a E ~T que va del nodo A E ~ N al nodo B E ~N U {A} , se crea una producción A ::= B a. • Si existe un arco del nodo del axioma al nodo de A, se crea una regla S ::= A. LENGUAJES, GRAMÁTICAS y AUTÓMATAS: UN ENFOQUE PRÁCTICO 45 El algoritmo para realizar el paso inverso es similar al descrito. Ejemplo: Supóngase la siguiente Gramática Lineal derecha. GIO = ({O,l},{A ,B},A,P) P = {(A ::= lB), (A ::= A) , (B ::= OA), (B ::= On La Gramática Lineal izquierda equivalente se formará en los siguientes cuatro pasos: 1. Se transforma la gramática de forma que no aparezca la A en la parte derecha de la producción B ::= OA. • Se crea un nuevo símbolo A' • Se crean las reglas A' ::= lB y A' ::= A • Se crea la regla B ::= OA' • Se borra la regla B ::= OA. La gramática queda como: GlOl = ({O,l},{A,B, A'} , A,P) P = {(A ::= lB), (A ::= A), (A' ::= lB), (A' ::= A), (B ::= OA' ), (B ::= On Como la gramática, por definición, no puede tener la regla A' ::= A, ya que A' no es el axioma, se elimina dicha regla y se sustituye la A' en todas las producciones en las que aparezca en la parte derecha, quedando la gramática como: GlOlI = {{O, l} , {A, B, A'}, A, P) P = {(A ::= lB), (A ::= A), (A' ::= lB), (B ::= OA' ), (B ::= O)} 2. Se crea un grafo que representa las transiciones de esta gramática (figura 3.1). 3. Se invierte el grafo, tal como se muestra en la figura 3.2. 4. Se transforma el grafo en la siguiente gramática: GlOlIl = ({O, l} , {A,B,A'} ,A,P) P = {(A ::= BO), (A ::= A), (A' ::= BO) , (B ::= A'l), (B ::= In 46 CAPÍTULO 3. GRAMÁTICAS REGULARES y AUTÓMATAS FINITOS Figura 3.1: Grafo construido a partir de la gramática G lO Figura 3.2: Grafo construido a partir invertir el grafo en la fi!!UIa3. l. 3.2 Máquinas Secuenciales Las Máquinas Secuenciales representan un tipo de autómata que es capaz de, dada una palabra de entrada, generar otra palabra de salida. Para ello, se definen un conjunto de estados, que "memorizan" la parte de la palabra de entrada leída en cada momento y generan, al mismo tiempo que transitan entre los estados, una salida. Se pueden ver como un autómata que tiene dos cintas asociadas: una por la que va leyendo las palabras de entrada, y otra de salida, en la que va generando la salida. En es a sección se tratarán los aspectos básicos de este tipo de autómatas. 3.2.1 Definición • Máquina finita de Mealy: es una quíntupla definida como donde LENGUAJES, GRAMÁTICAS y AUTÓMATAS: UN ENFOQUE PRÁCTICO 47 ~ E es el alfabeto de símbolos de entrada ~s es el alfabeto de símbolos de salida Q es el conjunto finito no vacío de estados f es la función de transición definida como: f : Q x ~E ---+ Q - 9 es la función de salida, definida como: 9 : Q X ~E ---+ ~s Ejemplo: Supóngase la siguiente Máquina Secuencial, que genera como salida una p en el instante t si hasta ese ins- tante de tiempo ha recibido en la entrada un número par de unos (considerando la entrada que no contiene ningún 1 como número par de unos), y genera una i en la salida si hasta ese instante ha recibido un número impar de unos en la entrada. donde Af1 = ({O,I},{p,i},{qO,ql},f,g) f(qo, O) = qo f(qo , 1) = ql f(ql, O) = ql f(ql, 1) = qo g(qO, O) = p g(qO , 1) = i g(ql , O) = i g(ql , 1) = P - 48 CAPÍTULO 3. GRAMÁTICAS REGULARES y AUTÓMATAS FINITOS El comportamiento de las Máquinas Secuenciales es el si- guiente: la máquina dispone de un conjunto de estados que modelizan los diferentes momentos en los que puede estar a la hora de resolver un problema. En este caso, hay dos estados, qo, que simboliza el estado en el que, hasta ese ins- tante, se han leído un número par de unos en la entrada. y qI, que representa el hecho de que se han leído un número impar de unos en la entrada. La función ¡ permite transitar de un estado a otro en cuanto lee un 1 en la entrada (por- que hay cambio de par a impar o viceversa), y transita al mismo estado en el que se encuentre (no cambia de estado) si se lee un 0, ya que no cambia la salida (de par a impar o viceversa). La función g genera la salida correspondiente a ese instante. En este caso, si está en el estado qo y lee un o. sigue habiendo leído un número par de unos en la entrada. con lo que generará una p en la salida. Esto es debido a que, si está en el estado qo es porque hasta el momento de leer el siguiente dígito de la entrada, había leído un número par de unos, y si ahora lee un 0, el número de unos leídos en la entrada no cambia y, por tanto, seguirá siendo par. Así se razona con el resto de las salidas que genera la función g . • Máquina finita de Moore: es una definición alternativa de Máquina Secuencial en la que la función g sólo depende del estado en el que se esté. La definición será: MO = CEE, L.S, Q, ¡, g) donde la única diferencia con respecto a la definición de Mealy es que la función de salida g se define como: g : Q -+ L.s Ejemplo: Una Máquina de Moore que realiza la misma la- bor que la MI definida anteriormente, sería: M2 = ({O,l},{p,i},{qO,ql},¡,g) donde LENGUAJES, GRAMÁTICAS y A UTÓMATAS: UN ENFOQUE PRÁCTICO 49 f(qo , O) = qo g(qo) = P f(qo, 1) = qi f(qi, O) = qi g(qd = i f(qi , 1) = qo En el caso de las Máquinas de Moore, generan en la salida el correspondiente símbolo del estado en el que estén después de realizar cada tansición. Siempre que esté en el estado qo genera una p en la salida, y siempre que esté en el estado qi genera una i en la salida. La diferencia fundamental entre los dos tipos de Máquinas Secuen- ciales es que las ~áq~!!l_as_Q~Mealy suponen velocidad de proceso infinita, ya que estas máquinas generan una salida inmediatamente después de recibir la entrada, y, p-or" erconfiari¿~' las ' cleMoore supo- nen una v~íocida,d finiÍa; ya, que la respuesta sólo dep~n:Qe~I~.~g.dQ en el que se encu~J1t.r~J-ª- má<luina d~~i~~s q~.Jiªiii·a:r:cªQª trar.t¡¡ición. 3.2.2 Representación Existen tres formas equivalentes de representar una Máquina Secuencial: • Tablas de transición y de salida: se crea una matriz de IQI x I~E I elementos para representar la función f y una matriz de IQI x I~E I elementos (ó IQI para las Máquinas de Moore) para representar la g, tal como se muestra en la figura 3.3. Los estados aparecen en las filas de todas las tablas, mientras que los símbolos del alfabeto de entrada aparecen en todas las tablas, menos en las tablas de la función de salida de las Máquinas de Moore. En el caso de las tablas que representan la función f, la posición (qi, ej) está ocupada por el estado qk al que se transita en el caso de que se esté en el estado qi y se lea en la entrada el símbolo ej. En las tablas que representan la función de salida, la posición (qi, ej ) (o qi si es de Moore) está ocupada por el símbolo Sk que se genera en la salida al estar en el estado qi y recibir en la entrada el símbolo ej (o simplemente haber transitado al estado qi en las Máquinas de Moore) . Ejemplo: Las máquinas Mi y M2 definidas anteriormente se representarían como: -- 50 CAPÍTULO 3. GRAMÁTICAS REGULARES y AUTÓMATAS FINITOS~E ~E Q I el I ... I em I Q I el I ... I em I ql qi ... qj ql Si . .. Sj .. . .. . qn qk ... ql qn Sk . .. Sl (a) f (b) gME Figura 3.3: Ejemplos genéricos de tablas que representan la función de transición f de una Máquina Secuencial (a), la función de salida 9 _\f E de una Máquina de Mealy (b) o la función de salida gMO de una Máquina de Moore (c), donde ei E ~E, qi E Q y sr E ~s · qo qo ql ql ql qo ~E Q lO 1 1 I ~ ~ gMl • Tabla única de transición y de salida: las dos funciones se pueden representar en una sóla tabla, en la que, en las Máquinas de :\ Iealy, en cada posición (qi, ej) aparecerá el estado al que se t ransita y la salida correspondiente, si, estando en el estado qi se lee de la ent rada el símbolo ej. En el caso de las Máquinas de Moore, las filas están etiquetadas como Q /~s y el significado de las posiciones es el mismo que en las tablas anteriores. La figura 3.4 muestra la representación genérica. • Diagramas de transición: son representaciones gráficas de las Máquinas Secuenciales. Mealy: se crea un grafo dirigido en el que * para cada estado qi E Q se crea un nodo, y * para cada transición f(qi,ej) = qk Y g(qi ,ej) = SI . se crea un arco de qi a qk etiquetado con ej / SI Moore: se crea un grafo dirigido en el que * para cada estado qi E Q, si g(qd = Sj , se crea un nodo etiquetado qd S j, y LENGUAJES , GRAMÁTICAS y AUTÓMATAS: UN ENFOQUE PRÁCTICO 51 ~E Q I el l··· I em ql qi/sp ... qj/Sr .. . qn qk/Ss ... qt!St qn/Sr qk q¡ ...J (a) f/gME (b) f /gMO Figura 3.4: Ejemplos genéricos de tablas únicas que representan la función de transición y la de salida de una Máquina Secuencial de Mealy (a) , y de una Máquina de Moore (b), donde ei E ~E , qi E Q y Si E ~s. * para cada transición f (% ej) = qk, se crea un arco de qi a qk etiquetado con ej. Ejemplo: Las figuras 3.5(a) y 3.5(b) muestran la represen- tación de las máquinas MI y M 2 utilizando diagramas de transición. l/í O/p ~ Olí C6J @~ ~ l/p (a) (b) Figura 3.5: Diagramas de transición de la Máquina de Mealy MI (a) y la de Moare M 2 (b) 3.2.3 Extensión a palabras de la entrada y salida En lugar de tratar uno a uno los símbolos de la entrada y generar uno a uno los símbolos de salida, se va a estudiar cómo se puede tratar una secuencia seguida de entradas y generar la salida correspondiente por medio de una extensión de las definiciones anteriores. - 52 CAPÍTULO 3. GRAMÁTICAS REGULARES y AUTÓMATAS FINITOS Extensión de Mealy La función de transición f se redefine como: f: Q x ~E -+ Q Además, f(q , ax) = f(J(q, a), x) para cada q E Q, a E ~E , x E ~E f(q, >') = q para cada q E Q donde >. es la palabra vacía. Es decir, para una palabra formada por varios símbolos, el estado al que transita la Máquina Secuencial es el co- rrespondiente a transitar con cada uno de los símbolos. La función de salida, g, se redefine como: g: Q x ~E -+ ~s y, a las salidas anteriores, se les añaden las siguientes salidas correspon- dientes a palabras de longitud cero o mayor que uno: g(q, ax) = g(q, a) . g(J(q, a) , x) para cada q E Q, a E ~E , X E ~E g{q, >') = >. para cada q E Q La salida que se genera es la correspondiente a concatenar la salida producida con cada uno de los símbolos de la entrada y sus transiciones. Ejemplo: Si la palabra de entrada es 01001 y la máquina MI comienza en el estado qo , MI generaría el siguiente comporta- miento en cuanto a transiciones y salida: f(qo, 0100) = f(J(qo, 0),100) = f(qo, 100) = f(J(qo, 1) , 00) = = f(qI, 00) = f(J(qI, O), O) = f(qI, O) = f(f(qI,O),>.) = f(qI,>') = qI y, al mismo tiempo: g(qO , 0100) = g(qO , O)g(J(qO, 0) , 100) = pg(qO , 100) = pg(qO, 1)g(f(qo , 1) ,00) = pig(qI, 00) = pig(qI, O)g(J(qI , O), O) = piig(qI , O) = piig(qI, O)g(J(qI, O), >') = piiig(qI, >') = piii LENGUAJES, GRAMÁTICAS y AUTÓMATAS: UN ENFOQUE PRÁCTICO 53 Extensión de Moore Se redefinen f y 9 de la misma forma que para las Máquinas de Mealy. • f: Q x ~E -+ Q • g: Q -+ ~s Pero se añade una nueva función de salida de palabras g' definida como: g' : Q x ~E -+ ~s También se cumplen las siguientes igualdades: • f(q, ax) = f(J(q, a), x) (Vq E Q, a E ~E, X E ~E)' • f(q, A) = q (Vq E Q) • g'(q ,ax) = g(q) . g'(J(q,a) , x), (Vq E Q, a E ~E, X E ~E) • g'(q, A) = A (Vq E Q) donde, a la hora de calcular la función de salida, g', de una palabra se utiliza la función de salida, g, de un único símbolo. Hay que tener en cuenta que a la hora de calcular la función salida, hay que realizar primero la transición. Así, la primera salida será la correspondiente al estado al que se llega desde el estado inicial y el primer símbolo de la entrada. Ejemplo: Si la máquina M 2 recibe como entrada la palabra 01001 y comienza en el estado qo , generaría el siguiente com- portamiento en cuanto a transiciones y salida: f(qo,0100) = f(f(qo,0),100) = f(qo,100) = f(f(qo,l),OO) = f(qI,OO) = f(J(qI, O), O) = f(qI, O) = f(f(qI,O),A) = f(qI,A) = qI y, al mismo tiempo: g'(qo,0100) = g(qo)g'(J(qO, 0),100) = pg'(qO, 100) = pg(qI)g'(J(qO , 1),00) = pig'(qI, 00) = pig(qdg'(J(qI , O), O) = piig'(qI, O) = piig(q¡)g'(f(qI, O), A) = piiig'(qI , A) = piii - 54 CAPÍTULO 3. GRAMÁTICAS REGULARES y AUTÓMATAS FINITOS Función respuesta de una Máquina Secuencial A partir de las funciones de salida y con el objetivo de unificar los dos tipos de Máquinas Secuenciales, se define una función respuesta, h, de la siguiente forma: Vq E Q, x E ~E, h(q, x) = { g~(q, x)) g q,x si es de Mealy si es de Moore Dada esa nueva función, en cada Máquina Secuencial se cumplen los siguientes teoremas: • Vq E Q, x E ~E' Ih(q, x)1 = Ixl • Vq E Q, x, y E ~E' f(q, xy) = f(f(q, x), y) • Vq E Q, x, y E ~E' h(q, xy) = h(q, x) . h(f(q, x), y) Ejemplo: Dada la máquina MI , se define la h(q, x) = g(q , x) Vx E {O, 1} * ,q E {qo, ql}. Entonces, se cumplen, entre otras , las siguientes igualdades (provenientes de los teoremas): • Ih(qo, 0100)1 = 101001 = 4, lo cual se cumple al ser h(qo, 0100) = g(qO , 0100) = piii • f(qo, 0100) = f(f(qo, 01) , 00) Por una parte, f(qo,0100) = ql como se ha mostrado en ejemplos anteriores. Por otra parte, f(f(qo,Ol),OO) = f(f(f(qo,O), 1),00) = f(f(qo , 1) , 00) = f(ql , 00) = f(f(ql , O) , O) = f(ql , O) = f(f(ql,O) , A) = f(ql,A) = ql • h(qo , 0100) = h(qo, 01)f(f(qo, 01), 00) Por una parte, h(qo , 0100) = piii como se ha mostrado en ejemplos anteriores. Por otra parte, L ENGUAJES , GRAMÁTICAS y A UTÓMATAS: UN ENFOQUE PRÁCTICO 55 h(qo,OI)h(f(qo,OI),OO) = h(qo ,O)h(f(qo ,O) , I)h(f(qo , OI) ,OO) = ph(qo, l)h(ql,OO) = pih(ql,O)h(f(ql,O),O) = piih(ql , O) = piih(ql, O)h(f(ql , O) , >.) = piiih(ql, >.) = piii c.q.d. 3.2.4 Equivalencia de Máquinas Secuenciales Dadas dos Máquinas Secuenciales es importante saber si, dadas las mismas palabras de entrada generan la misma salida; es decir, si son equivalentes. Para poder analizar cuándo dos máquinas son equivalentes, se van a definir primero unos conceptos básicos. Definiciones • Equivalencia de estados: dos estadosql, q2 E Q son equivalentes, qlEq2 , si para cada palabra x E ¿:E se cumple que la salida generada comenzando por ql y recibiendo x como entrada, genera la misma salida que comenzando por q2 y recibiendo x como entrada: h(ql ,X) = h(q2,X ) Ejemplo: Dada la siguiente Máquina Secuencial: A/3 = ({0 , 1} , {p ,i}, {qO , ql , q2} , f , g) donde f y 9 serán: f(qo, O) = q2 f(qo , 1) = ql f(ql , O) = ql f(ql, 1) = qo f(q2 , O) = qo f(q2 , 1) = ql g(qO, O) = p g(qo, 1) = i g(ql, O) = i g(ql, 1) = P g(q2 , O) = P g(q2 , 1) = i .... 56 CAPÍTULO 3. GRAMÁTICAS REGULARES y AUTÓMATAS FINITOS Los estados qo y q2 son equivalentes (qOEq2)' Pese a que no se va a demostrar formalmente, esto es debido a que, para cualquier palabra formada con los símbolos del alfabeto de entrada, la salida es la misma empezando en cualquiera de los dos estados. Así, por ejemplo: y Lemas
Compartir