You are on page 1of 176

y Lenguajes Formales

Teoras de Autmatas

Coleccin manuales uex - 55


(E.E.E.S.)

Elena Jurado Mlaga

55

Teora de auTmaTas y lenguajes formales

manuales uex

55
(e.e.e.s.) espacio europeo educacin superior

elena jurado mlaga

Teora de auTmaTas y lenguajes formales

2008

La publicacin del presente manual fue subvencionada por el Vicerrectorado de Calidad y Formacin Continua de la Universidad de Extremadura en la Convocatoria de Acciones para la Mejora de la Calidad Docente del curso 2007/08 dentro de la modalidad B.2: Diseo y desarrollo de materiales docentes adaptados a la metodologa derivada del E.E.E.S. Esta convocatoria de acciones forma parte del Plan de Adaptacin de la UEX al Espacio Europeo de Educacin Superior.

FSE

Fo n d o S o c i a l E u ro p e o

Edita Universidad de Extremadura. Servicio de Publicaciones C./ Caldereros, 2 - Planta 2 - 10071 Cceres (Espaa) Telf. 927 257 041 - Fax 927 257 046 publicac@unex.es www.unex.es/publicaciones ISSN 1135-870-X ISBN 978-84-691-6345-0 Depsito Legal M-45.211-2008 Edicin electrnica: Pedro Cid, S.A. Telf.: 914 786 125

A Juan

Prlogo o
El estudio de la teor de autmatas y de los lenguajes formales se puede ubicar a o en el campo cient co de la Informtica Terica, un campo clsico y multidisciplinar a o a dentro de los estudios universitarios de Informtica. Es un campo clsico debido no a a slo a su antigedad (anterior a la construccin de los primeros ordenadores) sino, o u o sobre todo, a que sus contenidos principales no dependen de los rpidos avances a tecnolgicos que han hecho que otras ramas de la Informtica deban adaptarse a los o a nuevos tiempos a un ritmo vertiginoso. Es multidisciplinar porque en sus cimientos encontramos campos tan aparentemente dispares como la ling ustica, las matemticas a o la electrnica. o El hecho de que esta materia no haya sufrido grandes cambios en las ultimas dcadas no le resta un pice de inters. El estudio de las mquinas secuenciales que e a e a abarca la teor de autmatas, por una parte, sienta las bases de la algoritmia y a o permite modelar y disear soluciones para un gran nmero de problemas. Por otra n u parte, permite abordar cuestiones de gran inters para un informtico como qu tipo e a e de problemas pueden ser resueltos por un computador o, caso de existir una solucin o computable para un problema, cmo podemos medir la calidad (en trminos de ecao e cia) de dicha solucin. Es decir, la teor de autmatas es la puerta que nos permite o a o la entrada hacia campos tan interesantes como la computabilidad y la complejidad algor tmica. Adems, una de las principales aportaciones del estudio de los lenguajes a formales, sobre todo desde un punto de vista prctico, es su contribucin al diseo de a o n lenguajes de programacin y a la construccin de sus correspondientes traductores. o o En este sentido la asignatura ayudar a conocer con mayor profundidad la estructura a de los lenguajes de programacin y el funcionamiento de los compiladores. o Este manual es el resultado del trabajo que durante varios aos he realizado imparn tiendo la asignatura de Teor de Autmatas y Lenguajes Formales en las titulaciones a o de Informtica de la Universidad de Extremadura. Dicha asignatura es troncal para a los alumnos de Ingenier Informtica y de Ingenier Tcnica en Informtica de Sisa a a e a temas pero tambin puede ser cursada como materia optativa por los alumnos de e Ingenier Tcnica en Informtica de Gestin. Se imparte en el tercer curso de estas a e a o titulaciones. La asignatura se ha diseado teniendo en cuenta las diferentes circunstancias de n los alumnos de las tres titulaciones, as como el tiempo disponible a lo largo del

manuales uex IX

elena jurado mlaga

curso para impartirla. Por tanto, y teniendo en cuenta sobre todo esto ultimo, los contenidos han sido seleccionados de forma realista con la intencin de que puedan o ser abarcados por completo a lo largo del curso acadmico. Por este motivo, la alta e carga formal que suele acompaar a los libros de esta materia ha sido aligerada, n procurando no incluir, siempre que ha sido posible, demostraciones complejas y otras cuestiones formales que har el texto inabordable en una unica asignatura. Como an contrapartida se han intentado presentar los conceptos e ideas bsicos de una manera a intuitiva y clara. Otro de los aspectos que se ha tenido en cuenta al disear los contenidos del n manual ha sido destacar una de las aplicaciones prcticas ms interesantes de esta a a materia: el diseo de lenguajes de programacin y de compiladores. Esto ha motivado n o que, al clsico estudio de la jerarqu para las gramticas formales de Chomsky, de a a a los Autmatas Finitos, de los Autmatas de Pila y de las Mquinas de Turing, se o o a hayan aadido temas como el de las gramticas atribuidas, los reconocedores LR o n a un anexo sobre la generacin automtica de analizadores lxicos y sintcticos. Si bien o a e a ests ultimas cuestiones pueden considerarse al margen de la asignatura, tienen un a claro inters desde el punto de vista prctico. e a Considerando la prxima implantacin de los nuevos planes de estudio dentro del o o espacio europeo de educacin superior, se ha incluido un apartado en el que se describe o el plan docente de la asignatura, indicando la metodolog docente, el plan de trabajo a del estudiante, as como las competencias espec cas de la materia y de la titulacin. o En este sentido, y teniendo en cuenta que el trabajo no presencial del estudiante tiene cada vez ms relevancia en el nuevo marco de las enseanzas universitarias, a n consideramos que este manual puede convertirse en una herramienta de gran utilidad para los estudiantes, como complemento a los apuntes y como material de ayuda en la preparacin previa de los temas. o Quisiera terminar este prlogo agradeciendo la colaboracin de los estudiantes que o o han cursado esta asignatura durante los ultimos aos. Sus comentarios y sugerencias n han resultado imprescindibles para mejorar los contenidos y el diseo de las primeras n versiones de este manual. Elena Jurado Mlaga a

manuales uex X

Teora de auTmaTas y lenguajes formales

Plan Docente
I. Descripcin y contextualizacin o o
Identicacin y caracter o sticas de la materia
Denominacin: Teor de Autmatas y Lenguajes Formales o a o Curso y Titulaciones: 3o Ingenier Informtica, a a 3o Ingenier Tcnica en Informtica de Sistemas, a e a 3o Ingenier Tcnica en Informtica de Gestin a e a o Area: Lenguajes y Sistemas Informticos a Departamento: Ingenier de Sistemas Informticos y Telemticos a a a Tipo: Troncal en Ingenier Informtica, a a Troncal en Ingenier Tcnica en Informtica de Sistemas, a e a Optativa en Ingenier Tcnica en Informtica de Gestin a e a o Coecientes: Practicidad: 3 (Medio) Agrupamiento: 3 (Medio) Duracin: Anual, 8.18 crditos ECTS (204.5 horas) o e Distribucin ECTS: o Grupo Grande: 62 horas (30.31 %) Seminario-Laboratorio: 20 horas (9.77 %) Tutor ECTS: 10 horas (4.88 %) a No presencial: 112.5 horas (55.01 %) Descriptores (seg n BOE): Teor de Autmatas y Lenguajes Formales u a o

I. Perl Profesional de Desarrollo Software II. Perl Profesional de Sistemas III. Perl Profesional de Gestin y Explotacin de Tecnolog de la Informacin o o as o

manuales uex XI

Perles (y subperles) profesionales de la titulacin o

elena jurado mlaga

Competencias Espec cas de la Titulacin (y perles relao cionados)


1. Aprender de manera autnoma nuevos conocimientos y tcnicas adecuados para o e la concepcin, el desarrollo o la explotacin de sistemas informticos.(Todos) o o a 2. Comunicar de forma efectiva, tanto por escrito como oral, conocimientos, procedimientos, resultados e ideas relacionadas con las TIC y, concretamente de la Informtica, conociendo su impacto socioeconmico.(Todos) a o 3. Comprender la responsabilidad social, tica y profesional, y civil en su caso, de e la actividad del Ingeniero en Informtica y su papel en el mbito de las TIC y a a de la Sociedad de la Informacin y del Conocimiento.(Todos) o 4. Concebir y llevar a cabo proyectos informticos utilizando los principios y a metodolog propios de la ingenier as a.(I,II) 5. Disear, desarrollar, evaluar y asegurar la accesibilidad, ergonom usabilidad n a, y seguridad de los sistemas, aplicaciones y servicios informticos, as como de la a informacin que proporcionan, conforme a la legislacin y normativa vigentes.(I) o o 6. Denir, evaluar y seleccionar plataformas hardware y software para el desarrollo y la ejecucin de aplicaciones y servicios informticos de diversa complejidad.(I,II) o a 7. Disponer de los fundamentos matemticos, f a sicos, econmicos y sociolgicos o o necesarios para interpretar, seleccionar, valorar, y crear nuevos conceptos, teor as, usos y desarrollos tecnolgicos relacionados con la informtica, y su aplicacin.(Todos) o a o 8. Concebir, desarrollar y mantener sistemas y aplicaciones software empleando diversos mtodos de ingenier del software y lenguajes de programacin adee a o cuados al tipo de aplicacin a desarrollar manteniendo los niveles de calidad o exigidos.(I) 9. Concebir y desarrollar sistemas o arquitecturas informticas centralizadas o a distribuidas integrando hardware, software y redes.(II) 10. Proponer, analizar, validar, interpretar, instalar y mantener soluciones informticas a en situaciones reales en diversas reas de aplicacin dentro de una organia o zacin.(Todos) o

manuales uex

11. Concebir, desplegar, organizar y gestionar sistemas y servicios informticos en a contextos empresariales o institucionales para mejorar sus procesos de negocio, responsabilizndose y liderando su puesta en marcha y mejora continua, a as como valorar su impacto econmico y social.(III) o

XII

Teora de auTmaTas y lenguajes formales

II. Objetivos. Competencias Espec cas de la Materia (y relacin con CET) o


1. Ser capaz de realizar operaciones bsicas con cadenas y con lenguajes.(7) a 2. Conocer los diferentes tipos de gramticas y de lenguajes que forman la jerara qu de Chomsky y su utilidad en el diseo de los lenguajes de programacin y a n o sus traductores.(7) 3. Saber cmo reconocer de que tipo es una determinada gramtica o lenguaje.(7) o a 4. Ser capaz de construir autmatas para resolver diferentes tipos de problemas y o para reconocer diferentes lenguajes.(7,11) 5. Conocer el funcionamiento de diferentes tipos de autmatas y entender el tipo o de problemas que cada uno puede resolver.(7,11) 6. Conocer y ser capaz de utilizar mtodos que permitan construir, dado un e lenguaje regular: gramticas que los generan, expresiones regulares que los rea presentan y autmatas nitos que los reconocen.(7) o 7. Conocer el esquema funcional de un traductor.(4) 8. Conocer los diferentes aspectos lxicos, sintcticos y semnticos que hay que e a a tener en cuenta a la hora de disear lenguajes formales y traductores para esos n lenguajes.(4,8) 9. Ser capaz de construir un traductor.(1,2,4,8,10) 10. Ser capaz de disear una gramtica para un lenguaje de programacin sencillo.(4,7) n a o 11. Conocer metalenguajes que permitan describir lenguajes regulares y lenguajes independientes del contexto.(1,8) 12. Saber utilizar herramientas que permitan generar automticamente analizadoa res lxicos y sintcticos.(1,8) e a 13. Ser capaz de calcular la complejidad espacial y temporal de mquinas de Turing a sencillas.(5,6,10,11) 14. Entender el concepto de recursividad y de calculabilidad.(5,6,7,10,11) 15. Ser capaz de demostrar que algunas funciones son recursivas primitivas o recursivas.(5,6,7) 16. Entender el concepto y conocer ejemplos de problemas de la clase P, NP o NP-completo.(5,6,7)

XIII

manuales uex

elena jurado mlaga

III. Contenidos
Los contenidos de la asignatura son los que se describen a lo largo de este docu mento (ver Indice General ).

Interrelaciones
1. Las asignaturas de 1o curso, Elementos de Programacin y Laboratorio o de Programacin I, y de 2o curso, Estructuras de Datos y Algoritmos y o Laboratorio de Programacin II, son requisitos para esta asignatura ya que o proporcionan los conocimientos sobre programacin necesarios para abordar la o tarea de la construccin de un compilador. Tambin permiten que el alumno o e conozca con antelacin conceptos bsicos para la asignatura como el de lenguaje o a de programacin y el de compilador. o 2. El concepto de complejidad algor tmica se ha tratado en asignaturas como Elementos de Programacin y Estructuras de Datos y Algoritmos. En o nuestra asignatura ste se relaciona con el concepto de Maquina de Turing. e 3. La asignatura de Teor de Autmatas y Lenguajes Formales debe sentar las a o bases para que los alumnos de Ingenier Informtica puedan abordar con a a garant la asignatura de 5o curso Procesadores de Lenguajes as

IV. Metodolog docente y plan de trabajo del esa tudiante


En esta seccin se describe la metodolog utilizada para cada uno de los temas o a que aparecen en este manual. A cada una de las actividades programadas se le asigna un determinado tipo y el nmero de horas estimadas de dedicacin del estudiante. A u o continuacin se indican las siglas utilizadas para representar los diferentes tipos de o actividades: GG Grupo grande S Seminario-Laboratorio Tut Tutor ECTS a NO No Presencial. Tema 1. Preliminares (Objetivos: 1,7)

manuales uex

Lectura y estudio (previo y/o posterior)(NP): 1h. Explicacin, discusin y ejemplicacin en clase(GG): 3h. o o o Realizacin de ejercicios propuestos (NP): 3h. o Tema 2. Lenguajes y Gramticas Formales (Objetivos: 1,2) a

XIV

Teora de auTmaTas y lenguajes formales

Lectura y estudio (previo y/o posterior)(NP): 2h. Explicacin, discusin y ejemplicacin en clase(GG): 6h. o o o Explicacin de cuestiones y ejercicios relacionados con la teor o a(GG): 2h. Realizacin de ejercicios propuestos (NP): 10h. o Tema 3. Expresiones y gramticas regulares (Objetivos: 1,3,8,10,12,11) a Lectura y estudio (previo y/o posterior)(NP): 2h. Explicacin, discusin y ejemplicacin en clase(GG): 1h. o o o Explicacin de cuestiones y ejercicios relacionados con la teor o a(GG): 2h. Prcticas (S): 2h. a Revisin de las actividades prcticas (Tut): 2h. o a Realizacin de ejercicios propuestos (NP): 4h. o Tema 4. Autmatas Finitos (Objetivos: 3,4,5,8,6,12,11) o Lectura y estudio (previo y/o posterior)(NP): 10h. Explicacin, discusin y ejemplicacin en clase(GG): 10h. o o o Explicacin de cuestiones y ejercicios relacionados con la teor o a(GG): 7h. Prcticas (S): 6h. a Revisin de las actividades prcticas (Tut): 2h. o a Realizacin de ejercicios propuestos (NP): 20h. o Evaluacin del primer bloque temtico o a Tema 5. Gramticas Independientes del Contexto (GIC) y Autmatas de Pila a o (Objetivos: 3,4,5,8,9,10,12,11) Lectura y estudio (previo y/o posterior)(NP): 10h. Explicacin, discusin y ejemplicacin en clase(GG): 6h. o o o Explicacin de cuestiones y ejercicios relacionados con la teor o a(GG): 5h. Prcticas (S): 10h. a Revisin de las actividades prcticas (Tut): 3h. o a Realizacin de ejercicios propuestos (NP): 12h. o Tema 6. Gramticas Atribuidas (Objetivos: 7,8,10,12,11) a Lectura y estudio (previo y/o posterior)(NP): 3h. Explicacin, discusin y ejemplicacin en clase(GG): 2h. o o o

XV

manuales uex

elena jurado mlaga

Explicacin de cuestiones y ejercicios relacionados con la teor o a(GG): 2h. Prcticas (S): 2h. a Revisin de las actividades prcticas (Tut): 3h. o a Realizacin de ejercicios propuestos (NP): 5h. o Tema 7. Mquinas de Turing(MT) (Objetivos: 4,5) a Lectura y estudio (previo y/o posterior)(NP): 4h. Explicacin, discusin y ejemplicacin en clase(GG): 5h. o o o Explicacin de cuestiones y ejercicios relacionados con la teor o a(GG): 4h. Realizacin de ejercicios propuestos (NP): 14h. o Tema 8. Gramticas de tipo 0 y 1 (Objetivos: 3) a Lectura y estudio (previo y/o posterior)(NP): 2h. Explicacin, discusin y ejemplicacin en clase(GG): 2h. o o o Realizacin de ejercicios propuestos (NP): 2h. o Tema 9. Computabilidad y Mquinas de Turing (Objetivos: 13,14,15) a Lectura y estudio (previo y/o posterior)(NP): 2h. Explicacin, discusin y ejemplicacin en clase(GG): 2h. o o o Explicacin de cuestiones y ejercicios relacionados con la teor o a(GG): 1h. Realizacin de ejercicios propuestos (NP): 4h. o Tema 10. Introduccin a la Complejidad Computacional (Objetivos: 16) o Lectura y estudio (previo y/o posterior)(NP): 2h. Explicacin, discusin y ejemplicacin en clase(GG): 2h. o o o Realizacin de ejercicios propuestos (NP): 2h. o

V. Evaluacin o
Criterios de Evaluacin o
1. Aplicar los conceptos y mtodos estudiados para la resolucin de problemas e o relacionados con el diseo de autmatas y gramticas. n o a En este aspecto, las principales habilidades a tener en cuenta son: a) Denir formalmente un lenguaje.

XVI

manuales uex

Teora de auTmaTas y lenguajes formales

b) Ser capaz de determinar el tipo al que pertenece un lenguaje. c) Ser capaz de convertir un Autmata Finito No Determinista en Autmata o o Finito Determinista. d ) Disear una gramtica a partir del autmata que reconoce al lenguaje que n a o sta genera. e e) Construir el autmata que reconoce a un determinado lenguaje. o f ) Disear una mquina de Turing que resuelva un problema dado o que n a reconozca o genere un lenguaje determinado. g) Ser capaz de probar que una funcin es recursiva primitiva o -recursiva. o 2. Disear un lenguaje formal y construir, utilizando las herramientas adecuadas, n un traductor para dicho lenguaje.

Actividades e instrumentos de evaluacin o


Examen parcial Prueba de desarrollo escrito con 1 pregunta dirigida a la comprensin de conceptos y 4 o 5 a la aplicacin los mtodos para resolver problemas o o e relacionados con el diseo de lenguajes y autmatas (Temas 1-4). (20 %) n o Examen nal Prueba de desarrollo escrito con 1 pregunta dirigida a la comprensin de conceptos y 4 o 5 a la aplicacin los mtodos para resolver problemas o o e relacionados con el diseo de lenguajes y autmatas. (55 %) n o Seminarios y Tutor ECTS Revisin y anlisis del trabajo no presencial del as o a alumno as como del trabajo desarrollado en los Seminarios. 1. Revisin de ejercicios prcticos a realizar por el alumno durante los Semio a narios. (5 %) 2. Revisin del lenguaje y del traductor construido por el alumno, haciendo o especial hincapi en un correcto diseo de ambos. Prueba en la que el e n alumno debe realizar una sencilla ampliacin de su trabajo prctico con el o a objetivo de valorar el control que tiene sobre su trabajo. (20 %)

XVII

manuales uex

Indice General
1. Preliminares 1.1. Antecedentes histricos y conceptos bsicos . o a 1.2. Desarrollo de la asignatura . . . . . . . . . . 1.3. Conceptos bsicos sobre compiladores . . . . a 1.3.1. Componentes de un compilador . . . 5 5 8 10 11 15 15 16 17 19 19 20 21 22 24 24 25 25 26 26 26 29 33 33 34 35 36 38

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

2. Lenguajes y Gramticas Formales a 2.1. Deniciones bsicas . . . . . . . . . . . . . . . . . . a 2.2. Operaciones con palabras . . . . . . . . . . . . . . . 2.3. Lenguajes y operaciones con lenguajes . . . . . . . 2.4. Concepto de gramtica formal . . . . . . . . . . . . a 2.4.1. Deniciones previas . . . . . . . . . . . . . . 2.4.2. Ejemplo con un lenguaje natural(castellano) 2.4.3. Ejemplo en un lenguaje articial . . . . . . 2.4.4. Denicin de gramtica formal . . . . . . . o a 2.5. Clasicacin de las gr. formales . . . . . . . . . . . o 2.5.1. Gramticas de tipo 0 . . . . . . . . . . . . . a 2.5.2. Gramticas de tipo 1 . . . . . . . . . . . . . a 2.5.3. Gramticas de tipo 2 . . . . . . . . . . . . . a 2.5.4. Gramticas de tipo 3 . . . . . . . . . . . . . a 2.6. Gramticas equivalentes . . . . . . . . . . . . . . . a 2.6.1. Simplicacin de gramticas . . . . . . . . . o a 2.7. Problemas y cuestiones . . . . . . . . . . . . . . . . 3. Expresiones y gramticas regulares a 3.1. Denicin de expresin regular . . . o o 3.2. Algebra de las expresiones regulares 3.3. Denicin de gramtica regular . . o a 3.4. Ejemplos . . . . . . . . . . . . . . . 3.5. Problemas . . . . . . . . . . . . . . 1

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

Manuales uex 1

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

elena JuRaDO MlaGa


INDICE GENERAL 39 39 40 40 43 43 47 50 51 52 55 55 58 62 65 65 66 70 73 74 74 77 78 80 81 83 87 89 93 94 95 97 97 99 100 100 101 104

4. Autmatas Finitos o 4.1. Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o 4.2. Denicin de Autmata Finito Determinista . . . . . . . . . . . . o o 4.3. Representacin de Autmatas . . . . . . . . . . . . . . . . . . . . o o 4.4. Los AFD como reconocedores de lenguajes . . . . . . . . . . . . . 4.5. Minimizacin de un AFD . . . . . . . . . . . . . . . . . . . . . . . o 4.6. Autmatas Finitos No Deterministas(AFND) . . . . . . . . . . . o 4.7. Lenguaje aceptado por un AFND . . . . . . . . . . . . . . . . . . 4.8. Simulacin de un AFD y AFND . . . . . . . . . . . . . . . . . . . o 4.9. Paso de un AFND a AFD . . . . . . . . . . . . . . . . . . . . . . 4.10. Relacin entre AF, gr. y exp. reg. . . . . . . . . . . . . . . . . . . o 4.10.1. Construccin de la expresin regular reconocida por un AF o o 4.10.2. Construccin del AF que reconoce una expresin regular . o o 4.10.3. Relacin entre A.F. y gramticas regulares . . . . . . . . . o a 4.11. L mites para los leng. regulares . . . . . . . . . . . . . . . . . . . 4.11.1. El lema del bombeo(pumping lemma) . . . . . . . . . . . . 4.11.2. El teorema de Myhill-Nerode . . . . . . . . . . . . . . . . 4.12. Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5. G.I.C y Autmatas de Pila o 5.1. Denicin de G.I.C. . . . . . . . . . . . . . . . . . . . . o 5.2. Autmatas de Pila . . . . . . . . . . . . . . . . . . . . o 5.3. Arboles de derivacin . . . . . . . . . . . . . . . . . . . o 5.3.1. Ambig edad. . . . . . . . . . . . . . . . . . . . u 5.4. Reconocimiento descendente . . . . . . . . . . . . . . . 5.4.1. Simplicacin de las GIC . . . . . . . . . . . . . o 5.4.2. Reconocedores LL(1) . . . . . . . . . . . . . . . 5.5. Reconocimiento ascendente . . . . . . . . . . . . . . . . 5.5.1. Construccin de la Tabla de Acciones . . . . . . o 5.6. Propiedades de los L.I.C. . . . . . . . . . . . . . . . . . 5.6.1. El lema del bombeo para LIC(pumping lemma) 5.7. Problemas . . . . . . . . . . . . . . . . . . . . . . . . . 6. Gramticas Atribuidas a 6.1. Concepto de Semntica y de Gramtica a a 6.2. Atributos heredados y sintetizados . . 6.3. Gramticas S-atribuidas y L-Atribuidas a 6.3.1. Gramticas S-atribuidas . . . . a 6.3.2. Gramticas L-atribuidas . . . . a 6.4. Problemas . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

Manuales uex

Atribuida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

TeORa De auTMaTas Y lenGuaJes FORMales


INDICE GENERAL 7. Mquinas de Turing a 7.1. Introduccin. Antecedentes histricos . . . . . . . . . . . . . . . . . . o o 7.2. Denicin y ejemplos de M.T.s . . . . . . . . . . . . . . . . . . . . . o 7.3. Restricciones a la M.T. . . . . . . . . . . . . . . . . . . . . . . . . . . 7.3.1. M.T. con alfabeto binario . . . . . . . . . . . . . . . . . . . . 7.3.2. M.T. con la cinta limitada en un sentido . . . . . . . . . . . . 7.3.3. M.T. con restricciones en cuanto a las operaciones que realiza simultneamente . . . . . . . . . . . . . . . . . . . . . . . . . a 7.4. Modicaciones de la M.T. . . . . . . . . . . . . . . . . . . . . . . . . 7.4.1. Almacenamiento de informacin en el control nito . . . . . . o 7.4.2. Pistas m ltiples . . . . . . . . . . . . . . . . . . . . . . . . . . u 7.4.3. S mbolos de chequeo . . . . . . . . . . . . . . . . . . . . . . . 7.4.4. Mquinas multicinta . . . . . . . . . . . . . . . . . . . . . . . a 7.4.5. M.T. no determinista . . . . . . . . . . . . . . . . . . . . . . . 7.5. Tcnicas para la construccin de M.T. . . . . . . . . . . . . . . . . . e o 7.6. La M.T. Universal . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.7. La M.T. como generadora de lenguajes . . . . . . . . . . . . . . . . . 7.8. La tesis de Church-Turing . . . . . . . . . . . . . . . . . . . . . . . . 7.9. Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8. Gramticas de tipo 0 y 1 a 8.1. Gramticas de tipo 0 . . . . . . . a 8.2. Lenguajes de tipo 0 . . . . . . . . 8.3. El problema de la parada . . . . . 8.4. Lenguajes y gramticas de tipo 1 a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3 105 105 107 110 111 112 112 113 113 114 114 115 116 116 118 119 120 120 123 123 124 126 126 129 129 131 132 134 134 137 137 138 141

9. Computabilidad y Mquinas de Turing a 9.1. Funciones calculables . . . . . . . . . . 9.2. Funciones recursivas . . . . . . . . . . 9.2.1. Funciones recursivas primitivas 9.2.2. Funciones -recursivas . . . . . 9.3. Problemas . . . . . . . . . . . . . . . .

10.Introduccin a la Complejidad Computacional o 10.1. Complejidad y Mquinas de Turing . . . . . . . . . . . . . . . . . . . a 10.2. Medidas de complejidad algortmica . . . . . . . . . . . . . . . . . . . 10.3. Problemas P, NP y NP-completos . . . . . . . . . . . . . . . . . . . .

A. Generacin automtica de analizadores o a 143 A.1. Generador de analizadores lxicos . . . . . . . . . . . . . . . . . . . . 143 e A.1.1. Cmo utilizar PCLEX . . . . . . . . . . . . . . . . . . . . . . 144 o A.1.2. Estructura de un programa Lex . . . . . . . . . . . . . . . . . 144

Manuales uex 3

elena JuRaDO MlaGa


INDICE GENERAL A.1.3. Cmo representar una expresin regular o o A.1.4. Variables y procedimientos predenidos . A.1.5. Condiciones de comienzo . . . . . . . . . A.1.6. Acciones . . . . . . . . . . . . . . . . . . A.2. Generador de analizadores sintcticos . . . . . . a A.2.1. Cmo utilizar PCYACC . . . . . . . . . o A.2.2. Estructura de un programa para YACC . A.2.3. Gramticas atribuidas . . . . . . . . . . a A.2.4. Prioridad y asociatividad de operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 147 148 148 149 150 151 152 152

Manuales uex 4

Tema 1 Preliminares
Contenido
1.1. Antecedentes histricos y conceptos bsicos . . . . . . . o a 1.2. Desarrollo de la asignatura . . . . . . . . . . . . . . . . . . 1.3. Conceptos bsicos sobre compiladores . . . . . . . . . . . a 5 8 10

En este primer tema de la asignatura pretendemos sentar las bases de la misma y explicar cul va a ser su estructura. En la seccin 1.1 explicaremos cuales son los a o temas centrales sobre los que va a girar la asignatura, as como los antecedentes histricos sobre los que se han desarrollado estos temas, mencionando los personajes o que ms han inuido en su nacimiento. La estructura de la asignatura es el contenido a fundamental de la seccin 1.2 en la que tambin se detallan algunas de las aplicaciones o e ms interesantes de los conceptos tericos que estudiaremos. Teniendo en cuenta que a o probablemente la aplicacin prctica ms interesante de esta asignatura es el dise o o a a n de lenguajes de computacin y la construccin de sus correspondientes traductores, o o en la seccin 1.3 se sentarn las bases que permitirn entender la estructura de un o a a compilador y las tareas que debe llevar a cabo.

1.1.

Antecedentes histricos y conceptos bsicos o a

Manuales uex 5

La mayor parte del conocimiento cient co es el resultado de muchos a os de n investigacin, con frecuencia sobre temas que aparentemente no tienen una relacin o o directa. Como veremos, esto sucede tambin con un campo como la Informtica Terie a o ca (mbito en el que se enmarca la asignatura de Teor de Autmatas y Lenguaa a o jes Formales). Esta materia se ha desarrollado gracias a la conuencia de campos muy diferentes, como son: las matemticas, la teor de mquinas, la ling a a a ustica, etc. Podemos considerarla, por tanto, como una materia multidisciplinar. En este apartado pretendemos explicar de manera intuitiva los conceptos bsicos que constituyen las a

elena JuRaDO MlaGa

TEMA 1. PRELIMINARES

Manuales uex 6

bases de la asignatura as como los campos cient cos que han inuido fundamentalmente en el desarrollo de esta materia y que nos ayudarn a entender sus aplicaciones a ms importantes. a Veamos, en primer lugar, la relacin entre conceptos que trataremos a lo largo o de todo el temario: lenguaje, gramtica y autmata. Toda comunicacin conllea o o va la utilizacin de un lenguaje, que podemos denir como un conjunto de palabras o (tambin llamadas cadenas) formadas por s e mbolos de un alfabeto. Las gramticas a permitirn denir la estructura de los lenguajes, es decir, proporcionarn las formas a a vlidas en las que se pueden combinar los s a mbolos del alfabeto para construir cadenas correctas. Una mquina abstracta o autmata es un dispositivo terico que a o o recibe como entrada una cadena de s mbolos y los procesa, cambiando de estado, de manera que genera una determinada salida. Los autmatas pueden servir, entre otras o cosas, para determinar si una palabra pertenece o no a un determinado lenguaje. Por lo tanto, las gramticas nos permitirn denir lenguajes y los autmatas podrn rea a o a conocer las palabras de dichos lenguajes. A pesar de la conexin que existe entre estos o conceptos, los trabajos iniciales sobre autmatas y lenguajes tienen, como veremos a o continuacin, un origen diferente. o Para encontrar los principios de la Informtica Terica debemos remontarnos a a o los a os 30, dcada en la que el mundo de las matemticas se hallaba ocupado, sobre n e a todo, en temas como la lgica y la denicin de sistemas axiomticos. o o a El mtodo axiomtico requiere una coleccin de enunciados bsicos, llamados e a o a axiomas, que describen las propiedades fundamentales del sistema que se estudia. A partir de estos axiomas, se derivan enunciados adicionales, llamados teoremas, aplicando secuencias nitas de reglas de inferencia. Una ventaja del mtodo axiomtico es que ofrece un modelo de razonamiento e a deductivo en el cual todas las suposiciones estn aisladas en los axiomas iniciales y a las reglas de inferencia. Cualquier enunciado que se derive posteriormente ser una a consecuencia de estas suposiciones. A principios del siglo XX, muchos matemticos cre que era posible encontrar un a an unico sistema axiomtico en el que podr basarse todas las matemticas. Su meta a an a era encontrar un conjunto de axiomas y reglas de inferencia correctos de manera que las matemticas pudieran reducirse a un sistema computacional con el cual pudiera a deducirse la veracidad o falsedad de cualquier enunciado matemtico. Uno de los a principales defensores de esta idea era el conocido matemtico alemn Hilbert. a a Sin embargo, en 1931, el austriaco Kurt Gdel public el Teorema de la ino o completitud, en el que demostraba que era imposible la completa axiomatizacin o de las matemticas. Este teorema increment el debate por el poder de los mtodos a o e axiomticos y los procesos computacionales. a En 1937, el matemtico ingls Alan Turing, en su art a e culo Sobre los nmeros u computables, present la conocida Mquina de Turing(M.T.), una entidad matemtica o a a

TeORa De auTMaTas Y lenGuaJes FORMales


1.1. ANTECEDENTES HISTORICOS Y CONCEPTOS BASICOS

a o abstracta con la que se formaliz el concepto de algoritmo1 , adems demostr que o muchos problemas perfectamente denidos no pueden ser resueltos mediante una M.T., es decir, no son computables y de esta manera ratic la teor de Gdel. Esta o a o mquina ser la precursora, desde un punto de vista terico, de los computadores que a a o se construyeron durante la siguiente dcada. La Mquina de Turing tiene el poder e a computacional ms alto conocido hasta el momento, es decir, es capaz de resolver a cualquier problema que tenga una solucin computacional. o Podemos considerar todo esto como el primer eslabn dentro del campo de la o Informtica Terica. El segundo eslabn se ubicar en un campo muy cercano a la a o o a Electrnica en el que el matemtico Shannon estableci las bases para la aplicacin o a o o de la lgica matemtica al dise o de los circuitos combinatorios y secuenciales. Las o a n ideas de Shannon derivar en la formalizacin de una teor de mquinas secuenan o a a ciales y autmatas, cuyo principal objetivo era representar de manera formal el como portamiento de un determinado dispositivo electrnico o mecnico. Los autmatas o a o son, en un sentido amplio, sistemas que aceptan se ales del medio que les rodea, camn bian de estado como consecuencia de estas se ales y trasmiten otras se ales al medio. n n En este sentido, un electrodomstico com n, una central telefnica, un ordenador, e e u o incluso ciertas facetas del comportamiento de los seres vivos pueden modelarse mediante autmatas. A nales de los aos 50 se comenz a estudiar la utilidad de los o n o autmatas en relacin con los lenguajes de programacin y su proceso de traduccin. o o o o La Teor de Autmatas estudia diferentes niveles de autmatas entre los que a o o podemos destacar, de una parte, los Autmatas Finitos por constituir el grupo ms o a sencillo de autmatas y, de otra, las Mquinas de Turing que, por el contrario, son o a los autmatas ms complejos y con mayor poder computacional. Estos dos tipos de o a autmatas representan los dos extremos de la jerarqu otros niveles intermedios los o a, encontramos en los Autmatas de Pila y en los Autmatas Linealmente Acotados. o o Bsicamente, la diferencia principal entre estos autmatas estriba en la utilizacin o a o o no de memoria auxiliar y en la forma de acceso a dicha memoria. Para llegar al tercer eslabn de la Informtica Terica hay que saltar al campo de la o a o ling ustica. En la dcada de los a os 50, el ling ista y pensador Noam Chomsky, en e n u un intento de formalizar los lenguajes naturales, estableci las bases de la ling o ustica matemtica o formal y con ello proporcion una poderosa herramienta que facilit la a o o denicin de los primeros lenguajes de programacin, que empezaban a surgir en esa o o poca. e

1 Un algoritmo puede considerarse como un mtodo genrico que, en un n mero nito de pasos e e u o computaciones, permite resolver un determinado problema. Recordemos que la palabra algoritmo debe su nombre a un matemtico persa Abu Jafar Mohamed ibn Musa al-Jowizm autor de un a a , tratado de aritmtica publicado en el a o 825. e n

Manuales uex 7

elena JuRaDO MlaGa

TEMA 1. PRELIMINARES

1.2.

Desarrollo de la asignatura

Chomsky clasic las gramticas formales (y los lenguajes que stas generan) de o a e acuerdo a una jerarqu de cuatro niveles representada en la tabla 1.1. Sorprendentea mente, es posible establecer una relacin biun o voca entre los diferentes niveles de la jerarqu de Chomsky y cuatro niveles de una jerarqu denida entre los diferentes a a tipos de autmatas. A cada nivel de gramtica se le puede asociar de forma natural o a un conjunto de lenguajes que sern los que esas gramticas generan, pero adems, se a a a le puede asociar una clase de autmatas formada por aquellos que podrn reconocer o a a dichos lenguajes. La siguiente gura describe la relacin que hay entre los diferentes niveles de o gramticas de la jerarqu de Chomsky, los lenguajes que generan y las mquinas que a a a reconocen estos lenguajes.
Lenguajes
Lenguajes recursivamente enumerables Lenguajes recursivos Lenguajes Dependientes del Contexto Lenguajes Independientes del Contexto Leng. LR(k) Leng. LR(1) Leng. LL(k) Leng. LL(1) Leng. (expresiones) regulares Gr. tipo 3 Autmatas Finitos Gr. tipo 2 Autmatas de Pila

Gramticas

Autmatas

Gr. tipo 0 Gr. tipo 1

Mquinas de Turing Autmatas Linealmente Acotados

Figura 1.1: Jerarqu de gramticas, lenguajes y autmatas a a o Cada nivel de lenguaje se corresponde con un tipo de autmata. Por ejemplo, o dado un lenguaje de tipo 3 siempre ser posible encontrar un Autmata Finito que a o reconozca dicho lenguaje, es decir, que permita determinar si una determinada palabra pertenece o no al lenguaje. Si el lenguaje es de tipo 2 ser necesario utilizar un a autmata ms complejo, concretamente un Autmata de Pila. La gura 1.1, adems o a o a de sintetizar la Jerarqu de Chomsky, presenta un sencillo esquema de los temas a a abordar durante el curso. Comenzaremos con el estudio de los lenguajes ms sencillos a

Manuales uex 8

TeORa De auTMaTas Y lenGuaJes FORMales

1.2. DESARROLLO DE LA ASIGNATURA

(los de tipo 3) y de los autmatas asociados a ellos, para acabar con el estudio de o los lenguajes de tipo 0 y de las M.T. Los nombres de los lenguajes de la jerarqu a de Chomsky aparecen destacados en esta gura, pero tambin aparecen otros cone juntos de lenguajes que representan niveles intermedios de esta jerarqu y que por a su inters sern tambin estudiados en la asignatura. Concretamente, los lenguajes e a e LL(1) y LR(1), incluidos en el conjunto de los lenguajes independientes del contexto se estudiarn en el tema 5 y los lenguajes recursivos sern tratados en el tema 8. a a Como muestra la gura 1.1, en los tres conceptos estudiados (gramticas, lenguaa jes y autmatas) cada nivel contiene al anterior. Por ejemplo, cualquier lenguaje de o tipo 3 es a su vez un lenguaje de tipo2 (sin embargo, comprobaremos que lo contrario no es cierto), es decir (L3L2L1L0). De la misma forma, un Autmata Finito o puede considerarse como un caso particular de Autmata de Pila y ste como un o e caso particular de Mquina de Turing. a A continuacin comentaremos cules son las principales aplicaciones de los temas o a que se estudiarn en esta asignatura. a El estudio de las gramticas formales ser una herramienta muy util para el a a dise o de los lenguajes de programacin. El estudio de determinados autmatas n o o (concretamente los autmatas nitos y los de pila) permitir construir de mao a nera sistemtica algunos de los componentes bsicos de los compiladores. a a Los autmatas nitos se pueden aplicar con xito en el procesamiento del o e lenguaje natural, por ejemplo, en la categorizacin gramatical de las palabras o en una oracin o en la extraccin de informacin a partir de grandes vol menes o o o u de texto. Tambin pueden ser utilizados para manipular cheros de texto que e almacenan una informacin estructurada, por ejemplo, con objeto de modicar o dicha estructura. Los autmatas, en general, tienen una gran aplicacin en el mundo industrial, o o ya que permiten modelar el comportamiento de cualquier dispositivo electromecnico: una cadena de montaje, un robot, un electrodomstico, etc. Tambin a e e pueden ser utilizados para el reconocimiento de patrones y para el diseo de n redes neuronales. Los Autmatas Finitos ayudan a dise ar software que como n pruebe la correccin de cualquier sistema que tenga un n mero nito de estados: o u protocolos de comunicacin, protocolos para el intercambio seguro de informao cin, etc. Tambin se utilizan en el dise o y la vericacin del comportamiento o e n o de circuitos digitales. Los lenguajes regulares se pueden utilizar para especicar argumentos en determinados comandos de un sistema operativo o de un sistema de bsqueda de u informacin. o

Manuales uex 9

elena JuRaDO MlaGa

10

TEMA 1. PRELIMINARES Los autmatas son tambin esenciales para el estudio de los l o e mites de la computacin. En este terreno, existen dos cuestiones importantes que nos podemos o plantear y que se estudiarn en los ultimos temas de la asignatura: a 1. Qu puede hacer un computador? Utilizaremos el concepto de computae bilidad para aplicarlo a los problemas que puede resolver un computador. 2. Qu puede hacer un computador ecientemente? Diremos que un problee ma es tratable, si un computador puede resolverlo en un tiempo que crezca lentamente al aumentar el tamao de los datos de entrada. n

1.3.

Conceptos bsicos sobre compiladores a

Manuales uex

Salvo los dos ultimos temas que se centrarn en la teor de la computacin, a a o el planteamiento del resto de los temas estar, en general, enfocado al diseo de a n lenguajes de programacin y a la construccin de compiladores, teniendo en cuenta o o que es sta una de las aplicaciones ms interesantes de los conceptos tericos tratados e a o en esta asignatura. Por este motivo, en esta seccin se introducen conceptos muy o elementales sobre el proceso de traduccin de los lenguajes de programacin. o o Un traductor es un programa que recibe como entrada un texto escrito en un lenguaje, llamado fuente, y genera como salida otro texto equivalente pero escrito en un lenguaje diferente denominado objeto. En el caso de que el lenguaje fuente sea un lenguaje de programacin de alto o nivel y el objeto sea un lenguaje de bajo nivel (ensamblador o cdigo mquina), a o a dicho traductor se le denomina compilador. Anlogamente, un ensamblador es un a traductor cuyo lenguaje fuente es el lenguaje ensamblador. A diferencia de los programas mencionados anteriormente, un intrprete es un e traductor que no genera un programa en cdigo objeto, sino que toma una sentencia o del programa fuente en un lenguaje de alto nivel, la traduce y la ejecuta directamente. En los primeros lenguajes, y debido a la escasez de memoria de los ordenadores de la poca, se impuso la utilizacin de intrpretes frente a la de compiladores, pues e o e el programa fuente y el intrprete juntos requer menos memoria que la que era e an necesaria para el proceso de compilacin. Por ello, los primero ordenadores personales o ten instalado habitualmente un intrprete para el lenguaje BASIC. Sin embargo, an e con el tiempo se impusieron los compiladores debido, sobre todo, a la informacin que o ofrec sobre los errores cometidos por el programador, y a una mayor velocidad de an ejecucin del cdigo resultante. A modo de resumen, los siguientes prrafos indican o o a las ventajas que pueden tener un mtodo de traduccin frente al otro. e o Ventajas del compilador frente al intrprete e El programa se compila una sola vez, pero se puede ejecutar muchas.

10

TeORa De auTMaTas Y lenGuaJes FORMales


1.3. CONCEPTOS BASICOS SOBRE COMPILADORES

11

La ejecucin del programa objeto es mucho ms rpida que la interpretacin o a a o del fuente. El compilador tiene una visin completa del programa, por lo que puede dar o una informacin ms detallada de los errores cometidos por el programador. o a Ventajas del intrprete e El intrprete necesita menos memoria que el compilador. e Permite una mayor interactividad con el cdigo en tiempo de desarrollo. o Un compilador no suele funcionar de manera aislada sino que se apoya en otros programas para conseguir su objetivo. Algunos de estos programas de apoyo se describen a continuacin. El preprocesador se ocupa de incluir cheros, expandir macros, o eliminar comentarios, etc. El enlazador (linker ) construye el chero ejecutable a adin endo al chero objeto las cabeceras necesarias y las funciones de librer utilizadas a por el programa fuente. El depurador permite seguir paso a paso la ejecucin del o programa. Finalmente, muchos compiladores generan un programa en lenguaje ensamblador que debe despus convertirse en un ejecutable mediante la utilizacin de e o un ensamblador.

1.3.1.

Componentes de un compilador

Un compilador es un programa complejo en el que no es fcil distinguir claramente a unas partes de otras. Sin embargo, se ha conseguido establecer una divisin lgica del o o compilador en fases, lo que permite formalizar y estudiar por separado cada una de ellas. En la prctica, estas fases no siempre se ejecutan secuencialmente sino que lo a hacen simultneamente, pudiendo ser unas fases tratadas como subrutinas de otras. a Anlisis lxico El analizador lxico, tambin conocido como scanner, lee los caa e e e racteres del programa fuente, uno a uno, desde el chero de entrada y va formando grupos de caracteres con alguna relacin entre s (tokens). Cada token es tratado coo mo una unica entidad, constituyendo la entrada de la siguiente fase del compilador. Existen diferentes tipos de tokens y a cada uno se le puede asociar un tipo y, en algunos casos, un valor. Los tokens se pueden agrupar en dos categor as: Cadenas espec cas, como las palabras reservadas (if, while, . . .), signos de puntuacin (., ,, =, . . .), operadores aritmticos (+,*, . . .) y lgicos (AND, OR, . . .), o e o etc. Habitualmente, las cadenas espec cas no tienen asociado ning n valor, slo u o su tipo.

Manuales uex 11

elena JuRaDO MlaGa

12

TEMA 1. PRELIMINARES

Cadenas no espec cas, como los identicadores o las constantes numricas o de e texto. Las cadenas no espec cas siempre tienen tipo y valor. Por ejemplo, si dato es el nombre de una variable, el tipo del token ser identicador y su a valor ser dato. a Frecuentemente el analizador lxico funciona como una subrutina del analizador e sintctico. Para el dise o del analizadores lxicos se utilizan los Autmatas Finitos. a n e o Anlisis sintctico El analizador sintctico, tambin llamado parser, recibe como a a a e entrada los tokens que genera el analizador lxico y comprueba si estos tokens van e llegando en el orden correcto. Siempre que no se hayan producido errores, la salida terica de esta fase del compilador ser un arbol sintctico. Si el programa es ino a a correcto se generarn los mensajes de error correspondientes. Para el dise o de los a n analizadores sintcticos se utilizan los Autmatas de Pila. a o Anlisis semntico El analizador semntico trata de determinar si el signicado a a a de las diferentes instrucciones del programa es vlido. Para conseguirlo tendr que a a calcular y analizar informacin asociada a las sentencias del programa, por ejemplo, o deber determinar el tipo de los resultados intermedios de la expresiones, comprobar a que los argumentos de un operador pertenecen al conjunto de los operandos posibles, comprobar que los operandos son compatibles entre si, etc. La salida terica de esta fase ser un rbol semntico. Este es una ampliacin de o a a a o un rbol sintctico en el que cada rama del rbol ha adquirido, adems, el signicado a a a a que debe tener el fragmento de programa que representa. Esta fase del anlisis es a ms dif de formalizar que las dos anteriores y se utilizarn para ello las gramticas a cil a a atribuidas. Generacin de cdigo intermedio Cuando una empresa se dedica a la geno o eracin de compiladores, normalmente trabaja con muchos lenguajes fuentes (m) y o con muchos lenguajes objetos (n) diferentes. Para evitar el tener que construir m*n compiladores, se utiliza un lenguaje intermedio. De esta forma slo hay que construir o m programas que traduzcan cada lenguaje fuente al cdigo intermedio (front ends) o y n programas que traduzcan del lenguaje intermedio a cada lenguaje objeto (back ends). La utilizacin del lenguaje intermedio permite construir en menos tiempo o compiladores para nuevos lenguajes y para nuevas mquinas. Desgraciadamente, no a existe consenso para utilizar un unico lenguaje intermedio.

Manuales uex 12

Optimizacin de cdigo La mayor de los compiladores suelen tener una fase de o o a optimizacin de cdigo intermedio (independiente de los lenguajes fuente y objeto), o o y una fase de optimizacin de cdigo objeto (no aplicable a otras mquinas). o o a

TeORa De auTMaTas Y lenGuaJes FORMales


1.3. CONCEPTOS BASICOS SOBRE COMPILADORES

13

Estas fases se a aden al compilador para conseguir que el programa objeto sea n ms rpido y necesite menos memoria para ejecutarse. a a Veamos en los siguientes prrafos algunos ejemplos de optimizacin: a o Eliminar expresiones comunes. Por ejemplo: A := B+C+D E := (B+C)*F se convierte en Aux := B+C A := Aux + D E := Aux * F

Optimizar los bucles. Se trata de sacar de los bucles aquellas expresiones que sean invariantes. REPEAT B := 1 A := A-B UNTIL A = 0 La asignacin B := 1 se puede sacar del bucle o Generacin de cdigo objeto En esta fase, el cdigo intermedio optimizado es o o o traducido a una secuencia de instrucciones en ensamblador o en cdigo mquina. Por o a ejemplo, la sentencia A := B+C se convertir en una coleccin de instrucciones que a o podr representarse as an : LOAD B ADD C STORE A Tabla de s mbolos El compilador necesita gestionar la informacin de los elemeno tos que se va encontrando en el programa fuente: variables, tipos, funciones, clases, etc. Esta informacin se almacena en una estructura de datos interna conocida como o tabla de s mbolos. Para que la compilacin sea eciente la tabla debe ser diseada cuidadosamente o n de manera que contenga toda la informacin que el compilador necesita. Adems, hay o a que prestar especial atencin a la velocidad de acceso a la informacin con objeto de o o no ralentizar el proceso. Control de errores Informar adecuadamente al programador de los errores que hay en su programa es una de las misiones ms importantes y complejas de un a compilador. Es una tarea dif porque a veces unos errores ocultan a otros, o porque cil un error desencadena una avalancha de errores asociados. El control de errores se lleva a cabo, sobre todo, en las etapas de anlisis sintctico y semntico. a a a

Manuales uex 13

TeORa De auTMaTas Y lenGuaJes FORMales

Tema 2 Lenguajes y Gramticas Formales a


Contenido
2.1. Deniciones bsicas . . . . . . . . . . . . . . . . . . . . . . a 2.2. Operaciones con palabras . . . . . . . . . . . . . . . . . . . 2.3. Lenguajes y operaciones con lenguajes . . . . . . . . . . . 2.4. Concepto de gramtica formal . . . . . . . . . . . . . . . . a 2.5. Clasicacin de las gr. formales . . . . . . . . . . . . . . . o 2.6. Gramticas equivalentes . . . . . . . . . . . . . . . . . . . a 2.7. Problemas y cuestiones . . . . . . . . . . . . . . . . . . . . 15 16 17 19 24 26 29

En este tema se abordan los conceptos de gramtica y lenguaje formal. El tema a comienza con la denicin de una serie de conceptos bsicos, seguidamente, se eso a tudian las diferentes operaciones que se pueden llevar a cabo con palabras y con lenguajes, y las propiedades que estas operaciones tienen. Probablemente el punto central de este tema es la introduccin del concepto de gramtica formal, que se o a har en primer lugar de forma intuitiva, hasta llegar a una denicin formal. El tema a o acaba con la presentacin de una taxonom de las gramticas formales realizada o a a por Noam Chomsky y con el estudio de algunos mtodos para simplicar ciertas e gramticas. a

2.1.

Deniciones bsicas a

Alfabeto: conjunto no vac y nito de s o mbolos. A estos s mbolos tambin se les e suele llamar letras del alfabeto. Se denota con la letra griega . Ejemplos: 15

Manuales uex 15

A continuacin se incluyen las deniciones de conceptos elementales que se utio lizarn a lo largo de toda la asignatura. a

elena JuRaDO MlaGa


TEMA 2. LENGUAJES Y GRAMATICAS FORMALES 1 = {a,b,c,...,z} 2 = {0,1}

16

Palabra: secuencia nita de s mbolos de un alfabeto. Lo correcto es hablar de palabras denidas sobre un alfabeto. Habitualmente utilizaremos en nuestros ejemplos las ultimas letras min sculas de nuestro alfabeto (x, y, z) para denotar a u las palabras. Ejemplos: x = casa es una palabra denida sobre el alfabeto 1 y = 010100 es una palabra denida sobre el alfabeto 2 Palabra vac es una palabra que no tiene ningn s a: u mbolo y se representa como . Longitud de una palabra: es el n mero de s u mbolos que componen la palabra. Se representa utilizando dos barras verticales(||). Ejemplos: |x| = 4 |y| = 6 || = 0

Lenguaje Universal denido sobre un alfabeto es el conjunto de todas las palabras que se pueden construir con las letras de dicho alfabeto. Se denota por (). El lenguaje universal de cualquier alfabeto es innito, y siempre pertenece a l e la palabra vac a. Ejemplo: si = {a} entonces () = {, a, aa, aaa, ...}

Lenguaje L denido sobre un alfabeto , es un conjunto cualquiera de palabras denidas sobre dicho alfabeto, por lo tanto, L ().

2.2.

Operaciones con palabras

En este apartado se presenta una coleccin de operaciones que se pueden realizar o con palabras y las propiedades que cumplen estas operaciones. 1. Concatenacin Sean x e y dos palabras, se concatenan para formar otra palabra o que se denota xy y que est formada por todas las letras de x seguidas por las letras a de y. Ejemplo: x= casa y=blanca xy = casablanca Propiedades: Operacin cerrada. Si x e y estn denidas sobre el mismo alfabeto, xy tambin o a e lo estar. a Asociativa. (xy)z = x(yz) x = x = x

Manuales uex

Elemento neutro ().

16

TeORa De auTMaTas Y lenGuaJes FORMales

2.3. LENGUAJES Y OPERACIONES CON LENGUAJES |xy| = |x| + |y| No es una operacin conmutativa o

17

2. Potencia i-esima de una palabra (xi ) Consiste en concatenar una palabra x consigo misma, i veces. xi = x . . .i x Ejemplo: x = la x4 = lalalala Propiedades: xi+j = xi xj |xi | = i|x| x0 = 3. Reexin (o inversa) de una palabra (x1 ) Es otra palabra denida sobre o el mismo alfabeto y formada por los mismos s mbolos que x, dispuestos en orden inverso. Ejemplo: x = casa x1 = asac Propiedad: |x| = |x1 |

2.3.

Lenguajes y operaciones con lenguajes

Como hemos visto anteriormente un lenguaje denido sobre un alfabeto no es ms a que un subconjunto del lenguaje universal de ese alfabeto. Por ejemplo, si = {0,1}, podemos denir diferentes lenguajes sobre ese alfabeto: L1 = {x/|x| = 4} L2 = {0n 1n /n > 0} L3 = {x/x no contenga un n mero par de 0s } u Sobre cualquier alfabeto se pueden denir lenguajes especiales como el lenguaje vac que se representa como L = y que no tiene ninguna palabra. Tambin o, e existe el lenguaje que contiene solamente la palabra vac L = {} a Se presentan, a continuacin, diferentes operaciones que se pueden denir sobre o los lenguajes. Casi todas estn basadas en las operaciones sobre palabras que se a explicaron en la seccin anterior. o 1. Unin de lenguajes La unin de dos lenguajes L1 y L2 denidos sobre el o o mismo alfabeto es otro lenguaje, tambin denido sobre ese alfabeto, que contiene e todas las palabras de L1 y todas las de L2 . L = L1 L2 = {x/x L1 x L2 } Propiedades:

Manuales uex 17

elena JuRaDO MlaGa


TEMA 2. LENGUAJES Y GRAMATICAS FORMALES Operacin cerrada. El lenguaje resultante est denido sobre el mismo alfabeto o a que L1 y L2 . Asociativa. (L1 L2 ) L3 = L1 (L2 L3 ) Conmutativa. L1 L2 = L2 L1 Elemento Neutro (). Idempotencia. L L = L 2. Concatenacin Sean dos lenguajes L1 y L2 denidos sobre el mismo alfabeto , o la concatenacin de ambos lenguajes estar formada por todas las palabras obtenidas o a al concatenar una palabra cualquiera de L1 con otra de L2 . L = L1 L2 = {xy/x L1 y L2 } Propiedades: Operacin cerrada. El lenguaje resultante est denido sobre el mismo alfabeto o a que L1 y L2 . Asociativa. (L1 L2 ) L3 = L1 (L2 L3 ) Elemento Neutro (L = {}). No es conmutativa. 3. Potencia i-esima n mero i de veces. u Propiedades: Li+j = Li Lj L0 = L = {} 4. Clausura (o cierre de Kleene) La clausura de un lenguaje (L ) es el resultado de unir todas las potencias de dicho lenguaje, es decir, L =

18

L = L=L

L L = LL = L

Es el resultado de concatenar un lenguaje consigo mismo un Li = L . . .i L

Manuales uex

Li

i=0

18

TeORa De auTMaTas Y lenGuaJes FORMales


2.4. CONCEPTO DE GRAMATICA FORMAL

19

o 5. Clausura positiva La clausura positiva de un lenguaje (L+ ) es la unin de todas las potencias de ese lenguaje, exceptuando la potencia cero. L+ = Propiedades: L = L+ {} L+ = L L = LL () = En este caso el alfabeto es considerado como un lenguaje, concretamente el formado por todas las cadenas de longitud 1. + = \ {} 6. Reexin La reexin de un lenguaje (L1 ) est formada por las inversas de o o a todas las palabras de ese lenguaje. L1 = {x1 /x L}

Li

i=1

2.4.

Concepto de gramtica formal a

Si nos referimos a los lenguajes naturales el concepto de gramtica es muy antiguo. a Los primeros trabajos aparecen en la India durante los comienzos del primer milenio antes de Cristo, alcanzndose el mximo apogeo con Panini (siglos VII y VI a. C.). a a Al mismo tiempo en Grecia se desarrollaba una corriente de investigacin gramatical, o cuyo mximo representante ser Pitgoras. Sin embargo, el concepto de gramtica a a a a desde un punto de vista formal tiene su origen en los trabajos de Chomsky a mediados del siglo XX.

2.4.1.

Deniciones previas

Comenzaremos este apartado con una serie de deniciones cuyo inters prctico e a quedar de maniesto con los ejemplos que aparecen a continuacin. a o

Manuales uex 19

Denicin 2.1 (Produccin) o o Sea un alfabeto, llamamos produccin (o regla) denida sobre ese alfabeto a un o par ordenado de palabras (x, y) donde x, y . Se dice que x es la parte izquierda de la produccin y que y es la parte derecha. A las producciones tambin se las llama o e reglas de derivacin. Se representa x ::= y. o

elena JuRaDO MlaGa


TEMA 2. LENGUAJES Y GRAMATICAS FORMALES

20

Denicin 2.2 (Produccin compresora) o o Se dice que una produccin es compresora si la longitud de su parte derecha es menor o que la de la parte izquierda. Denicin 2.3 (Derivacin directa) o o Sea un alfabeto, P un conjunto de producciones denidas sobre ese alfabeto x1 x2 P = xn ::= y1 ::= y2 ::= yn

y v, w . Decimos que v produce directamente a w, o que w deriva directamente de v, si z, u y una produccin xi ::= yi tal que v = zxi u y w = zyi u o La notacin utilizada para representar una derivacin directa es v w o o Denicin 2.4 (Derivacin) o o Sea un alfabeto, P un conjunto de producciones denidas sobre ese alfabeto y v, w . Decimos que v produce a w, o que w deriva de v, si w0 , w1, . . . , wm tales que v = w0 w1 w1 w2 ... wm1 wm = w
La notacin utilizada en este caso es v w o

2.4.2.

Ejemplo con un lenguaje natural(castellano)

Manuales uex 20

Estamos familiarizados con el concepto tradicional de gramtica que, de forma a intuitiva, podr amos considerar como un conjunto de reglas que nos indican qu es e correcto y qu no lo es en un lenguaje natural. Con el n de acercarnos a una denicin e o ms formal comenzaremos con un ejemplo en lengua castellana. a La gramtica debe describir la estructura de las frases y de las palabras de un a lenguaje. Veamos una serie de reglas muy sencillas que nos permitir comprobar an que la frase el perro corre deprisa es correcta.

TeORa De auTMaTas Y lenGuaJes FORMales


2.4. CONCEPTO DE GRAMATICA FORMAL Reglas gramaticales: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. < sentencia >::=< sujeto >< predicado > < sujeto >::=< articulo >< nombre > < predicado >::=< verbo >< complemento > < predicado >::=< verbo > < articulo > ::= el < articulo > ::= la < nombre > ::= perro < nombre > ::= gata < verbo > ::= corre < verbo > ::= come < complemento > ::= deprisa < complemento > ::= mucho

21

Estas reglas pueden ser consideradas como un conjunto de producciones. Si utilizamos algunas de estas producciones para llevar a cabo derivaciones a partir del item < sentencia > podemos llegar a obtener frases como: el perro corre deprisa, la gata come mucho o la gata corre. Sin embargo, nunca podr amos llegar a construir la frase mucho deprisa perro. Veamos, paso a paso, como se podr generar la frase la gata corre a partir a del s mbolo < sentencia >. En cada fase del proceso hemos destacado en negrita el s mbolo que se transforma.

Aplicando la pr. Aplicando la pr. Aplicando la pr. Aplicando la pr. Aplicando la pr. Aplicando la pr.

1 2 4 6 8 9

< sentencia > < sujeto > < predicado > < sentencia > < articulo >< nombre > < predicado > < sentencia > < articulo > < nombre >< verbo > < sentencia > la< nombre > < verbo > < sentencia > la gata< verbo > < sentencia > la gata corre

Sin embargo, la forma ms habitual de representar este mismo proceso de gena eracin de una cadena de s o mbolos es mediante un rbol de derivaciones (o rbol a a parser ) como el que se muestra en la gura 2.1.

Aplicaremos el mismo mtodo para denir un fragmento de un lenguaje de proe gramacin. Pretendemos describir cmo son las instrucciones que permiten asignar o o el valor de una expresin a una variable en un lenguaje como C. o

Manuales uex 21

2.4.3.

Ejemplo en un lenguaje articial

elena JuRaDO MlaGa


TEMA 2. LENGUAJES Y GRAMATICAS FORMALES
<oracion> <sujeto> <articulo> la <nombre> gata <predicado> <verbo> corre

22

Figura 2.1: Arbol de derivacin o

1. 2. 3. 4. 5.

< asignacion > ::= < variable > = < expresion > < expresion > ::= < numero > < expresion > ::= < variable > < expresion > ::= < expresion > + < expresion > < expresion > ::= < expresion > < expresion >

Si consideramos que A, B y C pueden ser considerados como < variable > y que 2 y 4 pueden ser considerados como < numero >, es fcil comprobar que a partir a del s mbolo < asignacion > y utilizando diferentes producciones podemos llegar a construir instrucciones como: A=B+C B=B*2 C=C+4 Sin embargo, no podr amos construir sentencias como A = + 2 * / + 4 o 4=A Es decir, en los ejemplos anteriores podemos ver que hay construcciones gramaticalmente correctas y otras que no lo son.

2.4.4.

Denicin de gramtica formal o a

Manuales uex 22

Analizando los ejemplos anteriores podemos observar como el objetivo es llegar a tener una secuencia correcta de s mbolos (en el primer ejemplo, estos s mbolos son: el, la, perro, gata, etc. y en el segundo, los s mbolos son: A, B, *,+, 2, etc.) partiendo de un determinado s mbolo, que llamaremos inicial, (< oracion > en el primer caso o < asignacion > en el segundo), y utilizando algunas de las producciones denidas. A partir de estas ideas intuitivas, formalizaremos la denicin de gramtica. o a Denicin 2.5 (Gramtica Formal) o a Se llama gramtica formal denida sobre un alfabeto a una tupla de la forma a G = {T , N , S, P } donde:

TeORa De auTMaTas Y lenGuaJes FORMales


2.4. CONCEPTO DE GRAMATICA FORMAL

23

mbolos terminales T es el alfabeto de s mbolos no terminales (aparecen en los ejemplos encerrados N es el alfabeto de s entre <>) S es el s mbolo inicial de la gramtica a P es un conjunto de producciones gramaticales Hay que tener en cuenta que: S N T N = = T N Ejemplo 2.1 T = {+, , 0, 1, 2, . . . , 9} N = {< Signo >, < Digitos >, < Numero >, < Caracter >} S =< Numero > < Numero >::=< Signo >< Digito > < Signo >::= + < Signo >::= < Digito >::=< Caracter >< Digito > < Digito >::=< Caracter > < Caracter >::= 0 < Caracter >::= 1 < Caracter >::= 9

P =

Con esta gramtica, y a partir del s a mbolo < Numero >, podemos generar cualquier n mero natural, siempre que vaya precedido por un signo. Por ejemplo: u -57, +5, -4999. Hasta este momento hemos distinguido los s mbolos no terminales de los terminales encerrando a los primeros entre <>. Sin embargo, en los ejemplos que veremos a partir de ahora y por simplicidad, utilizaremos las letras maysculas para repreu sentar a los s mbolos no terminales y las min sculas para los terminales. Adems, u a utilizaremos la notacin BNF (Backus Normal Form). Con esta notacin se utilizan o o los s mbolos ::= para separar la parte izquierda de una produccin de la derecha y o adems, se emplea el s a mbolo | para indicar que la parte izquierda de una produccin o coincide con la de la anterior, as no se repite la parte izquierda de determinadas producciones. Por tanto, en el ejemplo anterior la descripcin de las producciones o quedar as a :

Manuales uex 23

elena JuRaDO MlaGa


TEMA 2. LENGUAJES Y GRAMATICAS FORMALES < Numero >::=< Signo >< Digito > < Signo >::= + | < Digito >::=< Caracter >< Digito > | < Caracter > P = < Caracter >::= 0 |1 | |9

24

Denicin 2.6 (Lenguaje generado por una gramtica) o a Sea una gramtica denida como G = {T , N , S, P } llamamos lenguaje generado a por dicha gramtica a L = {x /S x} a T Por lo tanto, las palabras del lenguaje estarn formadas por cadenas de s a mbolos terminales generadas a partir del s mbolo inicial de la gramtica, utilizando las a producciones que la denen. Denicin 2.7 (Recursividad) o Una gramtica es recursiva si tiene alguna derivacin recursiva, es decir, si A xAy a o donde A N , x, y . Si x = se dice que la gramtica es recursiva por la a izquierda, y si y = se dice que es recursiva por la derecha. Es evidente que si una gramtica tiene producciones recursivas, es decir producciones a con la forma A ::= xAy, entonces es recursiva. Teorema 2.1 Un lenguaje es innito si y slo si existe una gramtica recursiva que lo genera. o a

2.5.

Clasicacin de las gr. formales o

Noam Chomsky clasic las gramticas en cuatro grupos (G0 , G1 , G2 , G3 ), o a donde cada uno contiene al siguiente. La diferencia entre cada grupo se centra en la forma de las producciones. La misma clasicacin puede ser aplicada a los lenguao jes, es decir, los lenguajes de tipo 0 son los generados por las gramticas de tipo 0 y a as sucesivamente.

Manuales uex

2.5.1.

Gramticas de tipo 0 a

Tambin se las llama gramticas sin restricciones o gramticas recursivamente e a a enumerables. Las producciones de las gramticas de tipo 0 tienen la forma: a

24

TeORa De auTMaTas Y lenGuaJes FORMales


2.5. CLASIFICACION DE LAS GR. FORMALES xAy ::= v donde A N , x, y, v Sin embargo, es posible demostrar que cualquier lenguaje de tipo 0 puede ser tambin generado por una gramtica que pertenece a un grupo algo ms restringido, las e a a gramticas con estructura de frase. Podemos decir, por tanto, que las gr. de tipo 0 y a las gr. con estructura de frase tienen el mismo poder generativo. Las producciones de las gramticas con estructura de frase tienen la forma: a xAy ::= xvy donde A N , x, y, v

25

2.5.2.

Gramticas de tipo 1 a

A este tipo de gramticas tambin se las llama gramticas dependientes del a e a contexto. Las producciones deben tener la siguiente forma: xAy ::= xvy donde A N , v + x, y Es obvio que todas las gramticas de tipo 1 son tambin gramticas con estructura a e a de frase, pero en este caso hay una restriccin a adida y es que la longitud de la parte o n derecha de las producciones es siempre mayor o igual que la de la parte izquierda, es decir, no hay producciones compresoras. El nombre de gramticas dependientes del contexto se debe a que las producciones a se pueden interpretar como que A se convierte en v, siempre que se encuentre en un determinado contexto, es decir, precedida por x y seguida por y. Por lo tanto, es necesario conocer el contexto en el que se encuentra A para poder aplicar la produccin. o

2.5.3.

Gramticas de tipo 2 a

Son tambin llamadas gramticas independientes del contexto. Sus produce a ciones son a n ms restrictivas. En este caso, la parte izquierda de la produccin u a o est formada por un unico s a mbolo no terminal. Por lo tanto, las producciones son de la forma: A ::= v donde A N v

En este tipo de gramticas, la conversin de A en v se realiza independientemente del a o contexto en el que se encuentre A, de ah su nombre. Son especialmente adecuadas para representar los aspectos sintcticos de cualquier lenguaje de programacin. a o

Manuales uex 25

elena JuRaDO MlaGa


TEMA 2. LENGUAJES Y GRAMATICAS FORMALES

26

2.5.4.

Gramticas de tipo 3 a

Es el grupo ms restringido de gramticas y tambin son llamadas regulares. En a a e este caso tambin se le imponen restricciones a la parte derecha de las producciones, e que tendrn como mximo dos s a a mbolos. Hay dos tipos de gramticas regulares y sus a producciones pueden ser de la siguiente forma: 1. Para las gramticas lineales por la derecha (GLD) a a) A ::= a b) A ::= aV c) S ::= y S es el s mbolo inicial de la gramtica. a donde A, V N , a T

2. Para las gramticas lineales por la izquierda (GLI) a a) A ::= a b) A ::= V a c) S ::= y S es el s mbolo inicial de la gramtica. a donde A, V N , a T

Cualquier lenguaje de tipo 3 puede ser generado tanto por una gramtica lineal por la a derecha como por una lineal por la izquierda. Es decir, estos dos grupos de gramticas a tienen el mismo poder generativo.

2.6.

Gramticas equivalentes a

A continuacin veremos como, en ocasiones, es recomendable simplicar ciertas o gramticas, eliminando s a mbolos o producciones no deseadas. En estos casos, el objetivo ser llegar a denir una gramtica equivalente a la primera pero que no tenga esos a a elementos indeseables. En este apartado trabajaremos exclusivamente con gramticas a independientes del contexto. Denicin 2.8 (Gramticas equivalentes) o a Dos gramticas son equivalentes cuando generan el mismo lenguaje. Es evidente que, a para que esto suceda, deben estar denidas sobre el mismo T .

Manuales uex

2.6.1.

Simplicacin de gramticas o a

Comenzaremos deniendo los elementos indeseables de los que hablbamos antea riormente.

26

TeORa De auTMaTas Y lenGuaJes FORMales


2.6. GRAMATICAS EQUIVALENTES

27

Denicin 2.9 (Reglas innecesarias) o Son produciones de la forma A ::= A. Evidentemente no aportan informacin a la o gramtica. a Denicin 2.10 (S o mbolos inaccesibles) Son s mbolos no terminales que no aparecen en ninguna cadena de s mbolos que pueda derivarse a partir del s mbolo inicial de la gramtica. a Denicin 2.11 (S o mbolos no generativos) Son s mbolos no terminales a partir de los cuales no puede derivarse ninguna cadena de s mbolos terminales. Veamos a continuacin mtodos para localizar los s o e mbolos inaccesibles y los no generativos. Mtodo para localizar los s e mbolos inaccesibles de una gramtica En reaa lidad, el mtodo trata de identicar los s e mbolos accesibles, as el resto sern s a mbolos inaccesibles. Para conseguirlo se puede dise ar un algoritmo que construya de forma n incremental este conjunto de s mbolos accesibles. Inicialmente cualquier s mbolo que aparezca en la parte derecha de una produccin o que tiene a S en la parte izquierda, es un s mbolo accesible. A partir de aqu si un , s mbolo est en la parte derecha de una produccin que tiene a un s a o mbolo accesible en la parte izquierda es tambin accesible. e Veamos un algoritmo para llevar a cabo esta tarea: Algoritmo 2.1 B squeda S u mbolos inaccesibles Output: SimInacc N Begin SimAccesibles = {V N / S ::= xV y, x, y } Auxiliar = while Auxiliar = SimAccesibles do Auxiliar = SimAccesibles SimAccesibles = SimAccesibles {V N / A ::= xV y, x, y A SimAccesibles} end while SimInacc = N \ SimAccesibles. End

Mtodo para localizar los s e mbolos no generativos El mtodo es anlogo e a al anterior, es decir, tiene como objetivo localizar, en primer lugar, los s mbolos generativos. Inicialmente son s mbolos generativos aquellos que aparecen en la parte

Manuales uex 27

elena JuRaDO MlaGa


TEMA 2. LENGUAJES Y GRAMATICAS FORMALES

28

izquierda de una produccin que tiene slo s o o mbolos terminales o la cadena nula en la parte derecha. Veamos el algoritmo: Algoritmo 2.2 B squeda S u mbolos No Generativos Output: SimNoGen N Begin SimGenerativos = {V N / V ::= , } T Auxiliar = while Auxiliar = SimGenerativos do Auxiliar = SimGenerativos SimGenerativos = SimGenerativos {V N / V ::= , (T SimGenerativos) } end while SimNoGen = N \ SimGenerativos End Tanto las reglas innecesarias como los s mbolos no generativos o los inaccesibles pueden eliminarse de cualquier gramtica, ya que no aportan informacin relevante a o a la misma. Denicin 2.12 (Gramtica Limpia) o a Decimos que una gramtica es limpia si no tiene reglas innecesarias, ni s a mbolos no generativos, ni s mbolos inaccesibles. Denicin 2.13 (Reglas de redenominacin) o o Son reglas en las que hay un unico s mbolo no terminal tanto en la parte izquierda de la produccin como en la derecha. Es decir, tienen la forma: o A ::= B, A, B N Para eliminar las reglas de redenominacin de una gramtica es necesario sustio a tuirlas por otras producciones que sean equivalentes. Por ejemplo, si tenemos las producciones A::=B B::=x B::=y donde x,y y deseamos eliminar A::=B, las producciones anteriores deben ser sustituidas por las siguientes producciones: A::=x A::=y B::=x B::=y Denicin 2.14 (Reglas no generativas) o Son aquellas en las que slo aparece en la parte derecha de la produccin. o o

Manuales uex 28

TeORa De auTMaTas Y lenGuaJes FORMales

2.7. PROBLEMAS Y CUESTIONES

29

Para eliminar estas reglas tambin es necesario a adir otras a la gramtica. e n a Si queremos eliminar la produccin A ::= es necesario localizar las producciones o que tiene a A en la parte derecha (por ejemplo: B ::= xAy) y a adir para cada n produccin de este tipo otra equivalente en la que no aparece A (en este caso, B ::= o xy). La produccin S ::= no puede eliminarse de ninguna gramtica ya que es o a imprescindible si se pretende que el lenguaje generado contenga la palabra nula. Denicin 2.15 (Gramtica bien formada) o a Decimos que una gramtica est bien formada si no tiene reglas de redenominacin a a o ni reglas no generativas.

2.7.

Problemas y cuestiones

2.1 Dado el alfabeto = {a, b}, cuntas palabras hay en el lenguaje An B y cmo a o son dichas palabras?, considerando los siguientes casos: 1. A = {a} 2. A = {a} 3. A = {a, } 4. A = {a, } B = {b} B = {b, } B = {b, } B = {b}

2.2 Dado el alfabeto = {a, b}, y el lenguaje denido sobre l, L = {aa, bb} cmo e o son las palabras del lenguaje L4 ? 2.3 En qu situacin se cumple que L = L+ ? e o 2.4 Dadas las siguientes gramticas, indicar de qu tipo son y cmo es el lenguaje a e o que generan: 1. T = {a, b, c, 0, 1} N = {S} S ::= a |b |c |Sa P = |Sb |Sc |S0 |S1

Manuales uex 29

elena JuRaDO MlaGa


TEMA 2. LENGUAJES Y GRAMATICAS FORMALES 2. T = {a, b} N = {S, A}

30

3. T = {a, b} N = {S, A}

S ::= A | P = A ::= aAb |ab S ::= A | A ::= aA P = |Ab |a |b

4. T = {a} N = {S, A}

2.5 Dados los siguientes lenguajes, dise ar una gramtica que los genere n a 1. L1 = {abn a/ n = 0, 1, . . .} 2. L2 = {am bn / m n 0} 3. L3 = {ak bm an / n = k + m} 4. L4 = {waw 1/ w es una cadena binaria denida en el alfabeto {0, 1}} 2.6 Dadas las siguientes gramticas, obtener gramticas equivalentes a ellas que a a sean limpias y bien formadas 1. T = {a, b} N = {S, A, B, C, D, E} S ::= Aa |Ca |a B ::= Aa |Ca P = |a C ::= Bb D ::= Ca E ::= Cb

S ::= A | P = A ::= AaA |a

Manuales uex 30

TeORa De auTMaTas Y lenGuaJes FORMales

2.7. PROBLEMAS Y CUESTIONES 2. T = {x, y, z} N = {S, P, Q}

31

S ::= zP zQz P ::= xP x |Q P = Q ::= yP y |

Manuales uex 31

Tema 3 Expresiones y gramticas regulares a


Contenido
3.1. Denicin de expresin regular . . . . . . . . . . . . . . . o o 3.2. Algebra de las expresiones regulares . . . . . . . . . . . . 3.3. Denicin de gramtica regular . . . . . . . . . . . . . . . o a 3.4. Ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.5. Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 34 35 36 38

En este tema se van a estudiar las gramticas regulares, tambin llamadas de a e tipo 3 atendiendo a la clasicacin de Chomsky. Tambin se aborda el estudio de las o e expresiones regulares que permiten denir de forma precisa los lenguajes generados por estas gramticas (lenguajes regulares). a

3.1.

Denicin de expresin regular o o

Una expresin regular es una notacin normalizada para representar lenguajes o o regulares, es decir, lenguajes generados por gramticas de tipo 3. Como veremos, las a expresiones regulares permiten describir con exactitud y sencillez cualquier lenguaje regular. Para denir una expresin regular(e.r.) se pueden utilizar todos los s o mbolos del alfabeto y, adems, y . Los operadores que tambin se pueden utilizar son: a e + representa la unin o

* representa el cierre de Kleene ( ) modican las prioridades de los dems operadores a 33

Manuales uex 33

. representa la concatenacin (este s o mbolo no se suele escribir)

elena JuRaDO MlaGa


TEMA 3. EXPRESIONES Y GRAMATICAS REGULARES Una expresin regular se puede denir de acuerdo a los siguientes criterios: o 1. es una e.r. que representa al lenguaje vac (no tiene palabras) L = o 2. es una e.r. que representa al lenguaje L = {} 3. a es una e.r. que representa al lenguaje La = {a} 4. Si y son e.r. entonces + tambin lo es y representa al lenguaje L+ = e L L 5. Si y son e.r. entonces tambin lo es y representa al lenguaje L = L L e 6. Si es una e.r. entonces tambin lo es y representa al lenguaje e L = Li que tambin se puede representar = i e i=0 i=0

34

Slo son e.r. aquellas que puedan ser denidas utilizando los 6 puntos vistos anteo riormente. La prioridad de las operaciones, que puede modicarse utilizando parntesis, es e de mayor a menor: . + Ejemplos Sea = {0, 1} 1. 01 + 001 es una e.r. que representa al lenguaje L = {01, 001} 2. 0 10 es una e.r. que representa a cualquier cadena binaria en la que hay un solo 1, L = {0n 10m /n, m 0} Sea = {a, b, c} 3. a(a + b + c) representa a cualquier cadena que empiece por a 4. (a + b + c) representa al lenguaje universal denido sobre el alfabeto

3.2.

Algebra de las expresiones regulares


( + ) + = + ( + ) + =+ +=

Propiedades de la unin (+) o 1. Asociativa

Manuales uex

2. Conmutativa

3. Elemento neutro () 4. Idempotencia

+=

34

TeORa De auTMaTas Y lenGuaJes FORMales


3.3. DEFINICION DE GRAMATICA REGULAR Propiedades de la concatenacin (.) o 1. Asociativa () = () ( + ) = +

35

2. Distributiva respecto de la unin o 3. Elemento neutro () 4. = 5. No es conmutativa Propiedades del cierre de Kleene (*) 1. = 2. = 3. = 4. = 5. ( ) = 6. = + 7. = + + 2 + . . . + n + n+1

= =

n Si tenemos una funcin f : E E (por ejemplo f (, ) = ), donde E o representa al conjunto de las expresiones regulares denidas sobre , entonces:

8. f (, , , . . .) + ( + + + . . .) = ( + + + . . .) 9. (f ( , , , . . .)) = ( + + + . . .)

3.3.

Denicin de gramtica regular o a

Como vimos en el tema anterior existen dos tipos de gramticas de tipo 3: las a gramticas lineales por la derecha y las lineales por la izquierda. a Las producciones de las gramticas lineales por la derecha pueden ser de la forma: a

2. A ::= aV 3. S ::=

donde A, V N , a T y S es el s mbolo inicial de la gramtica. a

Manuales uex 35

1. A ::= a

elena JuRaDO MlaGa


TEMA 3. EXPRESIONES Y GRAMATICAS REGULARES

36

Las producciones de las gramticas lineales por la izquierda pueden ser de la a forma: 1. A ::= a 2. A ::= V a 3. S ::= donde A, V N , a T y S es el s mbolo inicial de la gramtica. a

Estos dos tipos de gramticas tienen el mismo poder generativo, es decir, dada una a gramtica lineal por la izquierda siempre existe una gramtica lineal por la derecha a a que es equivalente a ella y viceversa. Adems, dado un lenguaje regular siempre a existen, al menos, una gramtica lineal por la izquierda y una gramtica lineal por a a la derecha que lo generan. Todo lenguaje de tipo 3 puede representarse mediante una e.r. y una e.r. siempre representa a un lenguaje de tipo 3.

3.4.

Ejemplos

1. El lenguaje L1 = {, a, aa, aaa, . . .} puede representarse con la e.r. a y puede ser generado por la gr. lineal por la izquierda P = {S ::= |Sa} y por la gr. lineal por la derecha P = {S ::= |aS} 2. El lenguaje de todas las palabras que empiezan por a puede representarse con la e.r. a(a + b + . . . + z) y puede ser generado por la gr. lineal por la izquierda S ::= a |Sa |Sb P = |Sz y por la gr. lineal por la derecha S ::= aA A ::= aA |bA P = |zA |

Supongamos que 1 = {a, b, . . . , z}

Manuales uex 36

TeORa De auTMaTas Y lenGuaJes FORMales

3.4. EJEMPLOS

37

3. El lenguaje de las palabras que empiezan por a, terminan por c y adems de a estas dos letras slo pueden tener bs (tantas como se quieran) puede represeno tarse con la e.r. ab c y puede ser generado por la gr. lineal por la izquierda S ::= Ac A ::= Ab P = |a

y por la gr. lineal por la derecha

Los lenguajes regulares son especialmente adecuados para representar las caracter sticas lxicas de un lenguaje de programacin, como veremos en los siguiene o tes ejemplos en los que consideraremos un lenguaje de programacin similar a o C. 4. Las cadenas que pueden ser consideradas como un identicador del lenguaje (nombres inventados por el programador para denir variables, funciones, etc.) estn formadas por letras (may sculas y min sculas), d a u u gitos y el guin bajo o ( ), pero no pueden comenzar por un d gito. Este lenguaje denido sobre el alfabeto 2 = {a, . . . , z, A, . . . , Z, 0, . . . , 9, } se puede representar por la e.r. (a + . . . + z + A + . . . + Z + )(a + . . . + z + A + . . . + Z + + 0 + . . . + 9) Esta e.r. representa palabras como Suma o T otal1 pero no representar a 1Ab a mbolo de la suma Si trabajamos con el alfabeto 3 = {0, . . . , 9, .,+ , , e, E} (el s ha sido representado en un tama o menor del habitual para distinguirlo con n claridad del operador unin (+)) o
+

S ::= aA A ::= bA P = |c

5. La e.r. = (0 + . . . + 9)(0 + . . . + 9) permite representar a cualquier nmero u natural (por ejemplo: 4, 27 o 256). 6. La e.r. = .(0 + . . . + 9) representa n meros reales no negativos con una u notacin clsica (por ejemplo: 55.7, 854.95 o 5.). o a 7. La e.r. = ((e + E)) + ((e + E)+ ) + ((e + E) ) representa n meros u reales no negativos con una notacin cient o ca (por ejemplo: 5.5e+10).

Manuales uex 37

elena JuRaDO MlaGa


TEMA 3. EXPRESIONES Y GRAMATICAS REGULARES

38

3.5.

Problemas

3.1 Describir los lenguajes representados por las siguientes expresiones regulares denidas sobre el alfabeto = {a, b, c} 1. (a + b) c 2. (aa+ )(bb ) 3. (aa+ ) + (bb ) 4. a b c 3.2 Representar, mediante una expresin regular, los siguientes lenguajes o 1. Considerando que = {a}, a) el lenguaje formado por cadenas de as de longitud par b) el lenguaje formado por cadenas de as de longitud impar 2. Considerando que = {a, b}, el lenguaje formado por cadenas de as y bs, de longitud impar, en las que se van alternando los dos s mbolos, es decir, nunca aparece el mismo s mbolo dos veces seguidas. Por ejemplo: abababa o bab 3.3 Dadas las siguientes expresiones regulares escribir, para cada una de ellas, una palabra que pertenezca al lenguaje que la expresin representa y otra que no pertenezo ca a dicho lenguaje 1. (1 + 0 )(1 + 0 )(1 + 0 ) 2. (1 + 0) 10(1 + 0) 3.4 Simplicar las siguientes expresiones regulares 1. (a + b + ab + ba) 2. (a + ) 3. a(a a + a ) + a 4. (a + b) ba(a + b) + a b 3. 1 (0 + 10 )1 4. 10 + 01

3.5 Dadas dos expresiones regulares = 0 + 1 = 01 + 10 + 1 0 + (0 1) encontrar 1. una palabra que pertenezca a pero no a

Manuales uex

2. una palabra que pertenezca a pero no a 3. una palabra que pertenezca a y a 4. una palabra que no pertenezca a ni a

38

Tema 4 Autmatas Finitos o


Contenido
4.1. Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . o 4.2. Denicin de Autmata Finito Determinista . . . . . . . o o 4.3. Representacin de Autmatas . . . . . . . . . . . . . . . . o o 4.4. Los AFD como reconocedores de lenguajes . . . . . . . . 4.5. Minimizacin de un AFD . . . . . . . . . . . . . . . . . . . o 4.6. Autmatas Finitos No Deterministas(AFND) . . . . . . o 4.7. Lenguaje aceptado por un AFND . . . . . . . . . . . . . . 4.8. Simulacin de un AFD y AFND . . . . . . . . . . . . . . o 4.9. Paso de un AFND a AFD . . . . . . . . . . . . . . . . . . 4.10. Relacin entre AF, gr. y exp. reg. . . . . . . . . . . . . . o 4.11. L mites para los leng. regulares . . . . . . . . . . . . . . . 4.12. Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 40 40 43 43 47 50 51 52 55 65 70

4.1.

Introduccin o

39

Manuales uex 39

Aunque no se puede considerar como una denicin correcta de autmata, est muy o o a extendida una idea que confunde el concepto de autmata con el de robot. Por lo o tanto, se considera errneamente que un autmata es una mquina que imita funo o a ciones t picas de los seres vivos, sobre todo relacionadas con el movimiento, pudiendo incluso ejecutar ciertas rdenes. En realidad el concepto de autmata es mucho ms o o a genrico, ya que podemos considerarlo como un dispositivo que procesa cadenas de e s mbolos que recibe como entrada, cambiando de estado y produciendo una salida que, en algunos casos, puede estar formada por otra cadena de s mbolos.

elena JuRaDO MlaGa


TEMA 4. AUTOMATAS FINITOS

40

La teor de autmatas se ocupa de clasicar y estudiar de modo sistemtico a o a diferentes tipos de mquinas abstractas que llevan a cabo un procesamiento secuencial a de la informacin. Dentro del conjunto de las mquinas abstractas que estudiaremos o a en esta asignatura, los Autmatas Finitos constituyen el grupo de mquinas ms o a a sencillas y que, por tanto, tienen un menor poder funcional. El estudio de los autmatas nitos se utiliza para modelar el comportamiento de o dispositivos mecnicos y tambin de sistemas naturales. Concretamente, permite esa e tudiar procesos que dependen de una historia, es decir, sistemas cuyo comportamiento actual depende del pasado. Tambin se aplican en el procesamiento del lenguaje e natural, pero en el contexto de esta asignatura su principal aplicacin ser el reo a conocimiento de lenguajes regulares (de tipo 3).

4.2.

Denicin de Autmata Finito Determinista o o

Los Autmatas Finitos son mquinas tericas que van cambiando de estado deo a o pendiendo de la entrada que reciban. La salida de estos Autmatas est limitada o a a dos valores: aceptado y no aceptado, que pueden indicar si la cadena que se ha recibido como entrada es o no vlida. Generalmente utilizaremos los Autmatas Finia o tos para reconocer lenguajes regulares, es decir, una palabra se considerar vlida slo a a o si pertenece a un determinado lenguaje. Formalmente, un Autmata Finito Determinista (AFD) se dene como una tupla o AF D = (, Q, f, q0 , F ), donde es el alfabeto de entrada Q es el conjunto nito y no vac de los estados del Autmata o o f es la funcin de transicin que indica en qu situaciones el Autmata pasa de o o e o un estado a otro, se dene f : Q Q q0 Q es el estado inicial F Q es el conjunto de estados nales de aceptacin (F = ) o

4.3.

Representacin de Autmatas o o

Manuales uex 40

Existen dos formas de representar un AFD, mediante tablas de transicin o o mediante diagramas de transicin. Introduciremos estas dos representaciones con o un ejemplo. Sea el siguiente AFD: = {a, b} Q = {p, q, r} q0 = p F = {q} donde f se dene de la siguiente forma: f (p, a) = q f (p, b) = r f (q, a) = q f (q, b) = r f (r, a) = r f (r, b) = r

TeORa De auTMaTas Y lenGuaJes FORMales


4.3. REPRESENTACION DE AUTOMATAS

41

Tabla de transicin El AFD se representar mediante la siguiente tabla que o a representa los valores de la funcin de transicin. o o a b p q r q q r r r r La echa indica que p es el estado inicial, y el asterisco indica que q es un estado nal de aceptacin (en general, pueden aparecer muchos asteriscos aunque slo puede o o aparecer una echa ya que slo hay un estado inicial). o Diagrama de transicin La gura 4.1 representa de forma grca las transio a
a q a

b r

a,b

Figura 4.1: Ejemplo de AFD ciones del autmata. Los estados nales de aceptacin se identican por estar enceo o rrados en un doble circulo. El estado inicial se destaca con una echa arrugada. Al analizar el autmata del ejemplo es evidente que slo considera como cadenas o o aceptadas aquellas que estn formadas solamente por as. Cualquier cadena que cona tenga una b har que el autmata acabe en el estado r , que es un estado muerto. a o Diremos que un estado est muerto si no es un estado nal de aceptacin y no parte a o de l ninguna transicin hacia otro estado. Es evidente que si durante el anlisis de e o a una cadena se llega a un estado muerto, como ya no es posible salir de dicho estado, la cadena no ser aceptada por el autmata. a o Autmatas Incompletos A menudo nos encontramos con autmatas para los o o que no estn denidas todas las transiciones. Las situaciones que no estn denidas a a deben ser consideradas como situaciones de error, es decir, si una cadena hace llegar al autmata hasta una situacin no denida, consideraremos que la cadena no ha o o sido reconocida por dicho autmata. o

Manuales uex 41

elena JuRaDO MlaGa


TEMA 4. AUTOMATAS FINITOS

42

Si deseamos completar un autmata (no es imprescindible) bastar con a adir un o a n estado muerto que reciba todas las transiciones que le faltan al autmata incompleto. o En la gura 4.2 podemos ver un ejemplo de esta situacin. El autmata de la o o izquierda est incompleto, pero podemos completarlo trasformndolo en el de la a a derecha, al que hemos a adido el estado r, que es un estado muerto. n
p a q p a q a,b b s b a a,b r

b s

Figura 4.2: Ejemplo de AF incompleto y completo

Estados accesibles y autmatas conexos o Denicin 4.1 (Autmata Conexo) o o Un autmata es conexo si todos sus estados son accesibles desde el estado inicial. o Denicin 4.2 (Parte conexa de un autmata) o o Si un autmata no es conexo, se llama parte conexa del autmata al conjunto de o o estados accesibles desde el estado inicial. Ejemplo 4.1 El autmata representado en la gura 4.3 no es conexo y su parte o conexa es la formada por los estados p y q y por las transiciones que hay entre ellos.
a b q a

Manuales uex

Figura 4.3: AF no conexo

42

TeORa De auTMaTas Y lenGuaJes FORMales

4.4. LOS AFD COMO RECONOCEDORES DE LENGUAJES

43

4.4.

Los AFD como reconocedores de lenguajes

Como se ha visto en secciones anteriores, la funcin de transicin f ha sido denida o o de manera que depende de un unico s mbolo del alfabeto de entrada. A continuacin, o se ampliar esta denicin de forma que dicha funcin pueda actuar sobre cadenas a o o de s mbolos, es decir, la funcin indicar a qu estado pasa el autmata ante la o a e o llegada de una cadena de s mbolos (y no solamente de un unico s mbolo). Por tanto, consideraremos que f : Q Q. Para conseguir esta ampliacin, f se redene o de forma recursiva: f (q, ) = q q Q a , x , q Q

f (q, ax) = f (f (q, a), x)

Ejemplo 4.2 Considerando el autmata que aparece en la gura 4.1 la funcin de o o transicin extendida devolver los siguientes valores: o a f (p, a) = q f (p, aa) = q f (p, ab) = r f (p, aabbb) = r f (p, baba) = r f (r, abb) = r Con esta nueva denicin de la funcin de transicin es posible denir formalmente o o o cul es el lenguaje aceptado por un AFD. a Denicin 4.3 (Leng. aceptado por un AFD) o El lenguaje que acepta un AFD es el conjunto de palabras denidas sobre que hacen que el autmata llegue a un estado nal de aceptacin o o L = {x / f (q0 , x) F }

4.5.

Minimizacin de un AFD o

Manuales uex 43

En ocasiones nos encontramos con autmatas que tienen algunos estados equivao lentes, en estos casos esos estados se pueden agrupar de manera que se consigue un autmata, equivalente al primero, pero con un menor n mero de estados. Se dice que o u el autmata ha sido minimizado. Un concepto diferente al de minimizar un autmata o o es el de simplicar un autmata que consiste en eliminar estados muertos o inacceo sibles. A continuacin se presenta un algoritmo para minimizar un AFD. El objetivo o principal de este algoritmo consiste en agrupar estados equivalentes. Consideraremos que dos estados son equivalentes cuando las transiciones que parten de ellos, para cada uno de los s mbolos del alfabeto, llevan al mismo estado o a estados que tambin son e

elena JuRaDO MlaGa


TEMA 4. AUTOMATAS FINITOS

44

equivalentes entre s Todos los estados que sean equivalentes entre s se fundirn en un . a unico estado en el autmata resultante. Para conseguir este objetivo se construir una o a particin de Q, que se ir renando paulatinamente, de manera que nalmente cada o a elemento de la particin agrupar estados equivalentes. Inicialmente, se construye o a una particin de Q formada por dos unicos elementos: los estados de aceptacin y los o o que no lo son. Dicha particin se ir renando todo lo posible, separando en diferentes o a elementos a los estados que no son equivalentes. Recordemos que una particin de Q o consiste en dividir Q en varios subconjuntos {Gi }1in de tal forma que: Gi Gj = i = j y
1in

Gi = Q

Algoritmo 4.1 Minimizacin de un AFD o Input: AF D A = (, Q, f, q0 , F ) Output: AF D A = (, Q , f , q0 , F ) Begin Particin = {G1 , G2 } donde G1 = F y G2 = Q \ F o Auxiliar = while Auxiliar = Particin do o Auxiliar = Particin o Gi Particin y a separar en diferentes grupos a los estados o s y t Gi siempre que f (s, a) Gj , f (t, a) Gk siendo j = k end while Cada elemento Gi de Particin se convierte en un estado de Q , las transiciones o sern las mismas que dene f a End

Ejemplo 4.3 Se minimizar el Autmata representado en la gura 4.4. a o Inicialmente, Particin = {G1 , G2 } G1 = {E} G2 = {A, B, C, D} o o Evidentemente no es posible renar el grupo G1 . Pero hay que comprobar cmo se comportan los estados de G2 con los s mbolos a y b. s mbolo a G2 s mbolo b G2 A B G2 A C G2 B B G2 B D G2 C B G2 C C G2 D B G2 D E G1 Analizando el comportamiento de los cuatro estados con el s mbolo b, es evidente que D no es equivalente a los otros tres estados. Por tanto, es necesario dividir G2 en dos nuevos elementos.

Manuales uex 44

TeORa De auTMaTas Y lenGuaJes FORMales


4.5. MINIMIZACION DE UN AFD

45

b C b A a B a b a a b E a

Figura 4.4: Autmata a minimizar o

Particin = {G1 , G2 , G3 } G1 = {E} G2 = {A, B, C} G3 = {D} o Veamos como se comporta G2 con los s mbolos a y b. G2 A B C s mbolo a B G2 B G2 B G2 G2 A B C s mbolo b C G2 D G3 C G2

De nuevo es evidente que el estado B no es equivalente a los otros dos. Es necesario dividir G2 . Ahora, Particin = {G1 , G , G3 , G4 } donde o 2 G1 = {E} G = {A, C} G3 = {D} G4 = {B} 2 Volvemos a comprobar el comportamiento de G , el unico grupo que es posible 2 renar. G 2 A C s mbolo a B G4 B G4 G 2 A C s mbolo b C G 2 C G 2

Denicin 4.4 (AFD equivalentes) o Dos AFD son equivalentes si reconocen el mismo lenguaje. Es evidente que para que esto ocurra deben estar denidos sobre el mismo alfabeto.

Manuales uex 45

No es posible renar ms la particin. Es evidente que A y C son equivalentes a o y, por tanto, deben formar parte del mismo grupo. A continuacin aparece el nuevo o autmata (gura 4.5), equivalente al anterior, que tiene un estado menos, debido al o agrupamiento entre A y C(representado por G ). 2

elena JuRaDO MlaGa


TEMA 4. AUTOMATAS FINITOS

46

b a G2 a b a G4 b a

G1

G3

Figura 4.5: Autmata minimizado o

A veces es fcil comprobar de manera intuitiva si dos AFD son equivalentes, pero a esto no siempre ocurre. Un mtodo para comprobar si dos AFD son equivalentes e consiste en unirlos de manera que formen un unico AFD que, por supuesto, no es conexo. Formalmente, la unin de los dos autmatas se llevar a cabo as o o a : Sean A1 = {, Q1 , f1 , q01 , F1 } A2 = {, Q2 , f2 , q02 , F2 } El autmata resultante tras la unin ser o o a A = A1 + A2 = {, Q1 Q2 , f, q0 , F1 F2 } donde f1 (q, a) si q Q1 f (q, a) = f2 (q, a) si q Q2 El nuevo estado inicial q0 puede ser tanto q01 como q02 . Una vez construido el autmata unin, ste se minimiza. Si al concluir el proceso o o e de minimizacin, los dos estados iniciales q01 y q02 forman parte del mismo elemento de o la particin, los autmatas originales son equivalentes y el AFD que hemos obtenido o o es el autmata m o nimo equivalente a ambos. Ejemplo 4.4 Dados los autmatas de la gura 4.6, aplicaremos el mtodo anterior o e para decidir si son equivalentes o no. Como hemos visto inicialmente, Particin = {G1 , G2 } o donde G1 = {q, r, w} G2 = {p, s, v, u} mbolos Hay que comprobar cmo se comportan los elementos de G1 y G2 con los s o a y b.

Manuales uex

G1 q r w

s mbolo a r G1 q G1 w G1

G1 q r w

s mbolo b p G2 p G2 v G2

46

TeORa De auTMaTas Y lenGuaJes FORMales


4.6. AUTOMATAS FINITOS NO DETERMINISTAS(AFND)
b p a b a,b s b a r q a b v a b b u Autmata 2 w

47

Autmata 1

Figura 4.6: Autmatas equivalentes? o

G2 s mbolo a G2 s mbolo b p q G1 p p G2 s p G2 s p G2 v w G1 v v G2 u w G1 u v G2 En principio, parece que los estados del elemento G1 son equivalentes, sin embargo, analizando el comportamiento de los estados del elemento G2 con el s mbolo a, es evidente que s no es equivalente a los otros tres estados. Por tanto, es necesario dividir G2 en dos subgrupos. Particin = {G1 , G2 , G3 } G1 = {q, r, w} G2 = {p, v, u} G3 = {s} o mbolos a y b. Veamos cmo se comporta G2 con los s o G2 s mbolo a G2 s mbolo b p q G1 p p G2 v w G1 v v G2 u w G1 u v G2 Es evidente que todos los estados de G2 son equivalentes. Por tanto, no es posible renar ms la particin. Podemos determinar que los Autmatas 1 y 2 son equivaa o o lentes ya que los estados iniciales p y v son equivalentes. Adems, el autmata que a o se muestra en la gura 4.7 es equivalente a ambos y es m nimo. Como el estado G3 es inaccesible se puede eliminar. As el autmata quedar o a como muestra la gura 4.8.

En los autmatas deterministas sabemos exactamente cul es la transicin que o a o debemos llevar a cabo ante una determinada situacin. Sin embargo, en los no deo terministas podemos encontrarnos con varias opciones e, incluso, con -transiciones

Manuales uex 47

4.6.

Autmatas Finitos No Deterministas(AFND) o

elena JuRaDO MlaGa


TEMA 4. AUTOMATAS FINITOS
a a a, b G1

48

G2

G3

G1 = {q, r, w} G2 = {p, u, v} G3 = {s}

Figura 4.7: Autmata m o nimo

G2

b a G1

G1 = {q, r, w} G2 = {p, u, v}

Figura 4.8: Autmata simplicado o

que se realizan sin considerar el correspondiente s mbolo de la cadena de entrada. Para tener en cuenta estas consideraciones, los AFND se denen como una tupla: AF ND = (, Q, f, q0 , F, T ), f : Q 2Q donde 2Q es el conjunto formado por los subconjuntos de Q, incluyendo a T es una relacin binaria denida sobre Q que indica las -transiciones del o autmata (si pT q existe una -transicin desde p hasta q) o o El resto de los s mbolos tiene el mismo signicado que en la denicin de AFD. o

Manuales uex 48

Ejemplo 4.5 Representacin de un AFND utilizando un diagrama de transiciones: o ver gura 4.9 Descripcin del mismo autmata mediante una tabla de transiciones: o o

TeORa De auTMaTas Y lenGuaJes FORMales


4.6. AUTOMATAS FINITOS NO DETERMINISTAS(AFND) a {q} {p, s} b {r, p} {s, p} {s} {r, s} {r}

49

p q r s

a p b a,b a, ,b

q b

Figura 4.9: A.F. no determinista

Es evidente que un AFD no es ms que un caso particular de AFND, es decir, AFD a AFND. En realidad, un AFD es un AFND que cumple T = Id y |f (q, a)| = 1 q Q, a

Es util conocer el cierre transitivo de la relacin T , que se denota T . Si pT q, o entonces q es accesible desde p utilizando exclusivamente -transiciones. Para calcular T podemos utilizar una matriz booleana (BT ) que permita representar a T y calcular despus todas las potencias de dicha matriz (llega un momento e en que las potencias se repiten y no es necesario calcular ms). As BT 2 = (BT )2 reprea senta las parejas de estados que estn conectadas por dos -transiciones, BT 3 las que a estn conectadas por tres, y as sucesivamente. Por lo tanto Id+BT +BT 2 +BT 3 +. . . es a una matriz booleana que representa la relacin que deseamos calcular T . En nuestro o ejemplo: 0 0 p q 0 0 BT = r 0 0 0 0 s 0 0 1 1 0 0 1 (BT )2 = BT 2 = 0 0 1 0 0 0 0 0 0 0 1 1 1 0 0 1 1

Manuales uex 49

elena JuRaDO MlaGa


TEMA 4. AUTOMATAS FINITOS

50

BT 3 = BT 4

0 0 = ... = 0 0

0 0 0 0

0 1 1 1

0 1 0 0 1 1 B = BId + BT + BT 2 + BT 3 = 0 0 1 T 1 0 0

0 1 1 1

0 1 1 1

Denicin 4.5 (-clausura) o Sea q Q, se llama -clausura(q) al conjunto de estados de Q que son accesibles desde q mediante -transiciones. Por lo tanto, clausura(q) = {p Q/qT p} Esta denicin se puede ampliar a conjuntos de estados de manera natural. o Si R Q, entonces clausura(R) = qR clausura(q) Aunque para calcular la -clausura de un estado se pueden utilizar las matrices booleanas que acabamos de ver, a continuacin se describe un algoritmo que tambin o e nos permite calcular la -clausura. Algoritmo 4.2 Clculo de la -clausura(q) a Output: Clausura Q Begin Clausura = {q} Auxiliar = while Auxiliar = Clausura do Auxiliar = Clausura Clausura = Clausura {s Q/ -transicin desde p hasta s, siendo p o Auxiliar} end while -clausura(q) = Clausura End

4.7.

Lenguaje aceptado por un AFND

Manuales uex 50

El lenguaje aceptado por un AFND es el conjunto de todas las cadenas de s mbolos terminales que pueden hacer que el AFND llegue a un estado nal de aceptacin. Para o llegar a una denicin formal de este lenguaje ampliaremos la denicin de la funcin o o o de transicin con objeto de que acepte cadenas de caracteres. Es decir, si la funcin o o de transicin de un AFND de dene as f : Q 2Q . Deniremos una funcin de o : o transicin ampliada, de la siguiente forma f : Q 2Q , donde o

TeORa De auTMaTas Y lenGuaJes FORMales


4.8. SIMULACION DE UN AFD Y AFND f (q, ) = clausura(q) f (q, ax) = {p f (r, x)/r f (q, a)} = = {p Q/ r f (q, a) y p f (r, x)} siendo a , x Una vez ampliada la denicin de la funcin de transicin, el lenguaje aceptado o o o por el AFND es: L(AF ND) = {x /f (q0 , x) F = }

51

4.8.

Simulacin de un AFD y AFND o

En esta seccin veremos sendos algoritmos que nos permitirn simular el comporo a tamiento de un AFD y de un AFND. Por tanto, permitirn determinar si una cadena a pertenece o no al lenguaje que reconoce el autmata. o Algoritmo 4.3 Simulacin de un AFD o Input: x Begin c es el primer carcter de x a q = q0 while c = Fin do q = f (q, c) c es el siguiente carcter de x a end while if q F then la palabra x ha sido reconocida por el AFD else la palabra x no ha sido reconocida por el AFD end if End Para detallar el algoritmo de simulacin de un AFND, supondremos que tenemos o implementadas las siguientes funciones: f (R, a) = qR f (q, a), siendo R Q y a clausura(R), siendo R Q La diferencia fundamental entre ambos algoritmos est en el signicado de q y S. a En el algoritmo 4.3, q representa el estado que el autmata tiene en cada instante. o Sin embargo, en el algoritmo 4.4, q es sustituido por S que representa al conjunto de los estados en los que puede estar el autmata. o

Manuales uex 51

elena JuRaDO MlaGa


TEMA 4. AUTOMATAS FINITOS

52

Algoritmo 4.4 Simulacin de un AFND o Input: x Begin c es el primer carcter de x a S = clausura(q0 ) while c = Fin do S = clausura(f (S, c)) c es el siguiente carcter de x a end while if S F = then la palabra x ha sido reconocida por el AFND else la palabra x no ha sido reconocida por el AFND end if End

4.9.

Paso de un AFND a AFD

Los AFND y los AFD tienen el mismo poder computacional (esto no ocurre en otros niveles de la jerarqu de los autmatas), es decir, pueden resolver los mismos a o problemas. Por lo tanto, dado un AFND siempre es posible encontrar un AFD que sea equivalente a l. En esta seccin estudiaremos un mtodo para resolver este problema. e o e En primer lugar explicaremos de manera genrica el paso de un autmata a otro, para e o despus ilustrar con un ejemplo este mecanismo de trasformacin. e o Partimos de un AFND = (, Q, f, q0 , F, T ) y queremos construir un AFD = (, Q , f , q0 , F ) que sea equivalente, donde: 1. Q = 2Q
2. q0 = clausura(q0 )

El autmata que se obtiene por este mtodo no tiene porqu ser m o e e nimo y podr a llegar a tener, como mximo, 2|Q| estados. a

3. F = {C Q/C F = } 4. f (C, a) = {C Q/C = qC clausura(f (q, a))}, siendo C Q

Manuales uex 52

Ejemplo 4.6 Calcularemos el AFD equivalente al AFND que se muestra en la gura 4.10. Comenzamos calculando el estado inicial q0 que es la -clausura del estado inicial del AFND. q0 =-clausura(A) = {A,C} A continuacin hay que calcular la funcin de transicin para el estado q0 o o o

TeORa De auTMaTas Y lenGuaJes FORMales

4.9. PASO DE UN AFND A AFD


b a,b A a C E b a,b a a B b D a

53

Figura 4.10: Ejemplo

f (q0 , a) = -clausura(f (A, a) f (C, a)) = -clausura(B, A) = {A, B, C, D} = q1 f (q0 , b) = -clausura(f (A, b) f (C, b)) = -clausura(B, E) = {B, D, E} = q2 Es necesario seguir calculando la funcin de transicin para los nuevos estados que o o van apareciendo. f (q1 , a) = = f (q1 , b) = = f (q2 , a) = = f (q2 , b) = = f (q3 , a) = = f (q3 , b) = = f (q4 , a) = f (q4 , b) = f (q5 , a) = = f (q5 , b) = = f (q6 , a) = f (q6 , b) = -clausura(f (A, a) f (B, a) f (C, a) f (D, a)) -clausura(B, C, A, E) = {A, B, C, D, E} = q3 -clausura(f (A, b) f (B, b) f (C, b) f (D, b)) -clausura(B, E) = {B, D, E} = q2 -clausura(f (B, a) f (D, a) f (E, a)) -clausura(C, E) = {C, E} = q4 -clausura(f (B, b) f (D, b) f (E, b)) -clausura(B, E) = {B, D, E} = q2 -clausura(f (A, a) f (B, a) f (C, a) f (D, a) f (D, a)) -clausura(B, C, A, E) = {A, B, C, D, E} = q3 -clausura(f (A, b) f (B, b) f (C, b) f (D, b) f (D, b)) -clausura(B, E) = {B, D, E} = q2 -clausura(f (C, a) f (E, a)) = -clausura(A, E) = {A, C, E} = q5 -clausura(f (C, b) f (E, b)) = -clausura(E) = {E} = q6 -clausura(f (A, a) f (C, a) f (E, a)) -clausura(B, A, E) = {A, B, C, D, E} = q3 -clausura(f (A, b) f (C, b) f (E, b)) -clausura(B, E) = {B, D, E} = q2 -clausura(f (E, a)) = -clausura(E) = q6 -clausura(f (E, b)) = -clausura(E) = q6

Manuales uex 53

elena JuRaDO MlaGa


TEMA 4. AUTOMATAS FINITOS

54

El AFD resultante aparece en la siguiente gura.

a q0 b b

q1

a a q3 b a

q2 a

q5

a,b q6 b

a q4

Figura 4.11: AFD equivalente al de la gura 4.10

Una vez obtenido el AFD, intentaremos minimizarlo. Inicialmente, Particin = {G1 , G2 } G1 = {q2 , q3 , q4 , q5 , q6 } G2 = {q0 , q1 } o Analizaremos el comportamiento de todos los estados con a y b. G1 q2 q3 q4 q5 q6 G2 q0 q1 s mbolo a q4 G1 q3 G1 q5 G1 q3 G1 q6 G1 G1 q2 q3 q4 q5 q6 G2 q0 q1 s mbolo b q2 G1 q2 G1 q6 G1 q2 G1 q6 G1

s mbolo a q1 G2 q3 G1

s mbolo b q2 G1 q2 G1

Manuales uex 54

Todos los estados de G1 son equivalentes, sin embargo, esto no ocurre con los de G2 , por lo que es necesario separarlos en dos elementos diferentes. La nueva y denitiva particin ser o a: {G1 , G2 , G3 } G1 = {q2 , q3 , q4 , q5 , q6 } G2 = {q0 } G3 = {q1 }. A continuacin se representa el nuevo autmata (gura 4.12) que es determinista, o o m nimo y equivalente al AFND del que partimos.

TeORa De auTMaTas Y lenGuaJes FORMales


4.10. RELACION ENTRE AF, GR. Y EXP. REG.
a, b G1 a G3 G1 = {q2, q3, q4, q5, q6} G2 = { q0} G3 = { q1} a, b

55

G2

Figura 4.12: AFD m nimo equivalente al del gura 4.11

4.10.

Relacin entre Autmatas Finitos, gramticas o o a y expresiones regulares

Como sabemos las gramticas regulares generan lenguajes regulares que pueden a ser representados mediante expresiones regulares. A su vez, estos lenguajes pueden ser reconocidos por Autmatas Finitos. o En esta seccin estudiaremos diferentes mtodos que nos permitirn construir o e a unos elementos a partir de otros.

4.10.1.

Construccin de la expresin regular reconocida por o o un AF

Estudiaremos dos mtodos diferentes. e El mtodo del sistema de ecuaciones e El mtodo de las funciones recursivas e Previamente se dene y demuestra la Regla de Inferencia que se aplicar en el a primer mtodo como un mecanismo para despejar incgnitas. e o Teorema 4.1 (Regla de Inferencia) Sean R, S, T tres expresiones regulares de manera que S. / Se cumple que R = SR + T R = S T Demostracin: o Suponemos que R = S T y queremos demostrar que R = SR + T R = S T = ( + S + )T = ( + SS )T = T + SS T = T + S(S T ) = T + SR

Manuales uex 55

elena JuRaDO MlaGa


TEMA 4. AUTOMATAS FINITOS Suponemos que R = SR + T y queremos demostrar que R = S T , para ello comenzaremos demostrando que S T R

56

Si S y T (como R = SR + T entonces T R y por tanto R) SR R Anlogamente y aplicando n veces el mismo razonamiento, a si 1 , . . . , n S y T 1 . . . n R S T R (consideramos que C S T = ) Supongamos que S T = R, entonces R = S T + C

R = SR + T = S(S T + C) + T = SS T + SC + T = (SS + )T + SC = S T + C = S T + SC

Eso signica que cualquier palabra de C debe pertenecer a SC (ya que no puede pertenecer a S T ) y esto es absurdo ya que S por lo tanto C = y se / cumple que S T = R El mtodo del sistema de ecuaciones e Este mtodo se basa en la denicin de una serie de e.r. que inicialmente sern e o a las incgnitas de un sistema de ecuaciones. o Partimos de un AF D = (, Q, f, q0 , F ) y para cada uno de los estados qi Q denimos una e.r. Xi que representa a todas las cadenas que permiten llegar desde el estado i hasta alg n estado nal de aceptacin. u o Xi = si F es inaccesible desde qi a Xi , a tal que f (qi , a) F

Todas las cadenas de la forma aXj pertenecen a Xi , si f (qi , a) = qj Teniendo en cuenta estas consideraciones, Xi se dene de la siguiente forma: Xi = n aij Xj + af 1 + af 2 + . . . + af m donde f (qi , aij ) = qj y f (qi , af k ) F . j=1 Adems, hay que a adir si qi F . a n Si aplicamos esta denicin para todos los estados del AF, conseguimos construir o un sistema de n ecuaciones con n incgnitas, donde n es el n mero de estados del o u AF. El sistema de ecuaciones se resolver sustituyendo unas ecuaciones en otras y a aplicando la regla de inferencia para despejar dichas incgnitas. En realidad, no es o necesario resolver el sistema completo ya que la unica incgnita que nos interesa es o X0 (considerando que q0 es el estado inicial) que es la e.r. buscada. Ejemplo 4.7 Sea el siguiente AF

Manuales uex 56

TeORa De auTMaTas Y lenGuaJes FORMales


4.10. RELACION ENTRE AF, GR. Y EXP. REG.

57

b q0

a a q1

Denimos el sistema de ecuaciones: X0 = bX0 + aX1 + a X1 = aX0 + bX1 + b + Aplicamos la regla de inferencia en la 2 ecuacin. o (considerando que R = X1 , S = b y T = aX0 + b + ) X1 = aX0 + bX1 + b + = b (aX0 + b + ) Sustituimos X1 en la primera ecuacin. o X0 = bX0 + aX1 + a = bX0 + a(b (aX0 + b + )) + a = bX0 + ab aX0 + ab b + ab + a = (b + ab a)X0 + ab Aplicamos de nuevo la regla de inferencia, esta vez en la primera ecuacin. o (ahora, R = X0 , S = b + ab a y T = ab ) X0 = (b + ab a)X0 + ab = (b + ab a) ab El mtodo de las funciones recursivas e Para que este mtodo pueda llevarse a cabo sin ambig edades es necesario numerar e u los estados a partir del 1, es decir, Q = {q1 , . . . , qn }. Tambin en este caso deniremos una serie de e.r.(en este caso, de forma recursiva) e que inicialmente sern incgnitas que es necesario calcular. a o k Cada e.r. Rij representar a las cadenas que permiten llegar del estado qi al a 0 estado qj pasando exclusivamente por los estados q1 , . . . , qk . Deniremos Rij como el conjunto de cadenas (en este caso, s mbolos) que nos llevarn directamente del estado a 0 qi al estado qj . Las e.r del tipo Rij se denen de forma directa, mientras que las e.r. k Rij , k 1 se denen de forma recursiva. si i = j {a /f (qi , a) = qj } 0 Rij = {a /f (qi , a) = qj } si i = j
k k1 k1 k1 k1 Rij = Rij + Rik (Rkk ) Rkj ,

Una vez calculadas las e.r. estado inicial y qfi F

k Rij ,

la e.r. buscada es:

n R1f1

k1

n + R1f2 + . . . donde q1 es el

Manuales uex 57

elena JuRaDO MlaGa


TEMA 4. AUTOMATAS FINITOS

58

k Ejemplo 4.8 Dado el siguiente AFD, calculamos las e.r. Rij

q1

a q2

R11 R12 R21 R22

k=0 a b+

k=1 a b+

k=2 ab b

Las dos ultimas columnas se han calculado mediante la frmula recursiva vista o anteriormente. 1 0 0 0 0 R11 = R11 + R11 (R11 ) R11 = + = 1 0 0 0 0 R12 = R12 + R11 (R11 ) R12 = a + a = a 1 0 0 0 0 R21 = R21 + R21 (R11 ) R11 = + = 1 0 0 0 0 R22 = R22 + R21 (R11 ) R12 = (b + ) + a = b + 2 1 1 1 1 R11 = R11 + R12 (R22 ) R21 = + a(b + ) = 2 1 1 1 1 R12 = R12 + R12 (R22 ) R22 = a + a(b + ) (b + ) = a + ab = ab 2 1 1 1 1 R21 = R21 + R22 (R22 ) R21 = + (b + )(b + ) = 2 1 1 1 1 R22 = R22 + R22 (R22 ) R22 = (b + ) + (b + )(b + ) (b + ) = b Teniendo en cuenta que slo hay un estado nal de aceptacin q2 , la e.r. que o o estamos buscando ser R12 = ab a 2

4.10.2.

Construccin del AF que reconoce una expresin reo o gular

Estudiaremos dos mtodos que nos ayudarn a construir un autmata que ree a o conoce el lenguaje que representa una e.r. dada. El primero construye un AFND mientras que el segundo permite construir un AFD. Paso de expresin regular a AFND De la misma forma que las e.r. se denieron o de forma recursiva, este mtodo para construir el AFND, que est basado en la e a denicin de las e.r., tambin puede considerarse recursivo. Para cada tipo de e.r. o e construiremos un AFND, de esta manera diferentes autmatas pueden ensamblarse o para construir otro ms complejo. a

Manuales uex 58

TeORa De auTMaTas Y lenGuaJes FORMales


4.10. RELACION ENTRE AF, GR. Y EXP. REG.

59

1 - e.r. =

q1

qf

2 - e.r. =

q1

3 e.r. = a

q1

a qf

q1 4 e.r. = + q0 q2

qf1

qf

qf2

5 e.r. =

q1

qf1

q2

qf

q1 6 e.r. = q0

qf1

qf

Figura 4.13: Paso de e.r. a AFND

En la gura anterior se detallan los esquemas asociados a cada una de las operaciones que podemos encontrar en una e.r., M y M representan a los autmatas que o reconocen a las e.r. y respectivamente. Paso de expresin regular a AFD Introduciremos este mtodo mediante un o e ejemplo con la e.r. (a + b)*abb. Para desarrollar este mtodo es necesario etiquetar con un nmero a cada uno e u de los s mbolos que componen la e.r. A estas etiquetas las llamaremos posiciones. Adems, a adiremos el s a n mbolo # a la derecha de la e.r. para indicar el nal de las

Manuales uex 59

elena JuRaDO MlaGa


TEMA 4. AUTOMATAS FINITOS

60 palabras del lenguaje representado. ( a + b 1 2 ) * a 3

b b 4 5

# 6

Para cada una de las posiciones es necesario denir su conjunto siguiente que estar formado por las posiciones que pueden seguir a una dada en cualquier palaa bra que pertenezca al lenguaje representado por la e.r. Para calcular estos conjuntos es necesario analizar cada una de las operaciones que intervienen en la e.r. y estudiar cmo afectan a las diferentes posiciones. Para este ejemplo, los valores de estos o conjuntos ser an: sig(1) = {1, 2, 3} sig(2) = {1, 2, 3} sig(3) = {4} sig(4) = {5} sig(5) = {6} sig(6) =

Cada estado de nuestro AFD ser un conjunto de posiciones. Los estados nales a de aceptacin sern aquellos que contienen a la posicin asociada al s o a o mbolo # (en el ejemplo, la posicin 6). Se calculan simultneamente estos estados y las transiciones o a correspondientes mediante el algoritmo 4.5. En este algoritmo hay que tener en cuenta que simb(i) indica el s mbolo del alfabeto asociado a la posicin i. En nuestro caso: o simb(1) = {a} simb(2) = {b} simb(3) = {a} simb(4) = {b} simb(5) = {b} simb(6) =

Adems, pp representa a las primeras posiciones de la e.r., es decir, las posiciones a por las que puede comenzar cualquier palabra representada por la e.r. En este ejemplo, pp = {1, 2, 3} Las siglas EM y ENM signican Estados Marcados y Estados No Marcados respectivamente, y representan a dos conjuntos de estados del autmata que se est cono a struyendo. Estos conjuntos se utilizan para saber si un estado ha sido marcado o no. Marcar un estado signica procesarlo, es decir, calcular las transiciones que parten de dicho estado. Cuando un estado se procesa pasa del conjunto ENM al conjunto EM. La construccin del autmata terminar cuando no quede ning n estado sin marcar. o o a u Veamos como se aplicar el algoritmo 4.5 al ejemplo con el que estamos trabaa jando. Comenzamos deniendo el estado inicial q0 = pp = {1, 2, 3}. Inicialmente, EM = y ENM = {q0 } A continuacin hay que calcular la funcin de transicin para el estado q0 o o o

Manuales uex 60

f (q0 , a) = sig(1) sig(3) = {1, 2, 3, 4} = q1 f (q0 , b) = sig(2) = {1, 2, 3} = q0 Ahora: EM = {q0 } y ENM = {q1 } Es necesario seguir calculando la funcin de transicin para los nuevos estados que o o van apareciendo.

TeORa De auTMaTas Y lenGuaJes FORMales


4.10. RELACION ENTRE AF, GR. Y EXP. REG. Algoritmo 4.5 Construccin del AFD a partir de la e.r. o Input: x Begin ENM = pp EM = while ENM = do Pasar T desde ENM hasta EM for all do a R = iT sig(i) tal que simb(i) = a if R = and R (EM ENM) then / a adir R a ENM n f (T, a) = R end if end for end while End f (q1 , a) = sig(1) sig(3) = {1, 2, 3, 4} = q1 f (q1 , b) = sig(2) sig(4) = {1, 2, 3, 5} = q2 EM = {q0 , q1 } y ENM = {q2 } f (q2 , a) = sig(1) sig(3) = {1, 2, 3, 4} = q1 f (q2 , b) = sig(2) sig(5) = {1, 2, 3, 6} = q3 EM = {q0 , q1 , q2 }, ENM = {q3 } f (q3 , a) = sig(1) sig(3) = {1, 2, 3, 4} = q1 f (q3 , b) = sig(2) = {1, 2, 3} = q0 EM = {q0 , q1 , q2 , q3 } y ENM = La gura 4.14 representa grcamente al autmata construido. Como se puede a o observar, el unico estado nal de aceptacin es q3 . o
a q1 a b q0 q2 a b b b a q3

61

Figura 4.14: AFD correspondiente a la e.r. (a + b) abb

Manuales uex 61

elena JuRaDO MlaGa


TEMA 4. AUTOMATAS FINITOS

62

4.10.3.

Relacin entre A.F. y gramticas regulares o a

En este apartado, se estudiarn mtodos, similares entre si, para construir el AF a e que reconoce al lenguaje generado por una gramtica regular (distinguiendo si es a lineal por la izquierda o por la derecha). De forma anloga se estudiarn mtodos a a e para construir gramticas que generen el lenguaje que reconoce un AF dado. Para a poder denir una relacin entre los AFs y las gr. regulares estableceremos, en primer o lugar, las siguientes correspondencias: Cada estado del autmata se corresponder con un s o a mbolo no terminal de la gramtica. a Cada transicin del autmata se corresponder con una produccin de la gramtica. o o a o a Paso de GLD a AFND En este caso: 1. El estado inicial del autmata se corresponder con el s o a mbolo inicial de la gramtica. a 2. Deniremos un estado nal de aceptacin P que no se corresponde con ning n o u s mbolo no terminal de la gramtica. a 3. A cada produccin de la gramtica le corresponde una transicin en el autmata o a o o seg n el siguiente esquema: u

A ::= a

a P

A ::= aB

S ::=

Manuales uex 62

Ejemplo 4.9 En la gura 4.15 se muestra la obtencin de un autmata nito a o o partir de una gramtica lineal por la derecha. a

TeORa De auTMaTas Y lenGuaJes FORMales


4.10. RELACION ENTRE AF, GR. Y EXP. REG.

63

S ::= 1A | 0B |1 A ::= 0S | 1B B ::= 0B | 1B

1 S 0

A 1 1 B 0, 1 P

Figura 4.15: Ejemplo de paso de GLD a AFND

Paso de AFND a GLD En este caso debemos tener en cuenta las mismas relaciones que hemos visto en el caso anterior. Sin embargo, las transiciones que llevan a un estado nal dan lugar a dos producciones diferentes como indica la siguiente gura.
A a B Obtenemos dos producciones: A ::= aB y A ::= a

Ejemplo 4.10 En la gura 4.16 se muestra la obtencin de una gramtica lineal o a por la derecha a partir de un autmata nito. La gramtica ha sido posteriormente o a simplicada ya que el s mbolo P no es un estado generativo.
S 1 0 1 P A S ::= 1A | 1P |1 A ::= 0S S ::= 1A |1 A ::= 0S

Figura 4.16: Ejemplo de paso de AFND a GLD

Paso de GLI a AFND Si trabajamos con GLIs, debemos tener en cuenta que: 1. El estado nal del autmata se corresponder con el s o a mbolo inicial de la gramtica. a

Manuales uex 63

elena JuRaDO MlaGa


TEMA 4. AUTOMATAS FINITOS 2. Deniremos un estado inicial llamado P que no se corresponde con ning n u s mbolo no terminal de la gramtica. a 3. A cada produccin de la gramtica le corresponde una transicin en el Autmao a o o ta seg n el siguiente esquema: u
a

64

A ::= a

A ::= Ba

S ::=

Ejemplo 4.11 En la gura 4.17 se muestra el autmata obtenido a partir de una o gramtica lineal por la izquierda. a
A 1 S 0 B 0 1 0

1 S ::= A0 | B1 A ::= S1 |1 B ::= S0 |0 P

Figura 4.17: Ejemplo de paso de GLI a AFND

Paso de AFND a GLI En este caso debemos tener en cuenta las mismas relaciones que hemos visto en el caso anterior. Sin embargo, hay que tener en cuenta que puede haber varios estados nales, en ese caso las transiciones que llevan a un estado nal dan lugar a dos producciones segn se indica en el siguiente esquema. u

Manuales uex

a A

Si A es el nico estado final, obtenemos la produccin S ::= Ba Si hay varios estados finales, obtenemos las producciones A ::= Ba y S ::= Ba

64

TeORa De auTMaTas Y lenGuaJes FORMales


4.11. L IMITES PARA LOS LENG. REGULARES

65

Ejemplo 4.12 En la gura 4.18 se muestra la gramtica lineal por la izquierda a obtenida a partir de un autmata nito. o
1 0 D 1 1 0 1 F 0

0 A 1

G 0

B ::= A0 | D0 |0 C ::= A1 | E1 |1

D ::= B1 E ::= C0 F ::= D1 | C1

G ::= E0 |G0 S ::= B1 | C0

A es no generativo F y G son B ::= D0 inaccesibles |0 C ::= E1 |1

D ::= B1 E ::= C0 S ::= B1 | C0

Figura 4.18: Ejemplo de paso de AFND a GLI

4.11.

L mites para los leng. regulares

En esta seccin estudiaremos dos resultados, el lema del bombeo y el teorema de o Myhill-Nerode que nos permitirn establecer l a mites para determinar si un lenguaje es o no regular.

4.11.1.

El lema del bombeo(pumping lemma)

El lema del bombeo enuncia una propiedad que deben cumplir todos los lenguajes regulares. El hecho de comprobar que un lenguaje no cumple dicha propiedad es suciente para demostrar que no es regular. Sin embargo, en ning n caso este lema u servir para demostrar que un lenguaje es regular. a Lema 4.1 (El lema del bombeo para leng. regulares) Sea L un lenguaje regular, entonces existe una constante asociada al lenguaje n > 0, de manera que z L tal que |z| n, se cumple que z se puede descomponer en tres partes z = uvw que verican:

2. |uv| n 3. i 0 uv i w L

Manuales uex 65

1. |v| 1

elena JuRaDO MlaGa


TEMA 4. AUTOMATAS FINITOS

66

Ejemplo 4.13 Utilizaremos el lema del bombeo para demostrar que el lenguaje L = {ak bk /k 0} no es regular. La demostracin se realizar por el mtodo de reduccin o a e o al absurdo. Es decir, supondremos que L es regular, si partiendo de esta hiptesis o llegamos a una situacin absurda habremos comprobado que nuestra suposicin inicial o o era falsa. Supongamos que L es regular y que n 0 es la constante asociada a L que menciona el lema del bombeo. Evidentemente sea cual sea el valor de n siempre es posible encontrar una palabra en L cuya longitud sea mayor que n, por ejemplo, sea z = an bn , en este caso |z| = 2n > n. Veamos diferentes formas de dividir z en tres partes: 1. z = uvw = a . . . |a . . . a| . . . ab . . . b 2. z = uvw = a . . . ab . . . |b . . . b| . . . b 3. z = uvw = a . . . |a . . . ab . . . b| . . . b En el primer caso slo se bombear as con los que conseguir o an amos cadenas con ms as que bs, que no pertenecer a L. En el segundo caso ocurrir lo contrario ya a an a que slo bombear o amos bs. En el tercer caso bombeamos as y bs simultneamente, a por tanto ser posible obtener el mismo nmero de as que de bs. Sin embargo, a u las cadenas obtenidas contendr subcadenas del tipo ababab o aabbaabbaabb, de an cualquier forma estas palabras nunca pertenecer a L. No existe ninguna otra forma an de dividir la cadena en tres partes; por tanto, hemos comprobado que el lema no se cumple y podemos asegurar que el lenguaje no es regular.

4.11.2.

El teorema de Myhill-Nerode

Este teorema nos permitir saber si un lenguaje es o no regular. Adems y en a a el caso de que el lenguaje sea regular, la demostracin del teorema nos muestra o un mtodo para construir el AFD m e nimo que reconoce a dicho lenguaje. Antes de enunciar el teorema ser necesario conocer algunas deniciones acerca de las relaciones a binarias. Consideraremos que R es una relacin de equivalencia denida sobre el o conjunto X. Denicin 4.6 (Relacin invariante por la derecha) o o Se dice que R es invariante por la derecha respecto a una operacin denida sobre o X, si se cumple que:

Manuales uex

si xRy z X, x zRy z Denicin 4.7 (Relacin de o o ndice nito) Se dice que R es de ndice nito si el cardinal de su conjunto cociente es nito, es decir, si el n mero de clases de equivalencia que dene R es nito. u

66

TeORa De auTMaTas Y lenGuaJes FORMales


4.11. L IMITES PARA LOS LENG. REGULARES

67

Teorema 4.2 (Teorema de Myhill-Nerode) Dado un lenguaje L denido sobre un alfabeto , las siguientes armaciones son equivalentes: 1. L es regular 2. L es la unin de algunas clases de equivalencia de una relacin de equivalencia o o RM denida sobre que es de ndice nito e invariante por la derecha respecto a la concatenacin. o 3. A partir de L se puede denir una relacin binaria RL sobre , de la siguiente o forma: xRL y z xz L yz L

Es decir, o ambas cadenas (xz e yz) pertenecen a L, o ninguna de las dos pertenece a L. o ndice nito e Se cumple que la relacin RL es una relacin de equivalencia, de o invariante por la derecha respecto a la concatenacin. o Demostracin. o Para demostrar este teorema comprobaremos en primer lugar que 1 2, despus e que 2 3 y nalmente que 3 1. 1 = 2 Suponemos que L es regular, entonces existe un AF D = (, Q, f, q0 , F ) que lo reconoce. A partir de este autmata podemos denir una relacin binaria sobre o o a la que llamaremos RM : x, y xRM y f (q0 , x) = f (q0 , y)

Manuales uex 67

Es evidente que esta relacin es de equivalencia y adems tendremos tantas clases o a de equivalencia como estados tenga el autmata, por tanto, ser una relacin de o a o ndice nito. Veamos que RM es de invariante por la derecha respecto a la concatenacin. Si o xRM y f (q0 , x) = f (q0 , y) f (q0 , xz) = f (q0 , yz) z xzRM yz c.q.d. Si x entonces [x] representa a la clase de equivalencia de x, es decir, [x] es el conjunto de todas las cadenas que estn relacionadas con x. a Utilizando esta notacin y teniendo en cuenta la denicin de RM es evidente que o o L = {[x]/f (q0 , x) F }. Es decir, L es la unin de varias clases de equivalencia de o RM , concretamente, tantas como estados nales tenga el autmata. o

elena JuRaDO MlaGa


TEMA 4. AUTOMATAS FINITOS

68

2 = 3 Suponemos que L es la unin de varias clases de equivalencia denidas o por una relacin a la que llamaremos RM que es de o ndice nito e invariante por la derecha. Por otra parte, se ha denido la relacin RL de la siguiente forma: o xRL y z xz L yz L

o Es evidente que RL es una relacin de equivalencia. Veamos que es invariante por la derecha: xRL y = z xz L yz L = z, z xzz L yzz L = z xzRL yz Comprobaremos a continuacin que xRM y xRL y. Si esto ocurre el n mero de o u clases de equivalencia que genera RM ser mayor o igual que el nmero de clases de a u RL , lo que permitir armar que RL es de a ndice nito. si [xz] L xz L, yz L xRM y = z xzRM yz = como[xz] = [yz] si [xz] L xz L, yz L / / = xz L yz L = xzRL yz c.q.d. ndice nito e invariante por la derecha. Para 3 = 1 Suponemos que RL es de demostrar que L es un lenguaje regular, vamos a construir un AF D = (, Q, f, q0 , F ) que lo reconozca. Q = /RL q0 = [] f ([x], a) = [xa] F = {[x]/x L}

Q es un conjunto nito porque RL es de ndice nito. f est bien denido porque si [x] = [y] [xa] = [ya]a ya que RL es a invariante por la derecha respecto a la concatenacin f ([x], a) = f ([y], a) o Este autmata nito que se ha denido reconoce a L ya que o x L [x] F f (q0 , x) = f ([], x) = [x] F Como hemos demostrado que L es reconocido por un Autmata Finito, podemos o asegurar que L es un lenguaje regular. Ejemplo 4.14 Utilizando el teorema de Myhill-Nerode construiremos el AFD mni mo que reconozca el lenguaje 0 10 . q0 = [] = f (q0 , 0) = [0] = [0] f (q0 , 1) = [1] = [1] [0] = []? z 0z L z L? Cierto = f (q0 , 0) = [0] = q0

Manuales uex 68

TeORa De auTMaTas Y lenGuaJes FORMales


4.11. L IMITES PARA LOS LENG. REGULARES [1] = []? z f (q1 , 0) = [10] [10] = []? z [10] = [1]? z [11] = []? z [11] = [1]? z f (q2 , 0) = [110] 1z L z L? Falso = f (q0 , 1) = [1] = q1 f (q1 , 1) = [11] 10z L z L? Falso 10z L 1z L? Cierto = f (q1 , 0) = [10] = q1 11z L z L? Falso 11z L 1z L? Falso = f (q1 , 1) = [11] = q2 f (q2 , 1) = [111] 110z L 11z L? Cierto = f (q2 , 0) = q2 111z L 11z L? Cierto = f (q2 , 1) = q2

69

[110] = [11]? z [111] = [11]? z

La siguiente gura muestra el autmata que se acaba de construir. o


0 q0 1 q1 q1 =[1]=[01] 0 1 q2 0,1

q0 = []=[0]=[00]

q2=[11]=[110]=[111]

Es importante destacar que el estado q0 = [] = [0] representa a todas las cadenas binarias que no tienen ningn 1, el estado q1 = [1] = [10] representa a las cadenas u binarias que tienen un solo 1 y, por tanto, pertenecen al lenguaje (por ese motivo es el unico estado nal de aceptacin), y el estado q2 = [11] representa a las cadenas o que tienen ms de un 1. Es evidente que q0 , q1 y q2 o, lo que es lo mismo, las clases de a equivalencia [], [1] y [11] constituyen una particin del lenguaje universal (0 + 1) . o Ejemplo 4.15 Utilizando el teorema de Myhill-Nerode es posible demostrar que el lenguaje L = {an bn / n 0} no es regular. Comprobaremos que existe un n mero innito de clases de equivalencia para la u relacin RL , concretamente [a] = [a2 ] = [a3 ] = . . . o Bastar demostrar que [ai ] = [aj ] cuando i = j, o lo que es lo mismo, que a / ai RL aj cuando i = j. / / Sea z = bj entonces aj z L y sin embargo ai z L = ai RL aj

Manuales uex 69

elena JuRaDO MlaGa


TEMA 4. AUTOMATAS FINITOS

70

4.12.

Problemas

4.1 Minimizar el siguiente autmata o a b q0 q1 q2 q1 q3 q2 q2 q4 q1 q3 q4 q3 q4 q3 q4 4.2 Construir un AFD m nimo a partir del siguiente AFND: 0 1 p {q, s} q q q s p 4.3 Qu lenguajes reconocen los siguientes autmatas? e o
A 0 1 1 0 0,1

B 0 1 1 0 1

1 C 1 0 1 0 0 0,1

0 0 1 1 0 1 0,1

0,1

Manuales uex 70

4.4 A partir de los siguiente Autmatas Finitos: o

TeORa De auTMaTas Y lenGuaJes FORMales

4.12. PROBLEMAS a b {B, D} C A A

71

0 1 A B C B D C E D B E C construir una GLD y una GLI, limpias y bien formadas, para generar los lenguajes que reconocen dichos autmatas. Calcular las expresiones regulares que describen o dichos lenguajes utilizando el mtodo del sistema de ecuaciones. e A B C D 4.5 Utilizando el mtodo de los conjuntos siguientes calcular el AFD que reconoce e a cada uno de los siguientes lenguajes: 1. ab c + a c 2. b (a + bc) 3. a(bc) + ab(cb) cd 4.6 Utilizando el teorema de Myhill-Nerode construir un AFD m nimo que reconozca los lenguajes L1 = (ab) y L2 = ab

Manuales uex 71

TeORa De auTMaTas Y lenGuaJes FORMales

Tema 5 Gramticas Independientes del a Contexto y Autmatas de Pila o


Contenido
5.1. Denicin de G.I.C. . . . . . . . . . . . . . . . . . . . . . . o 5.2. Autmatas de Pila . . . . . . . . . . . . . . . . . . . . . . . o 5.3. Arboles de derivacin . . . . . . . . . . . . . . . . . . . . . o 5.4. Reconocimiento descendente . . . . . . . . . . . . . . . . . 5.5. Reconocimiento ascendente . . . . . . . . . . . . . . . . . 5.6. Propiedades de los L.I.C. . . . . . . . . . . . . . . . . . . . 5.7. Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 74 77 80 87 93 95

73

Manuales uex 73

En este tema se estudiarn las Gramticas Independientes del Contexto (GIC), los a a lenguajes que stas denen, llamados lenguajes independientes del contexto (LIC), e y los autmatas que reconocen a estos ultimos, los Autmatas de Pila (AP). Cono o siderando la jerarqu de Chomsky, tambin se les llama respectivamente gramticas a e a y lenguajes de tipo 2. Estas gramticas, igual que ocurre con las regulares, tienen una a gran importancia prctica en la denicin de lenguajes de programacin, ya que nos a o o permiten formalizar el concepto de sintaxis, de la misma forma que los Autmatas o de Pila nos permitirn modelar el funcionamiento del analizador sintctico, una de a a las partes fundamentales de un compilador. Anlogamente, los lenguajes regulares y a los Autmatas Finitos permiten representar los aspectos lxicos y el anlisis lxico, o e a e respectivamente, de los lenguajes de programacin. o

elena JuRaDO MlaGa


TEMA 5. G.I.C Y AUTOMATAS DE PILA

74

5.1.

Denicin de G.I.C. o

En las Gramticas Independientes del Contexto las producciones son menos resa trictivas que en las gramticas regulares. En este caso, la parte izquierda de la produca cin tambin est formada por un unico s o e a mbolo no terminal, pero no hay restricciones respecto a la parte derecha de la produccin. Por lo tanto, las producciones son de o la forma: A ::= v donde A N , v

En este tipo de gramticas, la conversin de A en v se realiza independientemente a o del contexto en el que se encuentre A, de ah su nombre.

5.2.

Autmatas de Pila o

De la misma forma que cualquier lenguaje regular puede ser reconocido por un Autmata Finito, cualquier lenguaje independiente del contexto puede ser reconocido o por un Autmata de Pila. Sin embargo, en este caso la equivalencia es menos satiso factoria ya que los Autmatas de Pila no son dispositivos deterministas y el conjunto o de los Autmatas de Pila Deterministas slo permite reconocer a un subconjunto de o o los lenguajes de tipo 2. Afortunadamente, este subconjunto suele ser suciente para denir los aspectos ms comunes de cualquier lenguaje de programacin. a o En esencia, un Autmata de Pila es un Autmata Finito al que se le ha incorporao o do memoria que se gestiona como una pila, con lo que se aumenta su poder funcional. El dispositivo ser no determinista y tendr un n mero nito de movimientos (o trana a u siciones) a elegir en cada situacin. Hay dos tipos de movimientos: o 1. Dependiendo del estado actual del Autmata, del s o mbolo que hay en la cima de la pila y del que hay en la cadena de entrada, habr que elegir entre un a conjunto de posibles transiciones. Cada transicin est formada por un posible o a cambio de estado y por una cadena (puede ser ) que reemplazar al s a mbolo que ocupa la cima de la pila. Despus de realizar un movimiento se avanza en e el anlisis de la cinta de entrada. a 2. Se le llama -movimiento y es similar al anterior salvo que el s mbolo de la cadena de entrada no se tiene en cuenta y, por tanto, el anlisis de dicha cadena a no avanza.

Manuales uex

Deniremos formalmente un Autmata de Pila de la siguiente forma: o AP = {Q, , f, , q0 , z0 , F } Q es el conjunto nito de estados

74

TeORa De auTMaTas Y lenGuaJes FORMales


5.2. AUTOMATAS DE PILA es el alfabeto de la cinta de entrada es el alfabeto de la pila q0 Q es el estado inicial z0 es el s mbolo inicial del la pila F Q es el conjunto de estados nales f (q, a, z) = {(p1 , 1 ), (p2 , 2 ), . . . , (pn , n )} Estas transiciones indican que si el Autmata de Pila se encuentra en el estado o q, recibe como entrada el s mbolo a y z es el s mbolo que se encuentra en la cima de la pila, el Autmata puede pasar al estado p1 y reemplazar en la pila el o carcter z por la cadena 1 , o bien elegir cualquiera de las otras posibilidades. a Para describir formalmente la conguracin de un Autmata de Pila en un inso o tante dado, utilizamos la Descripcin Instantnea(DI). La DI estar denida por o a a una tupla (q, w, ) donde q es el estado actual del Autmata, w es la cadena de o s mbolos de entrada que a n queda por procesar, y es la cadena de los s u mbolos almacenados en la pila (el carcter ms a la izquierda de ser la cima de la pila). a a a Utilizaremos la notacin (q, aw, z) (p, w, ) cuando (p, ) f (q, a, z). La o notacin (q, w, ) (p, w , ) indica que se ha pasado de la primera situacin a la o o segunda en un n mero indeterminado de transiciones. u Lenguaje aceptado por un Autmata de Pila El lenguaje aceptado por un o Autmata de Pila se puede denir de dos formas diferentes y equivalentes: o 1. De forma anloga a los Autmatas Finitos, es decir, el lenguaje aceptado es a o el conjunto de entradas que hacen que el Autmata llegue a un estado nal. o L(M) = {w /(q0 , w, z0 ) (p, , ), p F } 2. El lenguaje est formado por el conjunto de entradas que vac la pila. En a an este caso decimos que es un Autmata de Pila Vaca. Para esta denicin el o o conjunto F es irrelevante y podemos considerar que F = . f : Q ( ) P(Q )

75

Dado un lenguaje independiente del contexto siempre es posible encontrar un Autmata de Pila con estados nales y un Autmata de Pila Vac que reconozcan o o a a dicho lenguaje.

Manuales uex 75

N(M) = {w /(q0 , w, z0) (p, , )}.

elena JuRaDO MlaGa


TEMA 5. G.I.C Y AUTOMATAS DE PILA

76

La estrategia ser la siguiente: mientras se procesan los primeros caracteres de a la cadena (que debern ser 0s), stos se almacenan en la pila. Cuando se llega a a e la segunda mitad de la cadena y comienzan a llegar 1s, se pasa a otro estado cuya misin ser eliminar un 0 de la pila por cada 1 que se procese. Cuando se termine de o a procesar la cadena, la pila deber estar vac (en realidad, slo almacenar el s a a o a mbolo inicial de la pila z0 ). Y la funcin de transicin se dene de la siguiente forma: o o f (q0 , 0, z0) = (q1 , 0z0 ) f (q1 , 0, 0) = (q1 , 00) f (q1 , 1, 0) = (q2 , ) f (q2 , 1, 0) = (q2 , ) f (q2 , , z0 ) = (q0 , ) El AP se dene: Q = {q0 , q1 , q2 } = {0, 1} = {z0 , 0} F = {q0 }

Ejemplo 5.1 Construiremos un Autmata de Pila con estados nales para el lenguao je L = {0n 1n /n 0}, generado por la GIC S ::= 0S1|

en el estado q1 se a aden caracteres a la pila n en el estado q2 se eliminan caracteres de la pila

En este caso el estado inicial tambin es estado nal debido a que L. Cualquier e situacin que no haya sido denida indicar un error. Por ejemplo, si la cadena o a comienza con 1 el autmata detectar el error, ntese que la funcin de transicin no o a o o o est denida para la situacin (q0 , 1, z0 ). a o

Ejemplo 5.2 Construiremos un Autmata de Pila Vac para el lenguaje o a a L = {w2w 1/w (0 + 1) } generado por la gramtica S ::= 0S0 | 1S1 | 2 La estrategia ser la siguiente: cuando se est procesando la primera mitad de la a a cadena (antes de recibir el 2), los caracteres se almacenan en la pila. Cuando comienza a llegar la segunda mitad de la cadena, cada carcter debe coincidir con el que est en a a la cima de la pila, si es as se borra la cima y se continua el proceso. Cuando se termine de procesar la cadena, la pila debe estar vaca. El AP se dene Q = {q0 , q1 } La funcin de transicin ser: o o a = {0, 1, 2} = {z0 , 0, 1}

Manuales uex 76

TeORa De auTMaTas Y lenGuaJes FORMales


5.3. ARBOLES DE DERIVACION f (q0 , 0, z0) = (q0 , 0z0 ) f (q0 , 1, z0) = (q0 , 1z0 ) f (q0 , 0, 0) = (q0 , 00) f (q0 , 1, 0) = (q0 , 10) f (q0 , 0, 1) = (q0 , 01) f (q0 , 1, 1) = (q0 , 11) f (q0 , 2, z0) = (q1 , z0 ) f (q0 , 2, 0) = (q1 , 0) f (q0 , 2, 1) = (q1 , 1) f (q1 , 0, 0) = (q1 , ) f (q1 , 1, 1) = (q1 , ) f (q1 , , z0 ) = (q1 , )

77

esta funcin se puede simplicar o utilizando como comod * que n representa a {z0 , 0, 1} f (q0 , 0, ) = (q0 , 0) f (q0 , 1, ) = (q0 , 1) f (q0 , 2, ) = (q1 , ) f (q1 , 0, 0) = (q1 , ) f (q1 , 1, 1) = (q1 , ) f (q1 , , z0 ) = (q1 , )

Ejemplo 5.3 Construiremos un Autmata de Pila Vac para el lenguaje o a L = {ww 1/w (0 + 1) } generado por la GIC S ::= 0S0|1S1|. En este caso no podremos construir un AP determinista ya que no es posible conocer cul es el punto medio de la cadena, momento en el que ser necesario cambiar a a de estado. Cada vez que lleguen dos s mbolos iguales seguidos cabe la posibilidad de que estemos en el centro de la cadena por lo que hay que considerar el hecho de que el autmata pueda cambiar de estado. La estrategia ser similar a la del ejemplo o a anterior. El AP se dene Q = {q0 , q1 } = {0, 1} = {z0 , 0, 1} La funcin de transicin ser: o o a f (q0 , 0, z0) = (q0 , 0z0 ) f (q0 , 1, z0) = (q0 , 1z0 ) f (q0 , 0, 0) = {(q0 , 00), (q1 , )} f (q0 , 0, 1) = (q0 , 01) f (q0 , 1, 0) = (q0 , 10) f (q0 , 1, 1) = {(q0 , 11), (q1 , )} f (q1 , 0, 0) = (q1 , ) f (q1 , 1, 1) = (q1 , ) f (q1 , , z0 ) = (q1 , )

hay dos posibilidades, considerando o no el haber llegado al centro de la cadena idem

la pila queda vac a

5.3.

Arboles de derivacin o

Manuales uex 77

El arbol de derivacin, al representar las producciones utilizadas para generar o una palabra, est indicando adems su estructura, lo que resulta determinante para a a entender su signicado. Por esa razn, en los mecanismos para reconocer lenguajes o independientes del contexto no es suciente con indicar si una cadena determinada pertenece o no al lenguaje, tambin es muy importante que el reconocedor construya e el rbol de derivacin de dicha cadena. a o

elena JuRaDO MlaGa


TEMA 5. G.I.C Y AUTOMATAS DE PILA

78

Cada nodo interno del rbol ser un s a a mbolo no terminal de la gramtica mientras a que las hojas sern los s a mbolos terminales. Una produccin como A ::= X1 . . . Xn se o representar como un subrbol cuyo nodo padre es A siendo sus hijos los s a a mbolos X1 , . . . , Xn . Si en un paso de la construccin del rbol, se aplica una produccin al s o a o mbolo no terminal que est situado ms a la izquierda del rbol, se dice que es una derivacin a a a o por la izquierda. La misma denicin se aplica a derivacin por la derecha. o o

5.3.1.

Ambigedad. u

Una gramtica es ambigua cuando es posible construir dos o ms rboles de a a a derivacin diferentes para una misma palabra. El problema de la ambig edad es muy o u complejo ya que no existe ning n algoritmo que permita reconocer si una gramtica u a es o no ambigua y, en el caso de que lo sea, tampoco existe ning n algoritmo que u permita eliminar dicha ambig edad (ni siquiera es posible eliminarla en todos los u casos). Los lenguajes independientes del contexto para los cuales todas las GIC que los generan son ambiguas, se dice que tienen una ambigedad inherente. u Ejemplo 5.4 (Gramtica ambigua) Un ejemplo clsico de gramtica ambigua se a a a presenta en la denicin de las expresiones aritmticas que aparecen com nmente o e u en los lenguajes de programacin. El siguiente ejemplo simplicado permite denir o expresiones en las que intervienen las cuatro operaciones aritmticas bsicas con e a operandos que pueden ser identicadores (id) o constantes (cte). Llamaremos a esta gramtica G Exp 0. a T = {id, cte, (, ), +, , , /} N = {< expre >, < op >} S =< expre > < expre >::=< expre >< op >< expre > |(< expre >) |id |cte P = < op >::= + | | |/

Manuales uex 78

Es fcil demostrar que esta gramtica es ambigua construyendo dos rboles difea a a rentes para generar la misma expresin, concretamente id + cte * id o

TeORa De auTMaTas Y lenGuaJes FORMales


5.3. ARBOLES DE DERIVACION

79

<expre> <expre> <expre> id <op> + <expre> cte <op> <expre> <expre> <op>

<expre> <expre> <expre> <op> <expre> id

id

id

cte

Figura 5.1: Ejemplo de ambig edad u

Analizando la gura 5.1 es fcil comprobar que la ambig edad est provocada a u a por la ausencia de una jerarqu entre los operadores. En el rbol de la izquierda a a la operacin suma, entre los dos primeros operandos, se lleva a cabo antes que la o multiplicacin. Sin embargo, en el rbol de la derecha se comenzar multiplicando o a a los dos ultimos operandos y al resultado de esta operacin se le sumar el valor o a del primer operando. Es evidente que a pesar de que la expresin es correcta, la o utilizacin de cada rbol generar en cada caso resultados diferentes. o a a Para resolver este caso de ambig edad hay que imponer una jerarqu entre los u a operadores. Como suele ser habitual consideraremos que la multiplicacin y la divisin o o tienen una prioridad ms alta que la suma y la resta. Si aparecen varias operaciones a con la misma prioridad se ejecutarn de izquierda a derecha, aunque en este caso el a resultado de la expresin siempre ser el mismo. Para denir la jerarqu se van a o a a introducir en la gramtica nuevos s a mbolos no terminales: < termino > y < op adt > estarn asociados a los operadores aditivos suma y a resta. < f actor > y < op mult > estarn asociados a los operadores multiplicacin y a o divisin. o

N = {< expre >, < termino >, < f actor >, < op adt >, < op mult >} S =< expre >

Manuales uex 79

As llegamos a la siguiente gramtica, equivalente a G Exp 0: a

elena JuRaDO MlaGa


TEMA 5. G.I.C Y AUTOMATAS DE PILA < expre >::=< expre >< op adt >< termino > | < termino > < termino >::=< termino >< op mult >< f actor > | < f actor > < f actor >::= (< expre >) |id P = |cte < op adt >::= + | < op mult >::= |/

80

Con esta nueva gramtica, a la que llamaremos G Exp 1, la expresin anterior a o tendr un unico arbol de derivacin que se representa en la gura 5.2. a o

<expre> <expre> <termino> <factor> id + <op_adt> <termino> <termino> <op_mult> <factor> <factor> cte

id

Figura 5.2: Nuevo rbol de derivacin a o

Este arbol representa la estructura de la expresin id + cte * id, obligando a o que la multiplicacin se realice antes que la suma. o

5.4.

Reconocimiento descendente

Manuales uex 80

En general, un reconocedor es un algoritmo que recibe como entrada una palabra w + , examina sus s mbolos de izquierda a derecha e intenta construir un arbol T de derivacin para dicha palabra. Con el proceso de construccin del rbol se obtiene o o a adems la estructura de la palabra, las producciones gramaticales que han de aplicarse a y el orden en el que deben utilizarse.

TeORa De auTMaTas Y lenGuaJes FORMales

5.4. RECONOCIMIENTO DESCENDENTE

81

Un reconocedor descendente o analizador sintctico descendente es un mtodo de a e reconocimiento de palabras de un LIC que se caracteriza porque construye el rbol a de derivacin de cada palabra de manera descendente, es decir, desde la raz hasta o las hojas. A continuacin se describir un reconocedor descendente llamado LL(1) (Lefto a Left(1)). De su nombre, la primera L indica que la cadena se analiza de izquierda a derecha, la segunda L indica que en cada paso se construye la derivacin por la o izquierda, y el 1 indica que slo es necesario un carcter para que el reconocedor o a decida qu produccin debe utilizar en la construccin del rbol. e o o a Como paso previo a la descripcin de los reconocedores LL(1) estudiaremos alo gunos aspectos de las GIC que es importante detectar y evitar para el correcto funcionamiento del mtodo. e

5.4.1.

Simplicacin de las GIC o

Hay diferentes formas de restringir el formato de las producciones sin mermar por ello el poder generativo de una GIC. En determinadas situaciones nos interesar trasformar una gramtica en otra equivalente de forma que las producciones a a cumplan ciertos requisitos que faciliten la construccin de un reconocedor para dicha o gramtica. Podemos encontrar en las GIC tres defectos que es conveniente eliminar: a los prejos comunes, la recursividad por la izquierda y la ambigedad. u 1. Eliminacin de los prejos comunes. Una gramtica tiene prejos comunes o a cuando hay dos o ms producciones que, teniendo la misma parte izquierda, a tienen algunos s mbolos coincidentes en el comienzo de la parte derecha de la produccin. La forma de eliminar los prejos comunes es muy sencilla, se o pretende sacar factor comn de los s u mbolos que constituyen el prejo com n. u A esta operacin se la llama factorizar por la izquierda. o En general, si nos encontramos con la siguiente situacin: o Estas producciones se pueden sustituir por las siguientes, en las que ha sido necesario a adir un nuevo s n mbolo no terminal A . A ::= A |1 | . . . |m A ::= 1 |2 | . . . |n A ::= 1 |2 | . . . |n |1 | . . . |m considerando que n 2 y que || > 0

La recursividad por la izquierda resulta perjudicial a la hora de construir reconocedores LL(1), por lo que la eliminaremos sustituyndola por recursividad e por la derecha.

Manuales uex 81

2. Eliminacin de la recursividad por la izquierda. En una gramtica es o a muy frecuente encontrar producciones recursivas. Estas tienen la forma X ::= X. Sern recursivas por la izquierda cuando su forma sea X ::= X, y a recursivas por la derecha si son de la forma X ::= X

elena JuRaDO MlaGa


TEMA 5. G.I.C Y AUTOMATAS DE PILA Considerando la siguiente situacin: o A ::= A1 |A2 | . . . |An |1 | . . . |m

82

Estas producciones se pueden sustituir por las siguientes, en las que ha sido necesario a adir un nuevo s n mbolo no terminal A : A ::= 1 A | . . . |m A A ::= 1 A |2 A | . . . |n A |

Ejemplo 5.5 Utilizaremos la gramtica de las expresiones aritmticas presena e tada en la pgina 78. Para representar de forma ms compacta dicha gramtica a a a utilizaremos letras may sculas para indicar cuales son los s u mbolos no terminales de acuerdo al siguiente criterio: < expre >= E < op adt >= A < f actor >= F < termino >= T

< op mult >= M

De esta forma, representamos a continuacin la gramtica no ambigua original o a a la izquierda y la nueva versin, a la que llamaremos G Exp 2, a la derecha. o En esta ultima versin de la gramtica se ha eliminado la recursividad por la o a izquierda. Como la recursividad por la izquierda aparece en las producciones que tienen a E y a T en la parte izquierda, ser necesario a adir dos nuevos a n s mbolos no terminales a los que llamaremos E y T. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. G Exp 1 E::=E A T |T T::=T M F |F F::=(E) |id |cte A::=+ |M::=* |/ 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. G Exp 2 E::=T E E::=A T E | T::=F T T ::= M F T | F::=(E) |id |cte A::=+ |M::=* |/

Manuales uex

3. Ambigedad. No existe ning n algoritmo que nos permite eliminar la amu u big edad de forma sistemtica. Sin embargo, y como vimos en el ejemplo de la u a pgina 78, en ocasiones es posible resolver este problema analizando cuales son a sus causas.

82

TeORa De auTMaTas Y lenGuaJes FORMales

5.4. RECONOCIMIENTO DESCENDENTE

83

5.4.2.

Reconocedores LL(1)

En la construccin de los reconocedores LL(1) es muy importante el papel que o juegan los s mbolos directores de las producciones que, como su nombre indica, dirigirn el anlisis de la cadena, es decir, indicarn cul es la produccin que ha de a a a a o utilizarse en cada paso de la construccin del rbol. Para llegar a la denicin de o a o s mbolos directores de una produccin ser necesario conocer otras deniciones preo a vias, todas ellas relativas a una GIC. Los ejemplos que aparecen en esta seccin estn o a basados en la gramtica G Exp 2. a Denicin 5.1 (Cadena o palabra anulable) o Una cadena w es anulable si, a partir de ella, y utilizando algunas producciones N gramaticales se puede generar la palabra nula (). Es evidente que no puede haber s mbolos terminales en una cadena anulable. Ejemplos de cadenas anulables en G Exp 2: E E T T E Denicin 5.2 (Produccin anulable) o o Una produccin X ::= es anulable si es una cadena anulable. o Una produccin anulable en modo alguno puede considerarse eliminable. Esto se debe o a que aunque a partir de una produccin anulable es posible llegar a , tambin es o e posible generar otras cadenas utilizando derivaciones diferentes. Las producciones no generativas son, obviamente, anulables. Ejemplos de producciones anulables en G Exp 2: Las producciones no 3 y 6. Denicin 5.3 (S o mbolos Iniciales) Los s mbolos iniciales de una cadena w (N T ) son los s mbolos terminales por los que pueden comenzar todas las palabras que podamos obtener a partir de ella.
INIC(w) = {a T / w a, }

Mtodo para calcular los S e mbolos Iniciales Hay que tener en cuenta las siguientes consideraciones: 1. Si w comienza por un s mbolo terminal es trivial: INIC(w) = {a} w = a, a T =

INIC(w) =

INIC(X) INIC() si X es anulable INIC(X) si X no es anulable

Manuales uex 83

2. Si w comienza por un s mbolo no terminal, hay que considerar la posibilidad de que el s mbolo por el que comienza sea anulable y aplicar esta consideracin o reiteradamente. w = X, X N =

elena JuRaDO MlaGa


TEMA 5. G.I.C Y AUTOMATAS DE PILA 3. Si X ::= 1 |2 | . . . |n entonces INIC(X) = INIC(1 ) . . . INIC(n ) Ejemplos de s mbolos iniciales: INIC(AT E ) = {+, } INIC((E)) = {(} INIC(F T ) = {(, id, cte} INIC(MF T ) = {, /} Denicin 5.4 (Forma sentencial) o Es una cadena w (N T ) que puede generarse a partir del s mbolo inicial de una GIC utilizando un nmero indeterminado de producciones. u Denicin 5.5 (S o mbolos Seguidores) Los s mbolos seguidores de un s mbolo no terminal X, son los s mbolos terminales que pueden aparecer inmediatamente a la derecha de X en una forma sentencial cualquiera. SEG(X) = {a T / S Xa , } Ejemplos de s mbolos seguidores: E T E F T E (E)T E =) SEG(E) E T E F T idMF T idMcteT = cte SEG(M) Mtodo para calcular los S e mbolos Seguidores de X. Este mtodo se basa e en el examen de las producciones de la gramtica. El mtodo se divide en dos fases y a e es necesario calcular simultneamente los s a mbolos seguidores de todos los s mbolos no terminales. Fase 1. En la primera fase examinaremos aquellas producciones en las que X aparece en la parte derecha seguido por algn s u mbolo gramatical. Situacin A. Si hay una produccin de la forma: Y ::= Xa donde o o a T , = a SEG(X)

84

Situacin C. Si hay una produccin de la forma: Y ::= X donde o o + es anulable , = INIC() SEG(X) N

Situacin B. Si hay una produccin de la forma: Y ::= XZ donde o o Z N , = INIC(Z) SEG(X)

Una vez que han sido consideradas estas tres situaciones se obtiene una lista provisional de s mbolos seguidores que es necesario ampliar con la segunda fase. Fase 2. En esta segunda fase buscaremos producciones en las que X se encuentre al nal de la parte derecha.

Manuales uex

Situacin E. Si hay una produccin de la forma: Y ::= X donde o o + N es anulable y = SEG(Y ) SEG(X)

Situacin D. Si hay una produccin de la forma: Y ::= X donde o o = SEG(Y ) SEG(X)

84

TeORa De auTMaTas Y lenGuaJes FORMales

5.4. RECONOCIMIENTO DESCENDENTE

85

Tras considerar las situaciones D y E con todas las producciones, se obtiene una coleccin de relaciones de inclusin entre los conjuntos de s o o mbolos seguidores previamente calculados. Si se consideran ordenadamente todas estas inclusiones, tomando como punto de partida la lista provisional calculada en la fase 1, se consigue la lista denitiva. Si consideramos que el s mbolo $ aparece al nal de cualquier cadena, hay que tener en cuenta siempre que $ SEG(S) Ejemplo 5.6 Los seguidores de los s mbolos no terminales para la gramtica G Exp 2 a son los siguientes: E E T T F A M Fase 1 )$ +*/ ( id cte ( id cte Fase 2 )$ )$ +-)$ +-)$

Para llevar a cabo la segunda fase del mtodo se han considerado las siguientes e relaciones de inclusin: o SEG(E) SEG(E ) SEG(T ) SEG(T ) SEG(F ) Denicin 5.6 (S o mbolos directores de una produccin) o El clculo de los s a mbolos directores de una produccin (X ::= ) es inmediato. o Sabiendo calcular los S mbolos Iniciales, los Seguidores y sabiendo identicar las Cadenas anulables, basta con aplicar la siguiente frmula: o INIC() si no es anulable DIR(X ::= ) = INIC() SEG(X) si es anulable Cuando se est construyendo el rbol de derivacin correspondiente a una palabra, a a o se analizan de izquierda a derecha los caracteres de dicha palabra y se decide cul a es la produccin que se va a utilizar. Para tomar esa decisin hay que considerar o o que, en cada momento, se debe llevar a cabo la derivacin por la izquierda siempre y o cuando el carcter que se est procesando en ese momento forme parte de los S a a mbolos Directores de la produccin a utilizar. o Gramticas LL(1) a Una gramtica ser LL(1) si es posible construir para ella un reconocedor LL(1) a a determinista. Para que esto ocurra es necesario que la consulta del siguiente s mbolo

Manuales uex 85

elena JuRaDO MlaGa


TEMA 5. G.I.C Y AUTOMATAS DE PILA

86

de la palabra que se est analizando permita determinar sin incertidumbre la proa duccin que se debe utilizar para proseguir con el anlisis. Por lo tanto, para que o a una gramtica sea LL(1) es necesario que todas las producciones que tienen el mismo a s mbolo en la parte izquierda no tengan ningn S u mbolo Director en com n. Es decir, u considerando que: X ::= 1 |2 | . . . |n y que D1 = DIR(X ::= 1 ) D2 = DIR(X ::= 2 ) ... Dn = DIR(X ::= n )

La gramtica ser LL(1) si Di Dj = , i = j i, j {1, . . . , n} a a Para que una GIC sea LL(1) es imprescindible que no sea ambigua, que no tenga prejos comunes, ni recursividad por la izquierda. Ejemplo 5.7 Los s mbolos directores para las producciones de la gramtica G Exp 2 a son los siguientes: DIR1 = DIR(E ::= T E ) = {(, cte, id} DIR2 = DIR(E ::= AT E ) = {+, } DIR3 = DIR(E ::= ) = SEG(E ) = {), $} DIR4 = DIR(T ::= F T ) = {(, cte, id} DIR5 = DIR(T ::= MF T ) = {, /} DIR6 = DIR(T ::= ) = SEG(T ) = {+, , ), $} DIR7 = DIR(F ::= (E)) = {(} DIR8 = DIR(F ::= id) = {id} DIR9 = DIR(F ::= cte) = {cte} DIR10 = DIR(A ::= +) = {+} DIR11 = DIR(A ::= ) = {} DIR12 = DIR(M ::= ) = {} DIR13 = DIR(M ::= /) = {/} Es fcil comprobar que es una gramtica LL(1) ya que: a a DIR2 DIR3 = DIR5 DIR6 = DIR7 DIR8 DIR9 = DIR10 DIR11 = DIR12 DIR13 = Ejemplo 5.8 Gramtica que no es LL(1). La gramtica que se describe a contina a uacin permitir representar la clsica estructura alternativa de cualquier lenguaje o a a de programacin. Es una gramtica ambigua y por ese motivo no es LL(1) como o a comprobaremos a continuacin. o N = {S, E, R} T = {i, t, a, e, b} Los s mbolos gramaticales tienen el siguiente signicado: S = Sentencia E = Expresin o R = Resto de la sentencia

Manuales uex 86

TeORa De auTMaTas Y lenGuaJes FORMales

5.5. RECONOCIMIENTO ASCENDENTE i = if t = then a = accion e = else S ::= iEtSR |a R ::= eS P = | E ::= b S R E Fase 1 e$ t Fase 2 e$ b = boolean

87

S mbolos seguidores:

S mbolos directores de las producciones: DIR1 DIR2 DIR3 DIR4 DIR5 = DIR(S ::= iEtSR) = {i} = DIR(S ::= a) = {a} = DIR(R ::= eS) = {e} = DIR(R ::= ) = SEG(R) = {e, $} = DIR(E ::= b) = {b}

Como DIR3 DIR4 = {e} podemos armar que la gramtica no es LL(1) a

5.5.

Reconocimiento ascendente

El reconocimiento ascendente o anlisis sintctico ascendente se caracteriza por a a construir el rbol de derivacin de manera ascendente, es decir, desde las hojas hasta a o la ra z. A continuacin se describir un reconocedor ascendente llamado LR(1) (Lefto a Right(1)). En este nombre, L indica que la cadena se analiza de izquierda a derecha, R indica que en cada paso se construye la derivacin por la derecha en orden inverso, y o el 1 indica que slo es necesario un carcter para que el reconocedor decida qu accin o a e o se debe realizar. Una gramtica es LR(1) si es posible construir para ella un reconocedor LR(1) a determinista. Algunas de las ventajas de los reconocedores LR(1):

Un analizador LR(1) detecta un error en una cadena tan pronto como sea posible.

Manuales uex 87

Son ms potentes que los reconocedores LL(1). Es decir, el conjunto de los a lenguajes LL(1) est contenido en el conjunto de los LR(1). a

elena JuRaDO MlaGa


TEMA 5. G.I.C Y AUTOMATAS DE PILA Prcticamente todas las gramticas que denen los lenguajes de programacin a a o son LR(1). La desventaja de los reconocedores LR(1) es que su construccin a mano es ms o a compleja. Sin embargo, existen herramientas (YACC) que permiten la construccin o automtica de este tipo de reconocedores. a El funcionamiento de un reconocedor LR(1) depende de su Tabla de Acciones. En esta tabla encontraremos dos tipos de procesos: 1. Desplazamientos. Indican la transicin de un estado a otro. Se representan o como Di , donde i identica el estado al que se va a pasar. 2. Reducciones. Esta accin se lleva a cabo cuando en el rbol aparece la parte o a derecha de una produccin y se a ade la parte izquierda, subiendo un nivel en o n la construccin del rbol. Se representa como Ri , donde i permite identicar la o a produccin utilizada en el proceso de reduccin. o o Los analizadores LR(1) tambin utilizan una pila en la que se van almacenando e los caracteres que se van procesando as como los estados por los que el reconocedor ha pasado. Veamos con un sencillo ejemplo como funcionar un reconocedor LR(1), conociena do su Tabla de Acciones. Posteriormente estudiaremos cmo construir dicha tabla. o Ejemplo 5.9 Sea la gramtica denida con los siguientes s a mbolos: T = {a, (, )} N = {S, A} y las producciones: 1. S ::= A 2. A ::= a 3. A ::= (a) Las acciones se denen en funcin del estado del autmata y del s o o mbolo de la cadena de entrada que se procesa en cada momento. Hay que tener en cuenta que las situaciones no denidas se consideran situaciones de error. La Tabla de Acciones asociada a este ejemplo se muestra a continuacin. En la tabla aparece el s o mbolo $, que indica el nal de la cadena de entrada. $ q0 q1 q2 q3 q4 q5 R1 R2 D4 D5 R3 a D2 ( D3 ) A D1

88

Manuales uex

Utilizando esta tabla veamos como se procesar la cadena (a): a

88

TeORa De auTMaTas Y lenGuaJes FORMales

5.5. RECONOCIMIENTO ASCENDENTE Entrada (a)$ a)$ )$ $ $ $ Pila q0 q0 (q3 q0 (q3 aq4 q0 (q3 aq4 )q5 q0 A q0 Aq1 Accin o Desplazar a q3 Desplazar a q4 Desplazar a q5 Reducir por la 3a produccin A ::= (a) o Desplazar a q1 Reducir por S ::= A (el proceso termina)

89

Veamos cmo se procesar una cadena incorrecta como a) o a Entrada Pila a)$ q0 )$ q0 aq2 Se produce un error ya que en s mbolo ). Accin o Desplazar a q2 Error el estado q2 no hay ninguna accin asociada al o

5.5.1.

Construccin de la Tabla de Acciones o

La Tabla de Acciones se construye al mismo tiempo que se denen los estados. Para llevar este trabajo a cabo es necesario introducir el concepto de LR-item que indicar el progreso del anlisis de la cadena. a a Denominamos LR-item a una produccin a la que se le coloca una marca (un o punto) en alg n lugar de la parte derecha. Esta marca indica qu parte de la cadena u e ha sido ya procesada y cul es la que queda por analizar. Adems, en los LR-items a a hay un conjunto de s mbolos terminales (separados por una coma de la produccin) o a los que se llama s mbolos directores del LR-item. Ejemplo de un LR-item: [A ::= x.By, w1 , w2 ] (suponemos que A ::= xBy es una produccin de la gramtica y w1 , w2 T ) o a Los estados del analizador LR(1) sern conjuntos de LR-items y cada LR-item, a seg n la posicin en la que se encuentre el punto, indicar la accin que se debe llevar u o a o a cabo. Si detrs de la marca hay alg n s a u mbolo, la accin que se realizar ser un o a a desplazamiento al estado que contenga un LR-item similar pero con la marca desplazada en una posicin a la derecha. o Accin(p,B)= Desplazamiento a q o Es decir, si [A ::= x.By, w] p y [A ::= xB.y, w] q entonces

Si la marca est situada al nal de la produccin, la accin a realizar ser una a o o a reduccin por la produccin que representa el LR-item, siempre y cuando el o o carcter analizado sea uno de sus s a mbolos directores.

Manuales uex 89

elena JuRaDO MlaGa


TEMA 5. G.I.C Y AUTOMATAS DE PILA Por ejemplo, si [A ::= xBy., w] p entonces

90

Accin(p,w)= Reducir por la produccin A ::= xBy o o En cada instante, el analizador va a tener una conguracin (descripcin inso o tantnea) determinada que viene dada por el contenido de la pila y por el fragmento a de la cadena de entrada que a n no ha sido procesado. En la pila se almacenan los u estados por los que ha ido pasando el analizador as como los s mbolos (terminales y no terminales) que estn ubicados en las zonas superiores del rbol de derivacin. a a o Por ejemplo: (q0 X1 q1 . . . Xm qm , aj aj+1 . . . an $) qi Q Xi ai T Veamos como var la conguracin del analizador en funcin de la accin que se a o o o realice: Desplazamiento Si Accion(qm , aj ) = Dr La nueva conguracin ser: (q0 X1 q1 . . . Xm qm aj qr , aj+1 . . . an $) o a Se a ade a la pila el carcter procesado y el estado actual. n a o Reduccin Si Accion(qm , aj ) = Ri y la produccin i es A ::= donde || = r o supondremos que los ultimos r s mbolos almacenados en la pila coinciden con . Es decir, = Xmr+1 . . . Xm . En este caso, se sustituyen los ultimos r s mbolos de la pila (y los estados que les acompa an) por A. n La nueva conguracin ser: (q0 X1 q1 . . . Xmr qmr Aqp , aj aj+1 . . . an ) o a Accion(qmr , A) = Dp donde

En este caso no ha sufrido ninguna modicacin el fragmento de cadena que o a n queda por procesar. Aunque aj ha sido tenido en cuenta para decidir la u operacin a realizar, no podemos considerar que haya sido procesado, es decir, o no forma parte de la pila ni tampoco del rbol de derivacin. a o Mtodo para la construccin de los LR-items Los estados se van creando e o en dos fases: en primer lugar se construye lo que podemos denominar el ncleo del u estado, posteriormente, y siempre que sea necesario, se aaden otros LR-items hasta n cerrar el estado. Determinacin del ncleo de q0 . Para cada una de las producciones que tienen o u al s mbolo inicial en la parte izquierda (S::=x), aadir al estado q0 el LR-item n [S::= .x, $] Cierre de un estado. Si [A::=x.By,w] q y B N hay que a adir al estado q n LR-items construidos a partir de todas las producciones de la gramtica que a tienen a B en la parte izquierda.

Manuales uex 90

TeORa De auTMaTas Y lenGuaJes FORMales

5.5. RECONOCIMIENTO ASCENDENTE Para la produccin B::=z, hay que a adir el LR-item [B::= .z, u] donde o n u = INIC(yw).

91

Creacin del ncleo de un nuevo estado. Si existe un LR-item de la forma [A::=x.Yz,w], o u se crea un nuevo estado con el LR-item [A::=xY.z,w] Ejemplo 5.10 Veamos cmo se crea la Tabla de S o mbolos para el ejemplo anterior: 1. Crear el n cleo del estado q0 u [S::=.A, $] q0 2. Cerrar q0 q0 = {[S::=.A, $], [A::=.(a), $], [A::=.a, $]} Analizando estos tres LR-items y los que se construyen despus, es evidente e que: Accion(q0 , A) = D1 Accion(q0 , () = D3 Accion(q0 , a) = D2

3. Crear nuevos estados (en este caso estn ya cerrados) a q1 q2 q3 q4 q5 = = = = = {[S::=A., $]} {[A::=a., $]} {[A::=(.a), $]} {[A::=(a.), $]} {[A::=(a)., $]} Accion(q1 , $) = R1 Accion(q2 , $) = R2 Accion(q3 , a) = D4 Accion(q4 , )) = D5 Accion(q5 , $) = R3

Ejemplo 5.11 Clculo del reconocedor LR(1) para la siguiente gramtica: a a T = {a, b} N = {S, A, B} y las producciones: 1. S ::= A 2. A ::= BA 4. B ::= aB 3. | 5. |b Esta gramtica genera el lenguaje (a b) a Denicin de los estados: o q0 q1 q2 q3 q4 q5 q6 = = = = = = = {[S::=.A, $],[A::=.BA, $],[A::=., $],[B::=.aB, a, b, $],[B::=.b, a, b,$]} {[S::=A., $]} {[A::=B.A,$], [A::=.BA,$], [A::=.,$], [B::=.aB,a,b,$], [B::=.b,a,b,$]} {[B::=a.B, a, b, $], [B::=.aB, a, b, $], [B::=.b, a, b,$]} {[B::=b., a, b,$]} {[A::=BA., $]} {[B::=aB., a, b, $]}

Analizando los LR-items de los estados se construye la siguiente tabla de acciones:

Manuales uex 91

elena JuRaDO MlaGa


TEMA 5. G.I.C Y AUTOMATAS DE PILA $ R3 R1 R3 R5 R2 R4 a D3 D3 D3 R5 R4 b D4 D4 D4 R5 R4 A D1 D5 B D2 D2 D6

92

q0 q1 q2 q3 q4 q5 q6

Utilizando esta tabla, veamos como se procesar la cadena ab: a Entrada ab$ b$ $ $ $ $ $ Entrada a$ $ Gramticas LR(1) a Una gramtica es LR(1) siempre que sea posible construir un reconocedor LR(1) a que sea determinista. Para que esto pueda ocurrir deben cumplirse las siguientes condiciones: 1. La gramtica debe ser aumentada, es decir, el s a mbolo inicial no debe aparecer nunca en la parte derecha de ninguna produccin. Si no es as basta con aadir o , n una produccin como S ::= S, en la que S se convierte en el nuevo s o mbolo inicial de la gramtica. a 2. No deben aparecer conictos a la hora de construir la tabla de acciones. Hay tres tipos de conicto: Pila q0 q0 aq3 q0 aq3 bq4 q0 aq3 Bq6 q0 Bq2 q0 Bq2 Aq5 q0 Aq1 Pila q0 q0 aq3 Accin o Desplazar a q3 Desplazar a q4 Reducir por la Reducir por la Reducir por la Reducir por la Reducir por la

5a 4a 3a 2a 1a

produccin o produccin o produccin o produccin o produccin o

B ::= b (desp. q6 ) B ::= aB (desp. q2 ) A ::= (desp. q5 ) A ::= BA (desp. q1 ) S ::= A (naliza el proceso)

Veamos cmo se procesar una cadena incorrecta como a o a Accin o Desplazar a q3 Error

Manuales uex

a) Conicto desplazamiento/desplazamiento. Aparece cuando en un estado q hay dos items del siguiente tipo: [A ::= .a, u1] y [B ::= .a, u2 ]. La accin asociada al estado q ante la llegada del s o mbolo a podr ser un a desplazamiento al estado que contiene al LR-item [A ::= a., u1] o un desplazamiento al que contiene a [B ::= a., u2 ].

92

TeORa De auTMaTas Y lenGuaJes FORMales

5.6. PROPIEDADES DE LOS L.I.C.

93

b) Conicto reduccin/reduccin. Aparece cuando en un estado q hay o o dos items del siguiente tipo: [A ::= ., u] y [B ::= ., u]. La accin asoo ciada al estado q ante la llegada del s mbolo u podr ser una reduccin a o utilizando la produccin A ::= o una reduccin utilizando la produccin o o o B ::= . c) Conicto desplazamiento/reduccin. Aparece cuando en un estado o q hay dos items del siguiente tipo: [A ::= .a, u1 ] y [B ::= ., a]. La accin asociada al estado q ante la llegada del s o mbolo a podr ser un a desplazamiento al estado que contiene al LR-item [A ::= a., u1] o una reduccin utilizando la produccin B ::= . o o Ejemplo 5.12 Gramtica que no es LR(1). a T = {a, b, c} N = {S, A, B} y las producciones: 1. S ::= cAB 3. A ::= Aa 5. B ::= Bb 2. |c 4. |a 6. |b Esta gramtica genera el lenguaje c + ca+ b+ a Comenzamos la denicin de los estados: o q0 = {[S::=.cAB, $], [S::=.c, $]} q1 = {[S::=c.AB,$],[A::=.Aa, b],[A::=.a, b]} q2 = {[S::=c., $]} No es necesario continuar ya que con esta informacin el conicto es evidente: o qu accin hay que realizar si estando en el estado q0 llega el s e o mbolo c? Si atendemos al primer LR-item deber amos desplazarnos a q1 pero si atendemos al segundo el desplazamiento deber hacerse a q2 , por lo tanto es imposible construir un reconoa cedor LR(1) determinista.

5.6.

Propiedades de los L.I.C.

Teorema 5.1 El conjunto de los LIC est cerrado para la unin, la concatenacin y el cierre de a o o Kleene. Teorema 5.2 El conjunto de los LIC no est cerrado para la interseccin ni para la complea o mentacin. o Ejemplo 5.13 Sean L1 = {an bn cn , n 0}, L2 = {an bn cm , n, m 0} y L3 = {an bm cm , n, m 0}. L2 y L3 son independientes del contexto, sin embargo, L1 = L2 L3 no lo es (se puede comprobar utilizando el lema del bombeo).

Manuales uex 93

elena JuRaDO MlaGa


TEMA 5. G.I.C Y AUTOMATAS DE PILA

94

Como L1 L2 = L1 L2 , si los LIC fueran cerrados para la complementacin tambin o e lo ser para la interseccin y hemos comprobado en el ejemplo anterior que esto no an o es cierto. Teorema 5.3 Si L es un LIC y R es un Lenguaje regular, entonces L R es un LIC. Ejemplo 5.14 Sea L1 = {an bm an bm , n, m 0}, L2 = {ww, w (0 + 1) } y L3 = a+ b+ a+ b+ . Tenemos que L1 = L2 L3 . Como L1 no es un LIC (se puede demostrar con el lema del bombeo) y L3 es un lenguaje regular entonces, aplicando el teorema anterior, se deduce que L2 tampoco es un LIC. Denicin 5.7 (Sustitucin) o o Sean y dos alfabetos, se dene una sustitucin como una funcin o o s : P( ) tal que a s(a) es un LIC. Esta funcin se puede extender a cadenas de caracteres y a lenguajes de forma o natural. Denicin 5.8 (Homomorsmo) o Un homomorsmo es un caso particular de sustitucin en el que h : o Teorema 5.4 El conjunto de los LIC est cerrado para las sustituciones y (como caso particular) a para los homomorsmos.

5.6.1.

El lema del bombeo para LIC(pumping lemma)

El lema del bombeo enuncia una propiedad que deben cumplir todos los lenguajes independientes del contexto. El hecho de comprobar que un lenguaje no cumple dicha propiedad es suciente para demostrar que no es independiente del contexto. Sin embargo, en ning n caso este lema servir para demostrar que un lenguaje es LIC. u a Lema 5.1 (El lema del bombeo para LIC) Sea L un lenguaje independiente del contexto, entonces existe una constante asociada al lenguaje n > 0, de manera que z L tal que |z| n, se cumple que z se puede descomponer en cinco partes z = uvwxy que verican:

Manuales uex

1. |vx| 1 2. |vwx| n 3. i 0 se cumple que uv iwxi y L

94

TeORa De auTMaTas Y lenGuaJes FORMales

5.7. PROBLEMAS

95

5.7.

Problemas

5.1 Construir un Autmata de Pila Vac para los siguientes lenguajes denidos o a sobre el alfabeto = {a, b, c, 0, 1} 1. L1 = {a2n bn , n 0} 2. L2 = {awbw 1 c, w (0 + 1) } 3. L3 = {ab c} 4. L4 = {abn cdn , n 0} 5.2 Demuestra que cada una de las siguientes gramticas de tipo 2 es ambigua y a encuentra otra gramtica equivalente que no lo sea a 1. S ::= A 2. S ::= A|B 3. S ::= aB|Ab A ::= AA|a|b A ::= aAb|ab A ::= aA| B ::= abB| B ::= bB|

5.3 Para cada una de las siguientes gramticas de tipo 2 hay que comprobar si son a LL(1) y/o LR(1). Si lo son hay que construir el correspondiente reconocedor y si no lo son hay que explicar el motivo 1. S ::= aA 2. S ::= aA 3. S ::= S 4. S ::= A 5. S ::= E 6. S ::= cAb A ::= bA| A ::= Ab|b S ::= 0S0|A A ::= AB| E ::= E + T |T A ::= aA| A ::= 1A| B ::= aB|b T ::= a|(E)

5.4 Utliza el lema del bombeo para demostrar que los siguientes lenguajes no son independientes del contexto 1. L1 = {an bn cn , n 0} 3. L3 = {an bm cn dm , n, m 0} 4. L4 = {an bn cm , n = m n, m 0}

Manuales uex 95

2. L2 = {an bn cm , m n 0}

elena JuRaDO MlaGa


TEMA 5. G.I.C Y AUTOMATAS DE PILA 5. L5 = {an bn cm , 0 n m 2n} 5.5 Demuestra que la gramtica que aparece en el ejemplo 5.8 (pgina 86) es ama a bigua y no es LR(1) 5.6 Demuestra que una gramtica LR(1) no puede ser ambigua a 5.7 Demuestra que el lenguaje L = {an bm cm dn , n, m 0} es independiente del contexto 5.8 Dise a una gramtica que genere parntesis anidados y demuestra que es LR(1) n a e 5.9 Modica la siguiente gramtica de manera que sea LL(1) y demuestra que reala mente lo es N = {D, T, L} S=D T = {entero, real, id, ,} D ::= T L T ::= entero|real L ::= L, id|id

96

Manuales uex 96

Tema 6 Gramticas Atribuidas a


Contenido
6.1. Concepto de Semntica y de Gramtica Atribuida . . . a a 6.2. Atributos heredados y sintetizados . . . . . . . . . . . . . 97 99

6.3. Gramticas S-atribuidas y L-Atribuidas . . . . . . . . . . 100 a 6.4. Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104

Hasta ahora hemos visto como las gramticas regulares (tipo 3) son adecuadas a para representar las caracter sticas morfolgicas de los elementos bsicos de un lenguao a je de programacin. Igualmente, las gramticas independientes del contexto (tipo 2) o a lo son para representar las caracter sticas sintcticas. Sin embargo, dichas gramticas a a no son lo sucientemente potentes como para representar los aspectos semnticos de a un lenguaje de programacin. Veremos, a lo largo de este tema, cmo las gramticas o o a atribuidas pueden ser utiles para realizar esta labor.

6.1.

Concepto de Semntica y de Gramtica Atribuia a da

La semntica esttica se ocupa de las condiciones que deben cumplir las a a construcciones de un programa para que su signicado sea correcto. 97

Manuales uex 97

La semntica, considerada desde el punto de vista de los lenguajes de prograa macin, se ocupa del signicado que tienen las instrucciones de los programas escritos o en un determinado lenguaje. Para poder realizar un anlisis semntico de un programa ste debe ser correcto a a e tanto desde el punto de vista lxico como desde el sintctico. e a En la semntica de un lenguaje de programacin pueden distinguirse dos aspectos: a o esttico y dinmico. a a

elena JuRaDO MlaGa


TEMA 6. GRAMATICAS ATRIBUIDAS Ejemplo 6.1 Una sentencia de asignacin en C como A := 5 + B es correcta o desde un punto de vista lxico y sintctico, pero para que sea semnticamente e a a correcta la variable B debe ser de un tipo al que se le pueda aplicar el operador + y, adems, el valor resultante de evaluar la expresin 5 + B debe ser de un a o tipo compatible con el de la variable sobre la que se efect a la asignacin (A). u o La semntica dinmica se ocupa del signicado de una construccin con a a o objeto de que pueda ser traducido a cdigo directamente ejecutable por la o mquina. a Ejemplo: A partir de una sentencia de asignacin V Expresin debe o o generarse cdigo que permita: o 1. obtener la direccin de memoria de la variable V o 2. calcular el valor de la expresin asignada o 3. almacenar el valor calculado en el paso 2 en la direccin de memoria obtenio da en el paso 1 La semntica de un lenguaje de programacin, en sus dos vertientes esttica y a o a dinmica, es ms dif de especicar que los aspectos lxicos y sintcticos de un a a cil e a lenguaje. Se podr utilizar el lenguaje natural pero su falta de precisin provocar a o a probablemente ambig edad. Tambin resultar dif conrmar que se ha realizau e a cil do una especicacin completa de todas las caracter o sticas semnticas del lenguaje. a Las gramticas atribuidas son un buen mecanismo formal para dar solucin a este a o problema. Las gramticas atribuidas pueden considerarse como una ampliacin de las indea o pendientes del contexto que tiene por objeto dotar a la gramtica de capacidad para a especicar correctamente la semntica de un lenguaje de programacin. Para cona o seguirlo, a los s mbolos de la gramtica se les asocian atributos que permiten denir a ciertas caracter sticas semnticas de los mismos, y a las producciones se les asocian a funciones semnticas que permiten calcular, evaluar y controlar dichos atributos. a Denicin 6.1 (Gramtica atribuida) o a Si una Gramtica Independiente del Contexto se dene como a G= {T , N , S, P } la gramtica atribuida se dene como a GA ={G, AS, F S}, donde AS son los atributos semnticos asociados a los s a mbolos de la gramtica. a FS son las funciones semnticas asociadas a las producciones de la gramtica. a a

98

Manuales uex 98

TeORa De auTMaTas Y lenGuaJes FORMales

6.2. ATRIBUTOS HEREDADOS Y SINTETIZADOS

99

De la misma forma que G permite denir los aspectos sintcticos de un lenguaje, a GA permite denir los aspectos semnticos. a Un mismo s mbolo de la gramtica puede tener asociados varios atributos que a permitan representar diferentes aspectos de dicho s mbolo. Por ejemplo, un s mbolo llamado X que representara variables de un lenguaje podra tener dos atributos, uno llamado tipo que podr tener los valores: real, entero, lgico,. . . y otro llamado valor a o cuyo valor depender del tipo mencionado anteriormente. Podr a amos representarlo as : X X.tipo entero X.valor 534

Las funciones semnticas denen las relaciones que se cumplen entre los atributos a de los distintos s mbolos de la gramtica. Estas relaciones permiten calcular los valores a de unos atributos en funcin de los valores de otros. o Cuando se desea describir las funciones semnticas asociadas a una produccin, a o stas deben aparecen encerradas entre llaves al nal o en algn punto intermedio e u de la produccin. Si un s o mbolo aparece varias veces en la misma produccin (por o ejemplo, en las producciones recursivas) se utilizan subndices para distinguir unas instancias de otras. El sub ndice 0 se reserva para hacer referencia al s mbolo repetido cuando ste aparece en la parte izquierda de la produccin y los sub e o ndices 1, 2, . . . se utilizan en orden para las diferentes apariciones del s mbolo en la parte derecha de la produccin. Por ejemplo: o expr ::= expr + expr {expr0 .valor = expr1 .valor + expr2 .valor}

Esta produccin indica que una expresin aritmtica puede construirse como la o o e suma de otras dos expresiones ms simples y, en este caso, la accin semntica indica a o a que el valor de la expresin resultante ser la suma de las dos expresiones simples. o a

6.2.

Atributos heredados y sintetizados

Una produccin gramatical puede representarse grcamente como un rbol. Por o a a ejemplo, la produccin A ::= x y z se puede representar as o : A x y z

Manuales uex 99

Empleando la terminolog t a pica de las estructuras arbreas podemos decir que A es o el nodo padre de x, o que x es un nodo hermano de y. De acuerdo a esta terminologa podemos distinguir dos tipos diferentes de atributos. Los atributos pueden ser sintetizados y heredados. El valor de los atributos sintetizados se calcula en funcin de los atributos de los nodos hijos. El valor de los o

elena JuRaDO MlaGa


TEMA 6. GRAMATICAS ATRIBUIDAS

100

atributos heredados se calcula en funcin de los atributos de los nodos hermanos y/o o padre.

6.3.

Gramticas S-atribuidas y L-Atribuidas a

En las gramticas atribuidas el principal problema radica en la evaluacin de los a o atributos. Grcamente se puede pensar en el rbol de derivacin que representa la a a o estructura sintctica de manera que los atributos estn localizados en los diferentes a a nodos del rbol. As un recorrido apropiado del rbol puede permitir calcular todos a , a lo atributos. Pero si no se imponen ciertas restricciones este proceso puede ser largo y costoso. En funcin de que los atributos de una gramtica sean heredados o sintetizados se o a pueden denir las gramticas S o L atribuidas. Dependiendo del tipo de la gramtica a a atribuida resultar recomendable utilizar un determinado mecanismo para construir a y procesar el rbol sintctico. a a

6.3.1.

Gramticas S-atribuidas a

Las gramticas S-atribuidas son aquellas cuyos s a mbolos slo tienen atributos o sintetizados. Con las gramticas S-atribuidas es muy ecaz utilizar un reconocedor ascendente a (por ejemplo, un reconocedor del tipo LR) ya que al mismo tiempo que se construye el rbol sintctico se pueden ir evaluando los atributos. El programa PCYACC genera a a un reconocedor sintctico-semntico que realiza esta tarea. a a Ejemplo 6.2 El siguiente ejemplo de gramtica S-atribuida se utiliza para generar a expresiones aritmticas. Por simplicidad, consideraremos que las unicas operaciones e que se pueden realizar son la suma y la multiplicacin. Los s o mbolos expr y num, que representan las expresiones aritmticas y los n meros que aparecen en ellas respece u tivamente, tienen ambos un atributo sintetizado llamado valor que permite calcular el valor de las expresiones aritmticas analizadas. Por simplicidad, el s e mbolo num ser considerado como terminal y su valor habr sido obtenido en el proceso de anlia a a sis lxico previo. e Las acciones semnticas de estas producciones permitirn obtener el valor de una a a expresin aritmtica a partir de los valores de expresiones ms bsicas. o e a a expr ::= num {expr.valor = num.valor} expr ::= expr + expr {expr0 .valor = expr1 .valor + expr2 .valor} expr ::= expr expr {expr0 .valor = expr1 .valor expr2 .valor} La gura 6.1 muestra el arbol de derivacin de la expresin 9 + 7 * 5. Al mismo o o tiempo que el rbol se construye de manera ascendente se calculan los atributos a

100

Manuales uex

TeORa De auTMaTas Y lenGuaJes FORMales


6.3. GRAMATICAS S-ATRIBUIDAS Y L-ATRIBUIDAS
expr.valor expr expr.valor 9 expr expr num.valor num 9 9 + num 7 expr.valor 7 num.valor 7 * 44 expr expr num 5 expr.valor 35 expr.valor 5 num.valor 5

101

Figura 6.1: Gramtica S-atribuida a

sintetizados de todos los s mbolos. Finalmente se obtiene el valor de la expresin o completa.

6.3.2.

Gramticas L-atribuidas a

Las gramticas L-atribuidas tienen atributos sintetizados y heredados, pero a los a atributos heredados se les imponen algunas restricciones con objeto de facilitar el dise o de un algoritmo que permita evaluar todos los atributos de la gramtica. Los n a atributos heredados slo pueden depender de los atributos heredados del nodo padre o o de cualquier atributo de sus nodos hermanos, siempre que esos nodos hermanos aparezcan a su izquierda en la produccin. Es decir, si tenemos una produccin o o A ::= x1 x2 . . . xn Los atributos heredados de xi solo pueden calcularse en funcin de : o 1. los atributos heredados de A 2. cualquier atributo (heredado o sintetizado) de x1 . . . xi1 Ejemplo 6.3 Veamos con un ejemplo abstracto cmo especicar claramente un frago mento de gramtica L-atribuida. Supongamos que tenemos la produccin a o

el s mbolo A tiene un atributo sintetizado(a1 ) y otro heredado (a2 ) el s mbolo x tiene slo un atributo heredado (x1 ) o

101

Manuales uex

::=

x y

elena JuRaDO MlaGa


TEMA 6. GRAMATICAS ATRIBUIDAS el s mbolo y tiene un atributo sintetizado(y1 ) y otro heredado (y2 ) el s mbolo z tiene un atributo sintetizado(z1 ) Si deseamos representar los atributos de cada s mbolo dentro de la produccin, lo o haremos de la siguiente forma: A.a1 a2 ::= x.x1 y.y1 y2 z.z1

102

donde el s mbolo indica que el atributo es heredado y el s mbolo indica que es sintetizado. Si adems se quisieran representar las acciones semnticas, stas deber aparecer a a e an encerradas entre llaves y colocadas en el punto adecuado de la produccin, siguiendo o las siguientes reglas: 1. Una accin semntica no podr hacer referencia a un atributo sintetizado de o a a un s mbolo que se encuentra a la derecha de dicha accin. o 2. Para calcular un atributo heredado de un smbolo que est en la parte derecha a de una produccin, la accin debe estar situada inmediatamente antes de ese o o s mbolo. 3. Los atributos sintetizados de un s mbolo slo se pueden calcular en una produco cin en la que dicho s o mbolo se encuentre en la parte izquierda y una vez que se hayan evaluado todos los atributos de los s mbolos que aparecen en la parte derecha de la produccin, por tanto, la accin correspondiente se ubicar al o o a nal de la produccin. o Veamos un ejemplo de cmo se aplicar estas reglas en el ejemplo anterior: o an

A ::= {x.x1 = f (A.a2 )} x {y.y2 = g(x.x1 )} y z {A.a1 = h(y.y2 , z.z1 )} No podemos asociar a esta produccin acciones semnticas que eval en los atrio a u butos a2 (por ser heredado se evaluar en una produccin en la que el s a o mbolo A est ubicado en la parte derecha), y1 y z1 (por ser atributos sintetizados se deben e evaluar en producciones en las que los s mbolos y y z aparezcan en la parte izquierda). Las tres reglas vistas anteriormente tienen sentido si analizamos el algoritmo que se utiliza para evaluar los atributos en una gramtica L-atribuida al hacer un recorrido a en preorden de cada uno de los nodos que forman el rbol sintctico. a a

102

Manuales uex

TeORa De auTMaTas Y lenGuaJes FORMales


6.3. GRAMATICAS S-ATRIBUIDAS Y L-ATRIBUIDAS Algoritmo 6.1 Visitar (N) Input: N es un nodo de un arbol sintctico a Begin for all H hijo del nodo N (de izquierda a derecha) do Evaluar los atributos heredados del nodo H Visitar (H) end for Evaluar los atributos sintetizados del nodo N End

103

Ejemplo 6.4 La siguiente gramtica L-atribuida permite generar una declaracin a o de variables siguiendo las pautas del lenguaje C. Los s mbolos no terminales D, T y L representan los conceptos de declaracin, tipo y lista de identicadores, respectivao mente. En este ejemplo, los atributos que tienen los diferentes s mbolos gramaticales almacenan informacin que representa el tipo de las variables que se van a denir. o Adems, el s a mbolo terminal id tiene un atributo sintetizado que permite conocer el nombre de la variable y que habr sido calculado en el proceso de anlisis lxico. a a e La semntica de estas instrucciones de declaracin debe asociar a cada varia o able su tipo correspondiente y adems debe almacenar, utilizando el procedimiento a a adir tabla, la informacin asociada a cada variable en la tabla de s n o mbolos del compilador. D ::= T {L.tipoh = T.tipo} L T ::= INT T ::= REAL {T.tipo = 0} {T.tipo = 1} ID

L ::= {ID.tipoh = L.tipoh}

{a adir tabla(ID.nombre, ID.tipoh)} n L ::= {L1 .tipoh = L0 .tipoh} L, {ID.tipoh = L0 .tipoh} ID {a adir tabla(ID.nombre, ID.tipoh)} n Los atributos de L y de ID son heredados, por eso los llamamos tipoh, el atributo de T es sintetizado y se calcula en aquellas producciones que tienen a T en la parte izquierda (la segunda y la tercera).

103

Manuales uex

elena JuRaDO MlaGa


TEMA 6. GRAMATICAS ATRIBUIDAS

104

D L.tipoh T.tipo T int L.tipoh L.tipoh L 0

1 0

2
id.tipoh id 0 9

3 0
L id a ,

L id b

id.tipoh

4 0
id.tipoh

7 0

10

c aadir_tabla(c,0)

5 0

8 aadir_tabla(b,0)

6 aadir_tabla (a,0)

Figura 6.2: Gramtica L-atribuida a

La gura 6.2 muestra el arbol de derivacin de una declaracin de variables como o o int a, b, c , la numeracin indica el orden en el que se realizar las diferentes o an acciones semnticas de acuerdo al algoritmo 6.1 a

6.4.

Problemas

6.1 Dada la siguiente gramtica atribuida: a T = {id, cte, =, +} N = {asig, expr} S = asig 1. asig ::= id = expr {id.valor = expr.valor} 2. expr ::= id {expr.valor = id.valor} 3. |cte {expr.valor = cte.valor} 4. |expr + expr {expr0 .valor = expr1 .valor + expr2 .valor} Es esta gramtica S-atribuida o L-atribuida? a

104

Manuales uex

Tema 7 Mquinas de Turing a


Contenido
7.1. Introduccin. Antecedentes histricos . . . . . . . . . . . 105 o o 7.2. Denicin y ejemplos de M.T.s . . . . . . . . . . . . . . . 107 o 7.3. Restricciones a la M.T. . . . . . . . . . . . . . . . . . . . . 110 7.4. Modicaciones de la M.T. . . . . . . . . . . . . . . . . . . 113 7.5. Tcnicas para la construccin de M.T. . . . . . . . . . . . 116 e o 7.6. La M.T. Universal . . . . . . . . . . . . . . . . . . . . . . . 118 7.7. La M.T. como generadora de lenguajes . . . . . . . . . . 119 7.8. La tesis de Church-Turing . . . . . . . . . . . . . . . . . . 120 7.9. Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120

La mquina de Turing es un dispositivo terico muy simple pero con una gran a o capacidad computacional, es decir, permite resolver problemas de una gran complejidad. Como veremos en los prximos temas, la mquina de Turing es una herramienta o a formal muy util para estudiar la teor de la computabilidad. a

7.1.

Introduccin. Antecedentes histricos o o

105

105

Manuales uex

En la dcada de los 30, el ingls Allan Turing dise el modelo matemtico de e e no a una mquina terica con un gran poder computacional, llamada Mquina de Turing a o a (M.T.). En los siguientes prrafos analizaremos los motivos cient a cos e histricos o que llevaron a Turing a dise ar esta mquina. n a A nales del siglo XIX, la recin nacida Teora de Conjuntos hab causado un e a gran impacto entre los matemticos. Sin embargo, algunos pensadores como Bertrand a Russell opinaban que dicha teor no estaba bien formalizada ya que permit enuna a ciados tan paradjicos como ste: o e

elena JuRaDO MlaGa


TEMA 7. MAQUINAS DE TURING Si R es el conjunto de todos los conjuntos que no son miembros de s mis mo, R R? Para evitar este tipo de problemas, Russell y Whitehead desarrollaron un sistema matemtico de axiomas y reglas de inferencia altamente formalizado, cuyo propsito a o era poder traducir a este esquema cualquier razonamiento matemtico correcto. Las a reglas estaban cuidadosamente seleccionadas para evitar planteamientos que pudieran llevar a conclusiones paradjicas. o Simultneamente, el prestigioso matemtico alemn David Hilbert comenz la a a a o tarea de establecer un esquema mucho ms completo y manejable. Hilbert pretend a a demostrar que el sistema estaba libre de contradicciones. Nunca vacil en proclamar o su conviccin de que alg n d con este sistema se podr resolver cualquier problema o u a a matemtico o demostrar que carece de solucin. Aseguraba que exist un procedia o a miento por medio del cual era posible armar a priori si un problema pod o no a ser resuelto. Llam a este problema Entscheidungsproblem (el problema de la deo cisin). Sin embargo, un joven austriaco, llamado Kurt Gdel, publico en 1931 un o o art culo titulado Sobre proposiciones formalmente indecidibles de los fundamentos de las matemticas y sistemas relacionales. En l, Gdel prob el Teorema de la a e o o incompletitud en el que se armaban dos importantes cuestiones: 1. Si la teor axiomtica de conjuntos es consistente existen teoremas que no a a pueden ser probados ni refutados. 2. No existe ningn procedimiento constructivo que pruebe que la teor axiomu a a tica de conjuntos es consistente. En la demostracin de este teorema Gdel tambin propuso un interesante mtodo o o e e para enumerar objetos que originalmente no parecen ser enumerables. Utiliz para o ello el teorema fundamental de la Aritmtica o teorema de factorizacin unica que e o arma que todo entero positivo se puede representar de forma unica como producto de factores primos. Por ejemplo, 6936 = 23 31 172 y no hay ninguna otra factorizacin del o n mero 6936 en n meros primos. Esta idea es muy interesante y puede ser utilizada u u para catalogar el conjunto de las M.T.s como veremos en el siguiente tema. Veamos su aplicacin para enumerar, por ejemplo, las expresiones aritmticas. o e En primer lugar es necesario enumerar todos los elementos que pueden formar parte de una expresin aritmtica ( operaciones y d o e gitos): + * 0 1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9 10 11 12 13 14

106

Manuales uex 106

De esta manera, una expresin como 3*5-2 podr representarse mediante la o a tupla (8-3-10-2-7) que puede asociarse con el n mero 28 33 510 72 117 . Debido u a la unicidad de la factorizacin en n meros primos podemos reconstruir la expresin o u o aritmtica a partir de su cdigo (n mero de orden) asociado. e o u

TeORa De auTMaTas Y lenGuaJes FORMales


7.2. DEFINICION Y EJEMPLOS DE M.T.S

107

Para los cient cos mencionados anteriormente era fundamental el concepto de algoritmo o proceso efectivo, considerndolo como un mtodo para resolver un problema a e genrico en un n mero nito de pasos mediante operaciones conocidas y realizables. e u Desde este punto de vista, Turing dise su mquina como un dispositivo capaz de no a realizar un algoritmo. Apoy las teor de Gdel al demostrar que algunos problemas o as o no pueden resolverse con una M.T. La gran ventaja de la M.T. es que, a pesar de su simplicidad, tiene un gran poder computacional y no se ve limitada por las caracter sticas tecnolgicas de una o computadora como la velocidad de procesamiento o la capacidad de la memoria. Por esta razn, se la considera como un s o mbolo invariante de la informtica. a En esta misma poca, Emil Post, as como Church y Kleene, realizaron estudios e similares a los de Turing.

7.2.

Denicin y ejemplos de M.T.s o

La M.T. es un modelo matemtico para representar a una mquina terica. A a a o pesar de su simplicidad la M.T. tiene el mismo poder computacional que una computadora de propsito general. o La M.T. es interesante, sobre todo, por el conjunto de lenguajes que permite reconocer y tambin generar (lenguajes recursivamente enumerables) y por el conjunto e de funciones que puede computar (funciones calculables). El modelo bsico de M.T. est formado por un autmata nito, con un dispositivo a a o de lectura/escritura que controla una cinta de longitud innita. La cinta est dividida a en celdas en las que se almacena un unico s mbolo o un espacio en blanco. Aunque la longitud de la cinta es innita, en cada momento slo un n mero nito de celdas o u contienen s mbolos diferentes al espacio en blanco, que pertenecen a un alfabeto tambin nito. El dispositivo de lectura/escritura puede explorar(leer) el contenido e de una celda y grabar(escribir) un nuevo s mbolo sobre ella, seguidamente se desplaza en una posicin hacia la izquierda o hacia la derecha. Por tanto, la M.T. dependiendo o del s mbolo le y del estado actual del autmata, realiza las siguientes operaciones: do o 1. Cambia de estado. 2. Escribe un s mbolo en la celda analizada. 3. Desplaza la cabeza de lectura/escritura a la izquierda o a la derecha en una posicin. o Con el siguiente esquema se representa una M.T. que se encuentra en un estado llamado p y cuya cabeza de lectura/escritura se ala a una celda que contiene al n s mbolo a

107

Manuales uex

elena JuRaDO MlaGa


TEMA 7. MAQUINAS DE TURING a p Denicin 7.1 (Mquina de Turing) o a Formalmente la M.T. se dene como una tupla: MT = {Q, , , f, q0 , b, F } Q es el conjunto nito de estados es el alfabeto de la cadena de entrada es el alfabeto de la cinta q0 Q es el estado inicial b es el espacio en blanco b , pero b / F Q es el conjunto de estados nales f : Q Q {I, D} Inicialmente, en la cinta hay una coleccin nita de s o mbolos de precedida y seguida por blancos (b), el estado de la M.T. es q0 y la cabeza de lectura/escritura suele apuntar al primer s mbolo distinto de b que hay en la cinta. Denicin 7.2 (Descripcin Instantnea de una M.T.) o o a Llamaremos Descripcin Instantnea(D.I.) de la M.T. a 1 q2 donde q es el estado o a actual de la mquina y 1 2 es el contenido de la cinta. La cabeza de leca tura/escritura analiza en ese momento el primer s mbolo de 2 . Dentro de la cadena 1 2 podemos encontrar el carcter b, pero el primer carcter de 1 es el carcter a a a diferente de b ms a la izquierda de la cinta y el ultimo carcter de 2 es el carcter a a a diferente de b ms a la derecha de la cinta. a Teniendo en cuenta el concepto de D.I. los movimientos de la M.T. pueden denirse de la siguiente forma: Sea una M.T. cuya D.I. es x1 . . . xi1 qxi . . . xn

108

Manuales uex

Si f (q, xi ) = (p, y, I) entonces la nueva D.I. es x1 . . . xi2 pxi1 yxi+1 . . . xn Podemos representar la transicin de la forma: o x1 . . . xi1 qxi . . . xn x1 . . . xi2 pxi1 yxi+1 . . . xn

108

TeORa De auTMaTas Y lenGuaJes FORMales


7.2. DEFINICION Y EJEMPLOS DE M.T.S

109

Una representacin ms grca ser la siguiente: o a a a x1 . . . xi1 xi . . . xn x1 . . . xi1 y xi+1 . . . xn q p o Se puede utilizar el s mbolo para indicar que hemos pasado de una situacin a otra en uno o ms pasos. a Denicin 7.3 (Lenguaje aceptado por una M.T.) o Est formado por la cadenas denidas sobre el alfabeto que hacen que la M.T. a llegue a un estado nal, partiendo de una situacin inicial en que la cadena est en o a la cinta de entrada, q0 es el estado inicial y la cabeza de lectura/escritura apunta a la celda ocupada por el primer carcter de dicha cadena. a
L(MT ) = {w / q0 w 1 p2

donde p F 1 , 2 }

Ejemplo 7.1 (Complemento binario) Esta M.T. obtiene el complemento binario de un n mero binario almacenado en la cinta. u Q = {q0 , q1 } F = {q1 } = {0, 1} = {0, 1, b} La funcin de transicin se dene en la siguiente tabla: o o 0 q0 1D 1 q0 0D b q1 bI

q0

Ejemplo 7.2 (Paridad) Esta M.T. calcula la paridad del nmero de 1s que hay en u la cadena binaria de entrada. Al nal del proceso, se aade a la derecha de la cadena n un 0 para indicar que hay un n mero par de 1s y un 1 para indicar que el nmero u u de 1s es impar. Q = {q0 , q1 , q2 } F = {q2 } = {0, 1} = {0, 1, b} La funcin de transicin se dene en la siguiente tabla: o o 0 q0 0D q1 0D 1 q1 1D q0 1D b q2 0I q2 1I

q0 q1

109

Manuales uex

Ejemplo 7.3 (Duplicar) Esta M.T. recibe una cadena formada por 1s en la cinta de entrada y duplica su tamao. El proceso comienza en el extremo derecho de n la cadena. Para llevar a cabo este trabajo, cada vez que encuentra un 1 lo marca sustituyndolo por un 0 y se desplaza hasta el nal de la cadena donde aade otro e n 0 (que representa a un 1 marcado). Al nal del proceso, en el estado q2 se cambian todos los 0s por 1s para reconstruir la informacin. o Q = {q0 , q1 , q2 , q3 } F = {q3 } = {1} = {0, 1, b} La funcin de transicin se dene en la siguiente tabla: o o

elena JuRaDO MlaGa


TEMA 7. MAQUINAS DE TURING 1 q1 0D q1 1D 0 q0 0I q1 0D q2 1D b q2 bD q0 0I q3 bI

110

q0 q1 q2

Ejemplo 7.4 (Imagen especular) Esta M.T. construye la imagen especular de un n mero binario. Es decir, si recibe la cadena de entrada 100 al acabar el proceso la u informacin que hay en la cinta es 100001. Esta mquina es similar a la anterior con o a la diferencia de que, en este caso, hay que duplicar dos tipos de s mbolos (0 y 1) en lugar de uno. Tambin en este caso los d e gitos se procesarn de derecha a izquierda. a Los 0s y 1s son reemplazados por As y Bs respectivamente cada vez que se procesan (duplican). Al nal del proceso, en el estado q3 se reconstruye la cadena cambiando las As y Bs por 0s y 1s. Q = {q0 , q1 , q2 , q3 , q4 } F = {q4 } = {0, 1} = {0, 1, A, B, b} La funcin de transicin se dene en la siguiente tabla: o o q0 q1 q2 q3 0 q1 AD 1 q2 BD A q0 AI q1 AD q2 AD q3 0D B q0 BI q1 BD q2 BD q3 1D b q3 bD q0 AI q0 BI q4 bI

Ejemplo 7.5 (Parntesis anidados) Esta M.T. reconoce cadenas de parntesis e e anidados. Las parejas de parntesis que se van procesado se marcan convirtindolos e e en *. En este caso se dispone de dos estado nales f1 y f2 que indican respectivamente si la cadena inicial es o no correcta, adems, a pesar de ser algo redundante se a escribe en la cinta la letra S o N (si o no). Al nal del proceso no se reconstruye la informacin inicial que, por tanto, se pierde. Esta mquina puede reconocer cadenas o a como stas: ((())) o (()()) pero no reconocer (()))(. e a Q = {q0 , q1 , q2 , q3 , f1 , f2 } F = {f1 , f2 } = {(, )} = {(, ), , S, N, b} La funcin de transicin se dene en la siguiente tabla: o o q0 q1 q2 q3 ( q0 (D q0 D q3 I q3 I ) q1 I * q0 D q1 I q2 I q3 I b q2 bI f2 ND f1 SD f2 ND marca un ) y pasa a q1 marca un ( y pasa a q0 al nal, comprueba que no quedan ( se llega a q3 si hay ms ( que ) a

Manuales uex

7.3.

Restricciones a la M.T.

La M.T. que se ha denido en la seccin anterior es la ms genrica posible. o a e Sin embargo, veremos a continuacin que se le pueden imponer restricciones a la o denicin sin que esto afecte a la potencia computacional de la mquina. o a

110

TeORa De auTMaTas Y lenGuaJes FORMales

7.3. RESTRICCIONES A LA M.T.

111

Las restricciones se aplicarn sucesivamente a: a 1. el alfabeto, 2. la estructura de la cinta, y 3. la capacidad de la mquina para realizar diferentes operaciones (escribir, desa plazarse o cambiar de estado) en una sola transicin. o

7.3.1.

M.T. con alfabeto binario

Cualquier M.T. es equivalente (esto signica que realiza la misma tarea) a una M.T. con un alfabeto binario = {0, 1, b}. Para conseguirlo, ser necesario codicar a en binario los caracteres del alfabeto original. Cada transicin original se desglosar en o a varias transiciones de la mquina con alfabeto binario con el consiguiente incremento a de estados intermedios, como se indica en el siguiente ejemplo: Sea Z una M.T. denida sobre el alfabeto = {x, y, z, w}. Supongamos que Z es la M.T. denida sobre un alfabeto binario, equivalente a Z, que pretendemos construir. Codicamos los s mbolos de de la siguiente forma: x = 00 y = 10 z = 01 w = 11 Supongamos que f (p, x) = (q, y, D) es una de las transiciones de Z. En la mquina a Z esta transicin se desglosar en las siguientes: o a reconoce el primer 0 de x f (p, 0) = (p0 , 0, D) f (p0 , 0) = (px , 0, I) reconoce el segundo 0 de x f (px , 0) = (px0 , 1, D) cambia 00 por 10 (x por y) f (px0 , 0) = (q, 0, D) se desplaza a la derecha y pasa al estado q Para conseguir en Z transiciones equivalentes a la de Z ha sido necesario utilizar tres nuevos estados p0 , px , px0 . En general, si Z tiene un alfabeto de tamao m ser necesario buscar n N tal n a que 2n1 < m 2n de manera que todos los s mbolos del alfabeto de Z podrn ser a codicados mediante una cadena binaria de longitud n. El proceso que deber llevar a a cabo Z ser el siguiente: a 1. Analizar los n caracteres que representan a un s mbolo del alfabeto original. En el peor de los casos sern necesarias n transiciones y 2n + 2n1 + . . . + 20 nuevos a estados. 2. Una vez reconocido el s mbolo, Z deber retroceder como mximo n posiciones a a con el n de poder modicar la cadena de longitud n que acaba de analizar. 3. Finalmente la cabeza de lectura/escritura deber desplazarse hasta llegar a la a posicin adecuada. o

111

Manuales uex

elena JuRaDO MlaGa


TEMA 7. MAQUINAS DE TURING

112

7.3.2.

M.T. con la cinta limitada en un sentido

Dada una M.T. con una cinta innita en ambos sentidos, siempre existe una mquina equivalente cuya cinta est limitada por un extremo pero es innita por el a a otro. Sea Z una M.T. con una cinta innita en ambos sentidos. Se pueden numerar las casillas de la siguiente forma: -2 -1 1 2 a Es posible construir una M.T. equivalente Z cuya cinta tendr la siguiente estructura: 0 1 -1 2 -2 En Z existe una nueva casilla, numerada con el 0, que contiene un smbolo nuevo (). Adems de a adir esta nueva casilla, se ha redistribuido la informacin de Z, a n o de manera que cada casilla de Z contiene la misma informacin que su correspono diente casilla de Z (la que tiene la misma numeracin). Veamos con un ejemplo el o funcionamiento de Z . Supongamos que f (p, x) = (q, y, D) es una de las transiciones de Z y supongamos que x est almacenado en la casilla n(n > 0), despus de realizar el cambio de a e s mbolo hay que desplazarse a la casilla n + 1 (que ahora est situada dos posiciones a a la derecha de n). En la mquina Z est transicin se desglosar en las siguientes: a a o a f (p, x) = (pD , y, D) f (pD , ?) = (q, ?, D) ? es un comod que representa a cualquier s n mbolo a El comportamiento de Z ser diferente si la casilla ocupada por x fuera la etiquetada con n ya que un desplazamiento a la derecha en Z supone un doble desplazamiento hacia la izquierda en Z . La transicin anterior se desglosar en: o a f (p, x) = (pD , y, I) f (pD , ?) = (q, ?, I) Si la posicin ocupada por x fuera la -1, habr que a adir una transicin al pasar o a n o por la posicin 0. f (q, ) = (q, , D) o En general, la nueva mquina tiene un n mero de estados 6 veces mayor que Z a u ya que cada estado q de Z se multiplica por 3 (q, qI , qD ) en la parte positiva de la cinta y otro tanto ocurre con la parte negativa de la cinta (q , qI , qD ).

7.3.3.

M.T. con restricciones en cuanto a las operaciones que realiza simultneamente a

Manuales uex

En el modelo original de M.T., se realizan tres operaciones en cada transicin: o 1. Escritura de un s mbolo 2. Cambio de estado 3. Movimiento de la cabeza de lectura/escritura

112

TeORa De auTMaTas Y lenGuaJes FORMales

7.4. MODIFICACIONES DE LA M.T.

113

Veamos, con diferentes ejemplos, como, aumentando el nmero de estados, se u puede restringir el n mero de operaciones que se realizarn simultneamente. u a a Imposibilidad para escribir y cambiar de estado simultneamente a La transicin f (p, x) = (q, y, D) se convierte en: o f (p, x) = (pxD , x, P ) f (pxD , x) = (pxD , y, P ) f (pxD , y) = (q, y, D) Imposibilidad para escribir y desplazarse simultneamente a La transicin f (p, x) = (q, y, D) se convierte en: o f (p, x) = (pD , y, P ) f (pD , y) = (q, y, D) De forma anloga, dada una M.T. es posible construir otra equivalente a ella que a ejecute una sola operacin en cada transicin. o o

7.4.

Modicaciones de la M.T.

Una de las razones de la gran aceptacin de la M.T. como modelo general de o computacin es que el modelo estndar denido al comienzo del tema es equivalente o a a otras versiones de M.T. que, sin aumentar el poder computacional del dispositivo, permiten resolver con ms facilidad determinados problemas. a

7.4.1.

Almacenamiento de informacin en el control nito o

Es posible utilizar el estado de control (perteneciente a un conjunto nito) para almacenar una cantidad nita de informacin. Para ello cada estado se representa o como un par ordenado donde el primer elemento representa realmente al estado y el segundo a la informacin que se pretende almacenar. o Veamos su utilidad con un ejemplo en el que se dene una M.T. que reconoce el lenguaje L = 01 + 10 . Como el primer s mbolo de la cadena no puede volver a aparecer, se almacena con el estado de control. Las transiciones no denidas son situaciones de error, es decir, la cadena no ha sido reconocida. Q = {q0 , q1 } {0, 1, b} estado inicial = [q0 , b] F = {[q1 , b]} = {0, 1} = {0, 1, b} [q0 , b] [q1 , 0] [q1 , 1] 0 [q1 , 0]0D [q1 , 1]0D 1 [q1 , 1]1D [q1 , 0]1D b

Es evidente que no se aumenta la potencia computacional del modelo ya que simplemente se ha utilizado una notacin diferente para designar a los estados. o

113

Manuales uex

[q1 , b]0P [q1 , b]0P

este estado indica que la cadena comienza por 0 este estado indica que la cadena comienza por 1

elena JuRaDO MlaGa


TEMA 7. MAQUINAS DE TURING

114

7.4.2.

Pistas mltiples u

En este caso se considera que la cinta est dividida en un n mero k de pistas, de a u manera que los s mbolos de la cinta se representan como k-tuplas. Tampoco en este caso se aumenta la potencia del modelo ya que slo hay un cambio en la representacin o o de los s mbolos de la M.T. En este sentido, es un caso anlogo al anterior. Esta a variacin de la M.T., concretamente con tres pistas, puede resultar muy util para o resolver operaciones aritmticas con dos datos. Cada dato se almacena en una pista e y el resultado se almacena en la tercera (que inicialmente est vac Por ejemplo, a a). una M.T. que sume n meros binarios comenzar con la siguiente informacin en la u a o cinta: b b b 1 1 b 1 1 b 0 1 b b b b

y nalmente la cinta quedar as a : b b 1 1 1 1 1 1 0 0 1 1 b b b

Ejemplos de transiciones para esta mquina: a 0 0 f (q0 , 1 ) = (q0 , 1 , I) b 1 0 0 f (q0 , 0 ) = (q0 , 0 , I) b 0

7.4.3.

S mbolos de chequeo

Manuales uex 114

Como se ha visto en ejemplos anteriores, para resolver muchos problemas es importante marcar aquellos s mbolos que se van procesando. Hasta ahora estos s mbolos se marcaban sustituyndolos por otros diferentes, sin embargo esta misma idea puede e llevarse a cabo de una forma ms intuitiva y sencilla utilizando en la cinta una seguna da pista en la que slo se almacenan espacios en blanco y otro s o mbolo (por ejemplo, ) que slo aparece debajo del s o mbolo de la primera pista (la original) que ha sido procesado. Esto no es ms que un caso particular de una M.T. con pistas m ltiples. a u Veamos en el siguiente ejemplo como se utilizar estos s an mbolos de chequeo para resolver el problema planteado en el ejemplo 3 en el que la M.T. duplicaba el n mero u de 1s que hab en la cinta inicialmente. a Ejemplo 7.6 (Duplicar - segunda versin) Q = {q0 , q1 , q2 } F = {q2 } = {1} o = {0, 1, b}

TeORa De auTMaTas Y lenGuaJes FORMales

7.4. MODIFICACIONES DE LA M.T.

115

El proceso comienza en el extremo derecho de la cinta y la funcin de transicin o o se dene en la siguiente tabla: 1 b 1 D q1 1 1 I q0 1 D q1 b b b D q2 b 1 I q0

q0 q1

7.4.4.

Mquinas multicinta a

En este caso la M.T. dispone de k cintas y k cabezas de lectura/escritura. Cada cabeza trabaja (lee y escribe) sobre su cinta y se mueve con total independencia de las dems. Para comprobar que este tipo de mquinas no aumenta el poder coma a putacional de la M.T. estndar se puede construir una mquina equivalente a ella a a utilizando varias pistas y s mbolos de chequeo. Supongamos que la mquina Z dispone a de tres cintas y una situacin concreta puede ser representada como se indica en el o siguiente esquema: Ai p

Ck r Es posible construir una nueva mquina multipista que sea equivalente a ella. Esta a nueva mquina tendr un n mero de pistas igual al doble de las cintas de la mquina a a u a original, en este caso seis. Las pistas pares almacenan un s mbolo de chequeo que sirve para indicar qu celda de la pista inmediatamente superior se est procesando en ese e a momento. Las pistas impares tienen la misma funcin que las correspondientes cintas o de la mquina original. Evidentemente, esta nueva M.T. tendr ms estados porque a a a tiene que ir procesando secuencialmente cada pareja de pistas buscado el s mbolo de chequeo correspondiente. Ai Ck

Bj q

Bj

115

Manuales uex

elena JuRaDO MlaGa


TEMA 7. MAQUINAS DE TURING

116

7.4.5.

M.T. no determinista

Dado un estado y un s mbolo analizado, la M.T. no determinista tiene un nmero u nito de posibilidades entre las que elegir para realizar el siguiente movimiento. Cada eleccin consiste en un nuevo estado, un s o mbolo a grabar y una direccin de o movimiento de la cabeza. Por ejemplo: f (q, a) = {(p1 , a, D), (p2 , b, I), (p3, a, I), . . .} Como ocurr con los Autmatas Finitos, el No Determinismo no a ade ms a o n a potencia a la M.T., ni siquiera la combinacin del No Determinismo con cualquiera o de las modicaciones previamente planteadas aumenta el poder computacional de la M.T.

7.5.

Tcnicas para la construccin de M.T. e o

116

Manuales uex

De la misma forma que al programar, al dise ar M.T.s tambin es posible utilizar n e tcnicas de dise o modular que simplican la tarea de su construccin. De hecho, una e n o M.T. puede simular el comportamiento de cualquier tipo de subrutina, incluyendo procedimientos recursivos con cualquier mecanismo conocido de paso de parmetros. a Para que una M.T. acte como subrutina de otra, la idea general es que su estado u nal se convierta en un estado de retorno a la mquina que la ha llamado. La llamada a se efect a, por tanto, a travs del estado inicial de la subrutina y el retorno a travs u e e de su estado nal. Veamos, en primer lugar, como encadenar dos M.T. M1 y M2 de manera que primero trabaje M1 e inmediatamente despus lo haga M2 utilizando como entrada la e salida de M1 . Para llevar a cabo este encadenamiento basta con realizar una transicin o desde el estado nal de M1 hasta el inicial de M2 . Es decir, si p1 y q1 son los estados inicial y nal, respectivamente de M1 y p2 y q2 son los estados inicial y nal de M2 , hay que incluir la transicin f (q1 , x) = (p2 , x, P ) x . Por ejemplo, si deseamos o construir una M.T.M que calcule la funcin f () = 2x2 , podr o amos construir M1 que calcule g(x) = x2 y M2 que calcule h(x) = 2x, as M ser el resultado de encadenar a M1 con M2 . En ocasiones slo es deseable que trabaje M2 si el proceso de M1 ha terminado o a bajo ciertas condiciones (simulacin de una sentencia if ). Por ejemplo M1 M2 o indica que M2 slo trabajar en el caso de que al acabar M1 , la cabeza de lect./esc. o a a,b est situada sobre el s e mbolo a. De la misma forma, M1 M2 indica que M2 slo o trabajar en el caso de que al acabar M1 la cabeza de lec./esc. est situada sobre a e una celda que contiene al s mbolo a o al s mbolo b. En este segundo caso, habr que a a adir las siguientes transiciones: n f (q1 , a) = (p2 , a, P ) f (q1 , b) = (p2 , b, P )

TeORa De auTMaTas Y lenGuaJes FORMales


7.5. TECNICAS PARA LA CONSTRUCCION DE M.T. f (q1 , x) = (f, x, P ) El esquema M1 a x \{a, b} donde f es un nuevo estado nal. M2

117

indica que si al acabar el proceso, M1 est se alando a n b M3 a una celda que contiene el s mbolo a, la mquina M2 debe continuar el proceso, pero a si la casilla contiene el s mbolo b, ser M3 la mquina que continuar trabajando. En a a a otro caso el proceso naliza. Para materializar esta situacin habr que a adir las o a n transiciones: f (q1 , a) = (p2 , a, P ) f (q1 , b) = (p3 , b, P ) f (q1 , x) = (f, x, P ) x \{a, b} donde f es un nuevo estado nal. Ejemplo 7.7 (Multiplicar) Este ejemplo servir para ilustrar la utilizacin de una a o M.T. como subrutina de otra. Se construir una M.T. que multiplique nmeros ena u teros, que se representan como cadenas de 1s. Por ejemplo, un 4 se representa como 1111. Se utiliza el 0 como separador entre los datos iniciales. La M.T. se disear de n a manera que si la entrada es 1m 01n 0 la salida deber ser 1nm . Bsicamente, la M.T. a a copiar al nal de la cadena el segundo bloque de 1s (1n ) tantas veces como 1s haya a en el primer bloque (1m ), los 1s de este primer bloque se van borrando (es una forma sencilla de marcarlos). En primer lugar, se dise a una M.T., llamada COPIAR que copia al nal de la n cadena de entrada n 1s. Es decir, si la situacin inicial de la M.T. se describe o as 1m 0q1 1n 01i, la situacin nal ser 1m 0q5 1n 01i+n . Los 1s (del segundo bloque) o a que se van copiando se marcan cambindolos temporalmente por un 2, y adems se a a procesan de izquierda a derecha. La funcin de transicin de COPIAR se dene en la siguiente tabla, adems q1 y q5 o o a son respectivamente los estados inicial y nal: q1 q2 q3 q4 0 q4 0I q2 0D q3 0I q5 0D 1 q2 2D q2 1D q3 1I 2 b q3 1I q1 2D q4 1I cambia un 1 por un 2 y pasa a q2 se desplaza al extr. derecho y aade un 1 n se desplaza hacia la izq. buscando un 2 cambia los 2s por 1s

117

Manuales uex

A continuacin, se dise a la M.T. MULTIPLICAR que utiliza la mquina COPIAR o n a a modo de subrutina. La M.T. MULTIPLICAR va borrando los 1s del primer dato al mismo tiempo que, mediante la M.T. COPIAR, copia n 1s al nal de la cadena. Cuando se han borrado todos los 1s del primer dato se borran tambin los del segundo e as como los 0s que act an de separadores de manera que nalmente en la cinta slo u o queda el resultado de la operacin (1nm ). En este caso los estados inicial y nal son o q0 y q12 .

elena JuRaDO MlaGa


TEMA 7. MAQUINAS DE TURING 0 q0 q5 q6 q7 q8 q9 q10 q11 1 q6 bD q7 1I q6 1D q9 1I q9 1I q11 bD q12 bD q11 bD b elimina un 1 del primer dato llama a COPIAR q10 bD q0 bD

118

q1 0D q8 0I

retrocede al extr. izq. para volver a empezar borra un 0 borra el segundo dato y un 0

7.6.

La M.T. Universal

El concepto de M.T. es tan general y potente que es posible construir una M.T. que sea capaz de simular el comportamiento de cualquier otra M.T., a esta mquina se a la llama Mquina de Turing Universal, y su forma de trabajar puede compararse con a la de un ordenador que se comporta de una u otra forma dependiendo del programa que ejecuta en cada momento. En primer lugar, veremos cmo se podr representar toda la informacin necesaria o a o para simular el comportamiento de una M.T. llamada M. Es necesario conocer la funcin de transicin, el estado inicial, el contenido inicial o o de la cinta y la posicin de la cabeza de lectura/escritura. Sin perdida de generao lidad supondremos que M trabaja con un alfabeto binario y que necesitamos m bits para codicar cada uno de sus estados. El movimiento de la cabeza se puede codicar con un unico bit (por ejemplo, 0=Derecha, 1=Izquierda). As cada transi cin f (p, a) = (q, b, D) puede codicarse con 2m + 3 s o mbolos binarios de la forma xx . x a yy . . . y b0, donde xx . . . x es una codicacin binaria del estado p y yy . . . y o . .
m

representa al estado q. La M.T. M puede representarse de la siguiente forma:

dd . . . . . . d < q . . . qd > xx . . . xayy . . . yb0 > xx . . . xayy . . . yb0 > . . . Los s mbolos < y > permiten delimitar los diferentes bloques que constituyen esta cadena. El primer bloque(dd . . . . . . d) representa el contenido de la cinta de la M.T. M, y el asterisco se coloca inmediatamente a la izquierda del s mbolo al que apunta la cabeza de lectura/escritura. Esta informacin va cambiando a lo largo del proceso o representando en cada momento el contenido de la cinta de M. El segundo bloque representa el estado actual de M (q . . . q) y el s mbolo al que apunta la cabeza (d), que es el que est a la derecha del asterisco en el bloque anterior. Esta informacin a o tiene longitud m + 1 y tambin cambia a lo largo del proceso. A partir de este punto, e

118

Manuales uex

TeORa De auTMaTas Y lenGuaJes FORMales

7.7. LA M.T. COMO GENERADORA DE LENGUAJES

119

el resto de los bloques (de longitud 2m + 3) representan a los diferentes valores de la funcin de transicin. o o Cada transicin puede considerarse como un registro formado por dos partes: la o primera (xx . . . xa) es una etiqueta que identica a la transicin, la segunda (yy . . . yb0) o puede ser considerada como el dato de la transicin. Por lo tanto, esta ultima parte de o la cadena (> xx . . . xayy . . . yb0 > . . .) puede ser vista como una coleccin de registros o formados cada uno de ellos por una etiqueta y un dato. Con estas consideraciones, ser necesario construir una M.T. localizadora de informacin cuya misin sea a o o buscar en esta coleccin de registros aqul que tenga una etiqueta determinada. Es o e evidente que, conociendo el signicado de los datos que hay en la cinta, el segundo bloque de informacin (< q . . . qd >) constituye la etiqueta que es necesario buscar. o Una vez localizado el registro (transicin) adecuado ser necesario copiar el dato o a (yy . . . yb) en el segundo bloque de la cinta, y modicar adecuadamente el primer bloque. Bsicamente, la M.T. Universal est constituida por una M.T. que localiza a a informacin en la cinta y otra que copia informacin de una parte a otra de la cinta. o o

7.7.

La M.T. como generadora de lenguajes

En los ejemplos de M.T. que hemos visto hasta ahora, stas bsicamente se ocue a paban de reconocer lenguajes o de calcular funciones. Sin embargo, hay una tercera forma de utilizar una M.T. y es como generadora de cadenas. Este tipo de M.T.s disponen de varias cintas de forma que en una de ellas llamada cinta de salida, inicialmente vac slo se llevan a cabo operaciones de escritura que van llenando la a, o cinta con las palabras del lenguaje. Es necesario utilizar un s mbolo, que no pertenece al alfabeto sobre el que est denido el lenguaje, y que act a como separador entre a u una palabra y otra. Por ejemplo, si se construyera una M.T. que generara el lenguaje formado por todas las cadenas binarias y se utilizara como separador el s mbolo , en un momento determinado la informacin que habr en la cinta de salida ser o a a: ... b 0 1 0 0 0 1 ...

119

Manuales uex

Es evidente que este tipo de M.T.s slo para en el caso de que el lenguaje a o generar sea nito, por tanto, la mquina descrita en el ejemplo anterior no parar a a nunca. Para los lenguajes de tipo 0, que se estudian con ms detalle en el prximo tema, a o siempre es posible construir una M.T. que los genere. Como veremos, dentro de este conjunto de lenguajes existe un importante subconjunto que es el de los lenguajes recursivos. En el caso de los lenguajes recursivos es posible construir una M.T. que genere las palabras de dicho lenguaje en orden creciente de tama os, es decir, el n tama o de la palabra generada en la posicin n + 1 es mayor o igual que el de la n o

elena JuRaDO MlaGa


TEMA 7. MAQUINAS DE TURING

120 generada en la posicin n. o

7.8.

La tesis de Church-Turing

Podemos decir que una M.T. es un modelo general de computacin y esto es o equivalente a decir que cualquier procedimiento algor tmico que sea ejecutable (por una persona o una mquina) puede ser desarrollado por una M.T. a La nocin de procedimiento algor o tmico que act a sobre una secuencia de s u mbolos es idntica al concepto de un proceso que puede ser ejecutado por una M.T. Esta e armacin la formul el lgico Alonzo Church a principios de la dcada de los 30 y o o o e suele denominarse tesis de Church o tesis de Church-Turing. No es una armacin matemtica exacta, ya que carecemos de una denicin precisa para el trmino o a o e procedimiento algor tmico y, por lo tanto, no es algo que pueda comprobarse. Sin embargo esta tesis es aceptada de forma general, debido a diferentes motivos: 1. No se ha planteado ningn tipo de computo que pueda incluirse en la categor u a de procedimiento algor tmico y que no pueda ejecutarse en una M.T. 2. Se han propuesto mejoras al diseo de la M.T. original y en todos los casos n ha sido posible demostrar que el poder computacional de las M.T.s no se ve a modicado. 3. Se han propuesto otros modelos tericos de cmputo, que siempre son equivao o lentes al de las M.T.s La tesis de Church-Turing no puede probarse de manera precisa debido justamente a la imprecisin del trmino proceso algortmico. Sin embargo, una vez adoptada esta o e tesis, ya podemos darle un signicado preciso al trmino: un algoritmo es un procee dimiento que puede ser ejecutado por una M.T. Esta denicin nos proporciona o un punto de partida para analizar problemas que pueden o no resolverse con una M.T. como veremos en los siguientes temas.

7.9.

Problemas

7.1 Construir una M.T. que reciba como entrada dos cadenas de 1s separadas por el s mbolo y que compruebe si tienen la misma longitud.

Manuales uex 120

7.2 Construir una M.T. con tres pistas que reciba dos n meros binarios y que inu dique cul de los dos es mayor. Consideraremos que los datos estn almacenados en a a las dos primeras pistas y alineados a la derecha, es decir, los bits menos signicativos de ambos estn situados en la misma columna. En la tercera pista se escribir una a a

TeORa De auTMaTas Y lenGuaJes FORMales

7.9. PROBLEMAS

121

G, una P o una I indicando respectivamente que el primer n mero es ms grande, u a ms peque o o igual que el segundo. a n 7.3 Construir una M.T. con tres pistas que sume dos n meros binarios. Considerau remos que los datos estn almacenados en las dos primeras pistas y alineados a la a derecha. El resultado se escribir en la tercera pista que inicialmente est vac a a a. 7.4 Construir una M.T. para reconocer cada uno de los siguientes lenguajes L1 = {0n 1n , n N} L2 = {ww 1, w (0 + 1) } L3 = {wcw / w, w (a + b) w = w }

121

Manuales uex

Tema 8 Gramticas de tipo 0 y 1 a


Contenido
8.1. Gramticas de tipo 0 . . . . . . . . . . . . . . . . . . . . . 123 a 8.2. Lenguajes de tipo 0 . . . . . . . . . . . . . . . . . . . . . . 124 8.3. El problema de la parada . . . . . . . . . . . . . . . . . . . 126 8.4. Lenguajes y gramticas de tipo 1 . . . . . . . . . . . . . . 126 a

Este cap tulo se dedica al estudio de las gramticas menos restrictivas, las de tipo a 0 y las de tipo 1. Los autmatas que reconocen estas gramticas son las Mquinas de o a a Turing (estudiadas en el cap tulo anterior) y los Autmatas Linealmente Acotados o respectivamente. La diferencia principal entre ambos autmatas est en el tama o o a n de la cinta que utilizan. Mientras que la Mquina de Turing dispone de una cinta a tericamente innita, los Autmatas Linealmente Acotados utilizan una cinta nita, o o aunque su longitud pueda ser tan grande como sea necesario en cada caso.

8.1.

Gramticas de tipo 0 a

123

123

Manuales uex

Dentro de la jerarqu de Chomsky, el grupo ms amplio de gramticas, llamadas a a a gramticas de tipo 0 y tambin gramticas sin restricciones son aquellas cuyas proa e a ducciones tienen la siguiente forma: u ::= v u + v adems u = xAy donde A N x, y a Es decir, en la parte izquierda de las producciones hay, al menos, un s mbolo no terminal. Este conjunto de gramticas es equivalente al de gramticas con estructura de a a frase, cuya denicin es algo ms restringida. Las producciones de las gramticas con o a a estructura de frase son de la forma:

elena JuRaDO MlaGa


TEMA 8. GRAMATICAS DE TIPO 0 Y 1

124

xAy ::= xvy

donde

A N

x, y, v

En estas gramticas es posible que la parte derecha de la produccin sea ms a o a corta que la izquierda (cuando v = ), en este caso se dice que es una produccin o compresora. Una gramtica compresora es la que tiene alguna regla compresora, en a este caso las derivaciones pueden ser decrecientes. El conjunto de los lenguajes generados por las gramticas de tipo 0 coincide a con el conjunto de los generados por las gramticas con estructura de frase y se a llaman lenguajes recursivamente enumerables. Estos lenguajes son reconocidos por Mquinas de Turing. a Ejemplo 8.1 La gramtica de tipo 0 que se describe a continuacin genera el lenguaa o i je L = {a2 } N = {S, A, B, C, D, E} T = {a} S ::= ACaB Ca ::= aaC CB ::= DB|E aD ::= Da P = AD ::= AC aE ::= Ea AE ::=

Esta gramtica no tiene estructura de frase (debido, por ejemplo, a la quinta y sptima a e producciones), sin embargo es posible encontrar una gramtica con estructura de frase a que sea equivalente a ella.

8.2.

Lenguajes de tipo 0

124

Manuales uex

Como ya sabemos, los lenguajes generados por las gramticas de tipo 0 se llaman a lenguajes recursivamente enumerables y son los reconocidos por las Mquinas de a Turing. Pero, adems, estos lenguajes tambin pueden ser generados por Mquinas a e a de Turing. El nombre de recursivamente enumerables es debido a que sus palabras pueden ser generadas ordenadamente por una Mquina de Turing. Dicho de otra forma, existe a un algoritmo que permite generar sus palabras una tras otra. Evidentemente, si el lenguaje es innito, la Mquina de Turing que lo genera no para nunca. a Este grupo de lenguajes incluye a algunos para los que no es posible saber si una palabra no pertenece al lenguaje. Si L es uno de estos lenguajes, cualquier Mquina a de Turing que lo reconozca no parar cuando reciba como entrada algunas palabras a que no pertenecen a L. En este caso, si w L sabemos que la M.T. parar, pero si a

TeORa De auTMaTas Y lenGuaJes FORMales

8.2. LENGUAJES DE TIPO 0

125

la mquina no para, no podemos saber si el motivo es que la palabra no pertenece al a lenguaje o es que todav no ha terminado el proceso de reconocimiento. a Teniendo en cuenta estas cuestiones es conveniente considerar un subconjunto de los lenguajes recursivamente enumerables, a los que llamaremos lenguajes recursivos, que son los aceptados por Mquinas de Turing que paran siempre, sea cual a sea la entrada que reciban. Por supuesto, la parada de la mquina debe ir precedida a por la aceptacin o no de la palabra. En el caso de los lenguajes recursivos siempre o es posible dise ar una Mquina de Turing que genere las palabras del lenguaje segn n a u un orden creciente de tama o. n A continuacin veremos unos resultados que, entre otras cosas, demuestran que o la unin es una operacin cerrada para estos dos conjuntos de lenguajes. o o Teorema 8.1 1. L es recusivo L y L son recursivamente enumerables 2. L es recursivo L es recursivo 3. L1 y L2 son recursivos = L1 L2 es recursivo 4. L1 y L2 son recursivamente enumerables = L1 L2 es recursivamente enumerable Demostracin. o 1. Si L y L son recursivamente enumerables existen dos Mquinas de Turing M1 a y M2 que reconocen respectivamente las palabras de L y L. A partir de M1 y M2 es posible construir una nueva mquina M que se limitar a anotar cul de a a a las dos mquinas M1 o M2 acepta a la cadena de entrada. Evidentemente M a reconoce a L (y tambin a L) y adems para, sea cual sea la entrada, por lo que e a L (y tambin L) es un lenguaje recursivo. Si L no fuera recursivo, no podr e amos construir M, ya que tampoco podr amos construir M2 . M1 resulta insuciente para construir M, ya que, en el caso de que M1 no pare no es posible saber si la mquina ha entrado en un bucle innito o si necesita ms tiempo para procesar a a la cadena. Si L es recursivo es evidente que tambin es recursivamente enumerable, adems e a podemos armar que L tambin es recursivamente enumerable ya que la M.T. e que reconoce a L tambin permitir reconocer a L. e a

3. Si L y L son recursivos existen dos Mquinas de Turing M1 y M2 que reconocen a respectivamente las palabras de L y L. A partir de M1 y M2 es posible construir

125

Manuales uex

2. Si L es recursivo la misma M.T. que lo reconoce permite reconocer a L, basta con intercambiar el signicado de las salidas.

elena JuRaDO MlaGa


TEMA 8. GRAMATICAS DE TIPO 0 Y 1 a una nueva mquina M que permita reconocer a las palabras de L1 L2 . Adems a esta mquina parar siempre. a a 4. Si L y L son recursivamente enumerables existen dos Mquinas de Turing M1 a y M2 que reconocen respectivamente las palabras de L y L. A partir de M1 y M2 es posible construir una nueva mquina M que permita reconocer a las a palabras de L1 L2 . No es posible asegurar que M parar cuando reciba como a entrada una palabra que no pertenezca a L1 L2 , ya que en ese caso es posible que no paren ni M1 ni M2 .

126

8.3.

El problema de la parada

Dada una Mquina de Turing con un dato en la cinta de entrada, no existe ning n a u algoritmo que permita conocer a priori si la mquina se detendr o no. Este problema a a es, por ese motivo, indecidible. Este problema puede enunciarse de otra forma. Teniendo en cuenta que el conjunto de las Mquinas de Turing puede enumerarse, es posible asociar a cada mquina un a a n mero natural. Es posible construir una Mquina de Turing H que tome como u a datos de entrada al par (n, x) donde n representa a la mquina pn y x a un dato para a esa mquina, y devuelva 1 o 0 dependiendo de si la mquina pn para o no teniendo a a a x como dato? La respuesta a esta pregunta es negativa, no es posible construir dicha mquina. a Para demostrarlo utilizaremos la tcnica de reduccin al absurdo. Supongamos e o que E es un lenguaje recursivamente enumerable pero no recursivo (sabemos que existen). Sea M = pr la Mquina de Turing que reconoce a E, esta mquina no a a para cuando recibe como entrada algunas de las palabras que no pertenecen a E. Por hiptesis H deber comportarse de la siguiente forma: o a H(r, ) = 1 si M para con el dato (esto ocurre si E) 0 si M no para con el dato (esto ocurre si E) /

De esta manera H permitir reconocer las palabras del lenguaje E y adems a a parar siempre, pero entonces E ser un lenguaje recursivo, lo cual es falso por a a hiptesis. Por lo que podemos concluir que es imposible construir H. o

Manuales uex

8.4.

Lenguajes y gramticas de tipo 1 a

Las gramticas de tipo 1 de la jerarqu de Chomsky, tambin llamadas gramticas a a e a dependientes (o sensibles) al contexto son aquellas cuyas producciones tienen la forma:

126

TeORa De auTMaTas Y lenGuaJes FORMales


8.4. LENGUAJES Y GRAMATICAS DE TIPO 1

127

xAy ::= xvy

donde

A N

x, y

v +

Es decir, en cada derivacin, un s o mbolo no terminal A se sustituye por una cadena v (no nula), siempre que ste se encuentre en un determinado contexto. Se e puede incluir la produccin S ::= , necesaria cuando pertenece al lenguaje. Es o evidente que el conjunto de las gramticas de tipo 1 est incluido en el conjunto de a a las gramticas con estructura de frase y que no admiten producciones compresoras. a Los lenguajes de tipo 1 pueden ser reconocidos por Autmatas Linealmente Acoo tados. Estos autmatas constituyen un caso particular de las Mquinas de Turing o a en el que la cinta est acotada por ambos lados. Para ello, se denen dos s a mbolos de la cinta especiales (por ejemplo: < y >) que delimitan el principio y el nal de la zona util de la cinta que puede ser manipulada. La cabeza de lectura/escritura no podr desplazarse ms a la izquierda del s a a mbolo que indica el comienzo de dicha zona util ni ms a la derecha del s a mbolo que indica el nal. Por tanto, los Autmatas o Linealmente Acotados disponen de una cinta nita pero con un tamao que puede n ser tan grande como sea necesario para el proceso.

127

Manuales uex

128

TEMA 8. GRAMATICAS DE TIPO 0 Y 1

Tema 9 Computabilidad y Mquinas de a Turing


Contenido
9.1. Funciones calculables . . . . . . . . . . . . . . . . . . . . . 129 9.2. Funciones recursivas . . . . . . . . . . . . . . . . . . . . . . 131 9.3. Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134

En este tema abordaremos el concepto de computabilidad o calculabilidad que se puede aplicar a aquellos problemas que pueden ser resueltos mediante un algoritmo. A partir de la denicin de mquina de Turing podremos plantear una denicin o a o formal para este concepto. Tambin estudiaremos el concepto de recursividad y su e relacin con el de calculabilidad. o

9.1.

Funciones calculables

natural, la mquina debe detenerse dejando en la cinta un n mero de unos, siendo a u f (n1 , n2 , . . . , nr ) = . Es posible que para una tupla concreta la mquina no se detenga, en ese caso la a funcin no estar denida para esos valores. o a 129

129

Manuales uex

La Teor de la Computabilidad parte de la idea inicial de hacer precisa la noa cin intuitiva de funcin calculable, es decir, una funcin que pueda ser calculada o o o automticamente mediante un algoritmo. a Dada una funcin f : Nr N , a veces es posible construir una Mquina de o a Turing Zf que se comporte como dicha funcin. o Es decir, si Zf inicia su funcionamiento con la siguiente informacin en la cinta o 11 . 1 0 . 1 0 . . . 0 11 . 1, donde cada ristra de unos representa a un nmero . . 11 . . .. u
n1 n2 nr

elena JuRaDO MlaGa


TEMA 9. COMPUTABILIDAD Y MAQUINAS DE TURING

130

Denicin 9.1 (Funcin parcialmente calculable) o o Se dice que una funcin f : D Nr N es parcialmente calculable si existe o una Mquina de Turing tal que para cada tupla t D, la mquina calcula f (t) a a Denicin 9.2 (Funcin calculable) o o Se dice que una funcin es calculable si es parcialmente calculable y est denida o a sobre todo Nr , es decir, D = Nr Ejemplo 9.1 Funciones calculables y parcialmente calculables 1. f1 (n1 , n2 ) = n1 + n2 es calculable 2. f2 (n1 , n2 ) = n1 n2 si n1 n2 es parcialmente calculable 3. f3 (n1 , n2 ) = n1 n2 si n1 n2 es calculable 0 si n1 < n2

Las deniciones anteriores pueden ampliarse de forma natural a funciones denidas sobre otros conjuntos, por ejemplo, denidas sobre cadenas de s mbolos. De esta forma podemos establecer las siguientes relaciones entre lenguajes de tipo 0 y funciones calculables o parcialmente calculables. Dado un lenguaje L , denimos su funcin caracter o stica de la siguiente forma: fL : N w fL (w) =

1 0

si w L si w L /

La funcin caracter o stica de un lenguaje determina si una palabra pertenece o no pertenece a dicho lenguaje. Tambin es posible denir una funcin que slo indique e o o si una palabra pertenece a un lenguaje, dicha funcin no estar denida en todo el o a dominio y se comportar de la siguiente forma: a
fL : N w fL (w) = 1 si w L

Considerando estas deniciones, podemos armar que:

Manuales uex

Si L es un lenguaje recursivo, su funcin caracter o stica es calculable. Si L es un lenguaje recursivamente enumerable, entonces es el dominio de una funcin parcialmente calculable (fL ). o

130

TeORa De auTMaTas Y lenGuaJes FORMales

9.2. FUNCIONES RECURSIVAS

131

Ejemplo 9.2 (Funcin no calculable) En este ejemplo no slo presentaremos una o o funcin no calculable sino tambin un lenguaje que no es recursivo y otro que ni o e siquiera es recursivamente enumerable. El conjunto de todas las Mquinas de Turing asociadas a funciones denidas de a N en N es innito pero numerable, basta tener en cuenta que una M.T. cualquiera puede describirse como una cadena nita de s mbolos (tal y como se explic en la o denicin de la Mquina de Turing Universal) as como el mtodo que Gdel propuso o a e o para enumerar objetos que inicialmente no parecen ser enumerables (pgina 106). a Por tanto, podemos describir dicho conjunto de M.T.s de la siguiente forma: MT = {p0 , p1 , . . . , pn , . . .}

A partir de dicha lista de mquinas, podr a amos denir la siguiente funcin: o f : N N n f (n) =

0 si pn no para con el dato n k + 1 si pn para con el dato n y devuelve el valor k

Si suponemos que f es calculable, existe una Mquina de Turing que realiza el a mismo trabajo que f . Consideremos que pr sea esta mquina. a Si f (r) = 0 pr no para con la entrada r Si f (r) = 0 f (r) = k + 1 donde k es el resultado que devuelve la mquina pr a En cualquiera de los dos casos, la situacin que se produce es absurda ya que f y o pr no tienen el mismo comportamiento, por lo tanto, la suposicin inicial es falsa y o f no es una funcin calculable. o El conjunto L1 = {n N/ pn no para si recibe como dato a n} no es recursivamente enumerable y adems, el conjunto L2 = L1 es recursivamente enumerable a pero no es recursivo. Veamos, a continuacin, como justicar estas armaciones. En o la seccin 8.3 qued demostrado que L1 no es un lenguaje recursivamente enumeo o rable, ya que es imposible construir una M.T. que lo reconozca. Por otra parte, L2 = {n N/ pn para si recibe como dato a n} es un lenguaje recursivamente enumerable porque la Mquina de Turing Universal permite saber si un nmero pertenece a u a L2 y, por tanto, puede reconocer los elementos de L2 , sin embargo no es recursivo ya que su complementario L2 = L1 no es recursivamente enumerable (teorema 8.1).

La recursin consiste en denir un concepto en trminos de si mismo. Esta idea o e puede aplicarse a las deniciones de funciones, de conjuntos y, en particular, de lenguajes.

131

Manuales uex

9.2.

Funciones recursivas

elena JuRaDO MlaGa


TEMA 9. COMPUTABILIDAD Y MAQUINAS DE TURING

132

A continuacin veremos una primera denicin de funcin recursiva. o o o Denicin 9.3 (Funcin recursiva) o o Una funcin f : Nn N se considera recursiva si tiene los siguientes elementos: o Deniciones bsicas que establecen de manera axiomtica el valor que toma la a a funcin para determinados valores del conjunto origen. o Por ejemplo, f act(0) = 1. Una o ms reglas recursivas que permiten calcular nuevos valores de la funcin a o a partir de otros valores conocidos. Por ejemplo, f act(n) = n f act(n 1), n1

Aplicar las deniciones bsicas y las recursivas un n mero nito de veces debe a u ser suciente para calcular cualquier valor de la funcin. o A pesar de que esta denicin es muy intuitiva no es lo sucientemente estricta o como para denir los casos ms complejos de recursividad. Por este motivo, se ina troducirn en las siguientes secciones, los conceptos de funcin recursiva primitiva y a o funcin -recursiva. o Diremos que una funcin recursiva es total si est denida para todos los valores o a del conjunto origen y parcial si lo est slo para un subconjunto propio del conjunto a o origen. Para denir un conjunto de manera recursiva se especican ciertos objetos del conjunto y luego se describen uno o ms mtodos generales que permiten obtener a e nuevos elementos a partir de los existentes. Por ejemplo, podemos denir recursivamente el lenguaje as : Para cada w y cada a tenemos que aw

9.2.1.

Funciones recursivas primitivas

Es posible denir las funciones recursivas utilizando slo funciones bsicas y ciero a tas reglas que permiten mezclar funciones para construir otras ms complejas. a Las funciones consideradas bsicas (Kleene) son las siguientes: a Funcin constante 0 Su valor es independiente del argumento. o C(x) = 0, x N Funcin sucesor A cada n mero natural le hace corresponder su sucesor siguiendo o u el orden habitual, de menor a mayor. Por ejemplo, S(5) = 6, S(22) = 23. Hay que hacer notar que la suma no se ha denido formalmente, por eso no puede ser utilizada en esta denicin. o

132

Manuales uex

TeORa De auTMaTas Y lenGuaJes FORMales

9.2. FUNCIONES RECURSIVAS

133

Funciones de proyeccin Reciben n argumentos y devuelven el argumento i-esimo, o es decir la proyeccin sobre la dimensin i. Pin (x1 , . . . , xn ) = xi o o A continuacin veremos dos reglas que nos permitirn construir funciones ms o a a complejas a partir de las bsicas. a Denicin 9.4 (Regla de composicin) o o Dadas las siguientes funciones: 1 , . . . , m , denidas como i : Nn N : Nm N

Se dene la composicin de estas m + 1 funciones como : Nn N tal que, o (x1 , . . . , xn ) = (1 (x1 , . . . , xn ), . . . , m (x1 , . . . , xn )) Denicin 9.5 (Regla de recursin primitiva) o o Dadas dos funciones: , denidas como : Nn N : Nn+2 N Se puede denir a partir de ellas, una nueva funcin : Nn+1 N tal que, o (0, x1 , . . . , xn ) = (x1 , . . . , xn ) (y + 1, x1 , . . . , xn ) = (y, (y, x1, . . . , xn ), x1 , . . . , xn ) En el caso particular de que n = 0, se dene as : (0) = k (y + 1) = (y, (y)) Denicin 9.6 o Decimos que una funcin es recursiva primitiva si se puede denir a partir de las o funciones bsicas mediante cero o ms aplicaciones de las reglas de composicin y de a a o recursin primitiva. o Aunque el n mero de funciones recursivas primitivas es muy amplio, existen alu gunas funciones recursivas que no son primitivas. Un ejemplo es la funcin de Ackero mann, que se dene de la siguiente forma: A(0, x) = x + 1 A(n + 1, 0) = A(n, 1) Por este motivo debemos incluir otra regla para la generacin de funciones recuro sivas que nos permitir ampliar su n mero, de esta manera llegamos a la denicin a u o de funcin -recursiva. o A(n + 1, x + 1) = A(n, A(n + 1, x))

133

Manuales uex

elena JuRaDO MlaGa


TEMA 9. COMPUTABILIDAD Y MAQUINAS DE TURING

134

9.2.2.

Funciones -recursivas

Para ampliar el n mero de funciones que podemos generar a partir de las funciones u recursivas primitivas, aadiremos una nueva regla de composicin: la minimizacin. n o o Denicin 9.7 (Regla de minimizacin) o o o o Dada la funcin: : Nn+1 N se dene la funcin de minimizacin o : Nn N tal que, (x1 , . . . , xn ) = min{y/(x1 , . . . , xn , y) = 0 z < y, (x1, . . . , xn , y)est denida} a En otras palabras, hace corresponder a cada entrada x el menor entero que cumple que (x, y) = 0. Denicin 9.8 (Funcin -recursiva) o o Decimos que una funcin es -recursiva, o simplemente recursiva, si se puede denir o a partir de las funciones bsicas mediante cero o ms aplicaciones sucesivas de las a a reglas de composicin, recursin primitiva y minimizacin. o o o El concepto de recursividad est a ntimamente unido al de computabilidad, ya que toda funcin computable es -recursiva. Adems, el conjunto de las mquinas o a a de Turing es equivalente al de las funciones -recursivas. Es decir un problema se puede resolver mediante mquinas de Turing si y slo si se puede plantear utilizando a o funciones recursivas.

9.3.

Problemas

9.1 Dene recursivamente las siguientes funciones: 1. La suma de dos n meros enteros u 2. La multiplicacin de dos n meros enteros o u 9.2 Dene recursivamente los siguientes lenguajes: 1. L1 = {ww 1/w (0 + 1) } 2. L2 = {0n 1n /n 0} 3. Dado el alfabeto = {i, (, ), +, }, considera el lenguaje formado por expresiones aritmticas que pueden o no tener parntesis. Por ejemplo: e e (i + i), i + i, (i + i) (i + i), etc.

Manuales uex 134

9.3 Demuestra que las siguientes funciones son recursivas primitivas:

TeORa De auTMaTas Y lenGuaJes FORMales

9.3. PROBLEMAS 1. La funcin constante K(x)= k o 2. La funcin predecesor, o P (x) = 3. La funcin suma o 4. La funcin producto o 5. La funcin sustraccin propia, o o sp(x, y) = xy x>y 0 xy x1 x>1 0 x=0

135

6. La funcin sustraccin absoluta, sa(x, y) = |x y| o o 7. Las funciones mximo y m a nimo 8. La funcin signo, o sg(x) = 1 x>0 0 x=0

135

Manuales uex

Tema 10 Introduccin a la Complejidad o Computacional


Contenido
10.1. Complejidad y Mquinas de Turing . . . . . . . . . . . . 137 a 10.2. Medidas de complejidad algor tmica . . . . . . . . . . . . 138 10.3. Problemas P, NP y NP-completos . . . . . . . . . . . . . 141

De entre todos los problemas que pueden plantearse, el conjunto de aquellos que son computables, es decir, que pueden ser resueltos aplicando un algoritmo, es muy peque o. Sin embargo, no todos los problemas computables son factibles en la realidad n por requerir a veces demasiados recursos, ya sean de espacio de memoria o de tiempo. La teor de la complejidad algor a tmica es la encargada de denir los criterios bsicos a para saber si un problema computable es factible, dicho de otro modo, si existe un algoritmo eciente para su resolucin y en este caso cul es su grado de eciencia. o a

10.1.

Complejidad y Mquinas de Turing a

137

137

Manuales uex

Hasta este momento hemos analizado si los problemas son solubles o insolubles, es decir, si pueden o no ser resueltos mediante una mquina de Turing (un algorita mo). Sin embargo, en la vida real los recursos de computo disponibles son limitados y por tanto podemos encontrarnos con problemas que son solubles, pero que podemos considerar intratables debido a la gran cantidad de tiempo y memoria que son necesarios para resolverlos. En esta seccin introduciremos una terminolog que nos o a permitir analizar preguntas como cunto tiempo tardaremos en resolver un problea a ma?

elena JuRaDO MlaGa


TEMA 10. INTRODUCCION A LA COMPLEJIDAD COMPUTACIONAL

138

A priori, establecer un criterio universal para poder saber cun eciente es un a algoritmo no es sencillo porque un mismo problema puede resolverse sobre diferentes tipos de mquinas, con diferentes grados de eciencia. La eciencia de un algoritmo a est en funcin del tiempo y de la cantidad de memoria que se necesite para ejecutar a o el programa, y esto a su vez depende del hardware utilizado. Sin embargo, la Mquina de Turing permite que nos liberemos de la mayor parte a de estas ligaduras materiales. Recordemos que al estudiar la Mquina de Turing no a se impuso ning n l u mite de espacio ni de tiempo, es decir, la Mquina de Turing a no padece limitaciones en cuanto a la longitud de la cinta utilizada ni en cuanto al n mero de movimientos que realiza (tiempo de ejecucin). Por esta razn utilizaremos u o o la Mquina de Turing para medir la complejidad de un algoritmo. a

10.2.

Medidas de complejidad algor tmica

La complejidad de una computacin se mide por la cantidad de espacio y de o tiempo que consume. Las computaciones ecientes tienen unas exigencias de recursos peque as (este calicativo debe ser considerado de una manera relativa). Los recursos n que necesita una computacin que acepta cadenas de algn lenguaje, suelen depender o u del tama o (longitud) de la cadena de entrada. n En los siguientes prrafos consideraremos, en primer lugar, los recursos espaciales a y despus los temporales. e Si M es una mquina de Turing, denotaremos por L(M) al lenguaje que reconoce a dicha mquina. a Denicin 10.1 (Complejidad espacial) o La mquina M con k pistas tiene una complejidad espacial S(n), si para cualquier a entrada de longitud n, consulta como mximo S(n) casillas. Tambin podemos decir a e que M es una Mquina de Turing espacialmente acotada por S(n), o que L(M) es un a lenguaje con complejidad espacial S(n). Se cumple siempre que S(n) 1 Teorema 10.1 Si una Mquina de Turing con k pistas y cota espacial S(n) acepta al lenguaje L, a entonces existe una Mquina de Turing con una sola pista y cota espacial S(n) que a tambin lo acepta. e Es decir, el n mero de pistas de trabajo utilizadas para aceptar un lenguaje no u afecta a la complejidad espacial de L. Denicin 10.2 (Clases de complejidad espacial) o La familia de los lenguajes aceptados por Mquinas de Turing deterministas con a complejidad espacial S(n) se llama ESPACIOD(S(n)). La familia de los lenguajes

138

Manuales uex

TeORa De auTMaTas Y lenGuaJes FORMales


10.2. MEDIDAS DE COMPLEJIDAD ALGOR ITMICA

139

aceptados por Mquinas de Turing no deterministas con esa misma complejidad esa pacial se llama ESPACION(S(n)). Estas clases se conocen como clases de complejidad espacial. Teorema 10.2 Sean S1 , S2 y S funciones de N en N. Supongamos que S1 (n) S2 (n), para todo n N, y que c > 0. Entonces se cumple: 1. ESPACIOD(S1 (n)) ESPACIOD(S2 (n)) 2. ESPACION(S1 (n)) ESPACION(S2 (n)) 3. ESPACIOD(S(n)) ESPACION(S(n)) 4. ESPACIOD(S(n)) = ESPACIOD(cS(n)) 5. ESPACION(S(n)) ESPACIOD(S(n)2 ) Aunque el espacio es un recurso importante de cualquier Mquina de Turing, el a tiempo de computacin tambin lo es. Consideraremos que la complejidad temporal o e se mide por el n mero de movimientos que hace la mquina. u a Denicin 10.3 (Complejidad temporal) o Supongamos que M es una mquina de Turing que realiza como mximo T(n) movimiena a tos sobre una cadena de longitud n, entonces se dice que M tiene una complejidad temporal T(n) o que es una mquina con una cota temporal T(n). Tambin se dice a e que L(M) es un lenguaje temporalmente acotado por T(n). Siempre se cumple que T(n) n+1 (ya que n+1 es el n mero m u nimo de movimientos necesarios para leer todos los s mbolos que inicialmente hay en la cinta) Denicin 10.4 (Clases de complejidad temporal) o La familia de los lenguajes aceptados por Mquinas de Turing deterministas con a complejidad temporal T(n), es TIEMPOD(T(n)). La familia de los lenguajes aceptados por Mquinas de Turing no deterministas con complejidad temporal T(n) es a TIEMPON(T(n)). Estas clases se conocen como clases de complejidad temporal. Teorema 10.3 Sean T1 , T2 y T funciones de N en N. Supongamos que T1 (n) T2 (n), para todo n N . Entonces se cumple:

2. TIEMPON(T1 (n)) TIEMPON(T2 (n)) 3. TIEMPOD(T(n)) TIEMPON(T(n))

139

Manuales uex

1. TIEMPOD(T1 (n)) TIEMPOD(T2 (n))

elena JuRaDO MlaGa


TEMA 10. INTRODUCCION A LA COMPLEJIDAD COMPUTACIONAL

140

Teorema 10.4 Si L TIEMPOD(f(n)) entonces, L ESPACIOD(f(n)) Demostracin. Supongamos que M es la Mquina de Turing que reconoce a L o a y que realiza, como mximo, f (n) movimientos sobre la cadena de longitud n. Es a evidente que puede inspeccionar un mximo de 1 + f (n) celdas, por tanto, L a ESPACIOD(f(n)+1) L ESPACIOD(f(n)). Las funciones S(n) y T(n) que hemos utilizado no tienen porque ser una funcin o exacta, sino slo un indicador de la forma de variacin del espacio o del tiempo o o ocupado, en funcin de la longitud de la entrada de datos. Habitualmente nos interesa o poder comparar estas funciones con otras (habitualmente ms simples) de manera que a las tasas de crecimiento sean anlogas. a Veamos a continuacin la notacin que se utiliza para comparar tasas de crecio o miento. Denicin 10.5 o Sean dos funciones f, g : N R. Se dice que: f = O(g) si existen dos constantes C y k tales que x k, f (x) Cg(x) f = o(g) si para cada constante C, existe k tal que x k, f (x) Cg(x) f = (g) si f = O(g) y g = O(f ) La expresin f = O(g) quiere decir que para valores sucientemente grandes de o x, la funcin f (x) es menor o igual a una funcin proporcional a g. La constante de o o proporcionalidad C puede ser muy grande de forma que el valor real de f (x) puede ser mayor que g(x), sin embargo la tasa de crecimiento de f no es mayor que la de g. Si f = (g) las dos funciones tienen la misma tasa de crecimiento, es decir, los dos valores son aproximadamente equivalentes, con valores grandes de x. Si f = o(g) la tasa de crecimiento de f es menor que la de g, es decir, f (x) ser en a ultima instancia menor que g(x), pero no sabemos cun grande tiene que ser x para a que esto ocurra. Por ejemplo, si pretendemos estudiar la eciencia de un algoritmo ejecutado por una Mquina de Turing M, no existe una gran diferencia, a efectos prcticos, entre a a que su tiempo de ejecucin T(n) sea 14n2 + 25n 4 o que sea 3n2 , ya que en ambos o casos podemos decir que su tasa de crecimiento no es mayor que la de n2 , es decir, T = O(n2 ). Diremos que la mquina es de complejidad temporal n2 , o (n2 )-limitada a en el tiempo. Las funciones anteriores tienden (cuando n ) a las as ntotas 14n2 2 2 y 3n respectivamente, que son funciones del tipo cn . As pues estamos hablando de complejidad en trminos asintticos. e o

140

Manuales uex

TeORa De auTMaTas Y lenGuaJes FORMales

10.3. PROBLEMAS P, NP Y NP-COMPLETOS

141

Cuando queremos hacer referencia al crecimiento de los recursos necesarios para la ejecucin de un determinado algoritmo utilizaremos la notacin O(f(n)), que reo o presenta su comportamiento asinttico. As un tiempo de ejecucin 14n2 + 25n 4, o o se resume en que la complejidad del algoritmo es O(n2 ). Los algoritmos cuya complejidad del tipo O(n), O(n2 ), O(n3 ), en general O(nc ), se llaman algoritmos polinmicos, o de complejidad polinmica. Los algoritmos que o o se comportan como 2n (en general cn ) son algoritmos exponenciales, o de complejidad exponencial. Otro aspecto diferente y muy importante dentro de la Teor de la Complejidad a es el que se reere, no a la complejidad del algoritmo, sino a la complejidad del problema. Esto nos obliga a comparar todos los algoritmos posibles para resolver un determinado problema. Se conoce como cota superior a la complejidad de un problema a la complejidad del mejor algoritmo que se haya podido encontrar para resolverlo. Es posible probar, a veces, que no existe algoritmo que pueda resolver un determinado problema sin emplear como mnimo una cierta cantidad de recursos, a la que se llama cota inferior.

10.3.

Problemas P, NP y NP-completos

Diremos que un algoritmo es eciente si existe una Mquina de Turing detera minista que lo ejecute con una complejidad temporal polinmica. A la clase de los o algoritmos (o de los problemas que estos algoritmos resuelven) ecientes se la denomina clase P . Existen algoritmos no deterministas que no siguen un ujo jo, sino que act an en u funcin de una serie de decisiones tomadas en tiempo real. De entre los algoritmos no o deterministas existe un amplio conjunto de ellos que pueden considerarse ecientes, pero es indemostrable que estn en P, debido precisamente a que no son deterministas. e A esta clase de problemas se les llama NP. Cualquier problema se puede plantear como un lenguaje formado por todas las soluciones posibles para ese problema. Un algoritmo que reconozca al lenguaje tambin servir para resolver el problema. Por esta razn resulta equivalente considerar e a o que P y NP son clases de problemas o clases de lenguajes. Denicin 10.6 (Clases P y NP) o La clase P de lenguajes esta compuesta por todos los lenguajes que acepta alguna Mquina de Turing determinista que tiene una cota temporal polinmica. La clase a o NP se compone por todos los lenguajes que acepta alguna Mquina de Turing no a determinista con una cota temporal polinmica. o Un ejemplo de problema NP es el conocido problema de Hamilton: dado un conjunto de puntos, puede encontrase un camino que pase una sola vez por cada uno de

141

Manuales uex

elena JuRaDO MlaGa


TEMA 10. INTRODUCCION A LA COMPLEJIDAD COMPUTACIONAL

142

los puntos?. Un algoritmo determinista para resolver el problema es muy costoso, sin embargo dada una posible solucin, resulta muy sencillo comprobar que es vlida. o a En este terreno el problema principal que podemos plantearnos es el siguiente: es el conjunto NP igual al conjunto P? Este es el llamado problema P-NP, y todav a no tiene solucin. Es evidente que P NP, pero para poder demostrar que la igualdad o se cumple habr que demostrar que todo problema NP es tambin P, es decir, habr a e a que encontrar una forma de transformar una Mquina de Turing no determinista con a cota temporal polinmica en una Mquina de Turing determinista con cota temporal o a tambin polinmica. Por otro lado, tampoco se ha podido demostrar la desigualdad e o entre los dos conjuntos, para ello habr que encontrar un lenguaje que pertenezca a a NP y que no pertenezca a P. Dentro de la clase NP hay un cierto n mero de problemas que pueden catalogarse u entre los ms duros, en el siguiente sentido: si se encontrase un algoritmo de tiempo a polinmico para cualquiera de ellos habr un algoritmo de tiempo polinmico para o a o todo problema en NP. Se dice que cualquier problema de esta categor es NPa completo. Denicin 10.7 o Se dice que un lenguaje L1 es reducible en tiempo polinmico a un lenguaje L2 si hay o una funcin f computable en tiempo polinmico para la cual f(u) L2 sii u L1 . o o o Se utiliza la notacin <p para indicar que L1 es reducible en tiempo polinmico o a L2 . Observar que si L1 <p L2 entonces determinar si w L1 no es ms dif a cil que determinar si f(w) L2 . Basndonos en la misma idea podemos decir que un a problema es reducible en tiempo polinmico a otro. o Denicin 10.8 (Problemas NP-completos) o Un problema P NP es NP-completo si todos los dems problemas de la clase NP a se pueden reducir a l en tiempo polinmico. e o Esta clase de problemas es importante porque si pudiramos encontrar una solue cin en tiempo polinmico en una mquina de Turing determinista para un solo o o a problema NP-completo habr amos demostrado que P=NP. Ejemplos de problemas NP-completos SAT Dada una expresin lgica, por ejemplo: p (q p), hay que determinar si es o o posible satisfacerla, es decir, si es posible encontrar valores para los predicados p y q que hagan que la expresin tenga un valor verdadero. o

142

Manuales uex

CV - cobertura de vrtices Dado un grafo G con un conjunto de vrtices V y un e e conjunto de arcos E, y dado un n mero k, se trata de averiguar si existe un u subconjunto V de V, con no ms de k elementos, tal que para todo arco de E a alguno de los nodos unidos por este arco pertenece a V.

Apndice A e Generadores automticos de a analizadores lxicos y sintcticos e a


Contenido
A.1. Generador de analizadores lxicos . . . . . . . . . . . . . 143 e A.2. Generador de analizadores sintcticos . . . . . . . . . . . 149 a

Existen herramientas que generan analizadores lxicos a partir de la denicin de e o una serie de expresiones regulares. Estos analizadores llevan a cabo el procesamiento secuencial de una coleccin de caracteres de manera que al encontrar una cadena que o encaja con una de las expresiones denidas realiza las acciones que se hayan indicado previamente. Internamente, los analizadores lxicos se comportan como Autmatas e o Finitos que reconocen expresiones regulares. Los analizadores lxicos constituyen una e parte fundamental de cualquier compilador pero tambin pueden ser utilizados con e otros objetivos, por ejemplo, para modicar la estructura de un chero de texto. Anlogamente, existen herramientas que generan analizadores sintcticos a partir a a de la denicin de una gramtica independiente del contexto. Concretamente, generan o a un reconocedor ascendente del tipo LR(1). La utilizacin conjunta de ambas herramientas simplicar el proceso de diseo y o a n construccin de traductores para un determinado lenguaje formal. Esta ser una de o a sus principales aplicaciones en el ambito de esta asignatura.

Existen diferentes programas que, con un comportamiento similar, permiten generar automticamente analizadores lxicos. Entre los ms utilizados estn PCLEX, a e a a LEX y FLEX, estos dos ultimos son utilizados en entorno UNIX/LINUX. Todos ellos 143

143

Manuales uex

A.1.

Generador de analizadores lxicos e

elena JuRaDO MlaGa


APENDICE A. GENERACION AUTOMATICA DE ANALIZADORES

144

traducen la descripcin de un analizador lxico, realizada en un metalenguaje al que o e llamaremos Lex, a un programa escrito en C. Utilizando las opciones adecuadas es posible generar dicho programa escrito en otros lenguajes de alto nivel como C++, Java, Pascal, etc. Lex es un lenguaje de alto nivel de propsito espec o co, dise ado para representar n expresiones regulares. Adems, el cdigo puede extenderse con secciones escritas en a o C o en el lenguaje de programacin correspondiente. o

A.1.1.

Cmo utilizar PCLEX o

PCLEX se ejecuta en l nea de comandos, de la siguiente forma: PCLEX [opciones] nombre chero nombre chero es el nombre del chero que contiene la especicacin del analio zador lxico en Lex. Por claridad, se recomienda que el nombre de estos cheros e tenga extensin .l. Por defecto se generar un chero con el mismo nombre y con o a extensin .c. Por ejemplo, si el chero de entrada se llama ejemplo.l, el de salida se o llamar ejemplo.c. a Se pueden utilizar las siguientes opciones a la hora de ejecutar PCLEX: -c el chero de salida tiene el nombre yylex.c -C<nom chero> el chero de salida tiene el nombre que indica <nom chero> -h muestra una pantalla de ayuda -i construye un analizador insensible a la diferencia may sculas/min sculas u u -n suprime las directivas #line en el chero de salida -p<nom chero> utiliza <nom chero> como chero esqueleto para construir el chero de salida, en lugar de utilizar el chero por defecto -s suprime la regla por defecto, es decir, las entradas que no encajen con ninguna regla provocan la salida del programa con el mensaje : pclex scanner jammed Los dems programas anteriormente mencionados se utilizan de forma similar a aunque el signicado de las opciones puede variar.

Manuales uex

A.1.2.

Estructura de un programa Lex

Un programa Lex se divide en tres partes, cada una de ellas se separa de la siguiente utilizando el delimitador % %. Es decir, el programa tendra el siguiente aspecto:

144

TeORa De auTMaTas Y lenGuaJes FORMales


A.1. GENERADOR DE ANALIZADORES LEXICOS zona de deniciones %% zona de reglas %% procedimientos del programador Zona de deniciones En esta parte del programa se pueden denir expresiones regulares que se utilizarn posteriormente. Tambin se pueden incluir todas las denia e ciones en C que sean necesarias. Las deniciones en C, debern ir encerradas entre a los delimitadores %{ y %}. Por ejemplo: %{ #include "stdlib.h" int x,y; %} Las deniciones de expresiones regulares, tendrn el siguiente formato: a nombre expresin regular o A partir de este momento cada vez que deseemos utilizar esa expresin podemos o hacerlo escribiendo su nombre entre llaves. En el siguiente ejemplo, se dene una expresin regular llamada digito, que representa a un d o gito cualquiera y otra, llamada entero, que representa a una coleccin de d o gitos, o sea a un nmero entero y positivo: u digito [0 9] entero {digito}+ Zona de reglas Cada regla est formada por una expresin regular seguida por a o una serie de acciones (codicadas en C) que sern las que el analizador lxico ejecute a e cuando encuentre una cadena de caracteres que encaje con la expresin regular. Por o ejemplo: ab* {printf("hola");} Procedimientos del programador En esta parte del programa se incluye el programa C que el usuario haya dise ado. En el caso ms sencillo, en el que slo se n a o desee generar un analizador lxico, el programa principal deber incluir al menos una e a llamada al procedimiento yylex. Es decir:

145

145

Manuales uex

void main() { yylex(); } yylex es el procedimiento que act a como analizador lxico y cuyo cdigo C es u e o generado a partir de las especicaciones que aparecen en la zona de reglas. El

elena JuRaDO MlaGa


APENDICE A. GENERACION AUTOMATICA DE ANALIZADORES

146

programa principal puede ser mucho ms complejo e incluir todos los procedimientos a que se deseen.

A.1.3.

Cmo representar una expresin regular o o

Para describir las expresiones regulares que pueden aparecer en la zona de deniciones o en la zona de reglas, hay que seguir las siguientes normas: La concatenacin entre s o mbolos se representa escribindolos uno junto a otro e sin utilizar ningn s u mbolo especial. Por ejemplo: int char while representar palabras reservadas de C. an El punto (.) es un comod y representa a cualquier carcter (slo a uno) del n a o cdigo ASCII salvo a la marca n de l o nea (representada por \n). Por ejemplo: a. representa a la letra a seguida por cualquier otro carcter. a Podemos utilizar los corchetes para representar la unin entre varios s o mbolos y el guin para representar un rango de valores: o [a-z] [Ff][Oo][Rr] representa a cualquier letra minscula u representa a la palabra for escrita utilizando letras may sculas o min sculas (ser la manera de representar u u a palabras reservadas en un lenguaje como Pascal)

Las repeticiones de s mbolos, o de conjuntos de s mbolos, se pueden representar utilizando diferentes operadores: operador + {n} {n,m} ? no de repeticiones 0, 1, . . . 1, 2, . . . n n, . . .,m 0,1 ejemplo ab* ab+ ab{3} ab{3,5} ab? cadenas vlidas a a, ab, abb, . . . ab, abb, . . . abbb abbb, abbbb, abbbbb a, ab

Manuales uex

La barra vertical (|) representa la unin entre expresiones regulares. Por ejemo plo: ab|cd representa a la cadena ab o a la cadena cd

146

TeORa De auTMaTas Y lenGuaJes FORMales


A.1. GENERADOR DE ANALIZADORES LEXICOS

147

Marcas de contexto Si utilizamos al comienzo de una expresin, sta slo se o e o tendr en cuenta en el caso de que la cadena analizada est al comienzo de una l a e nea. Si utilizamos $ al nal de una expresin, sta slo se tendr en cuenta en el caso o e o a de que la cadena analizada est al nal de una l e nea. Si utilizamos / entre dos expresiones, slo se tendr en cuenta la primera de ellas o a en el caso de que aparezca seguida por la segunda. Ejemplos: ab la cadena ab debe aparecer al comienzo de la l nea ab$ la cadena ab debe aparecer al nal de la l nea ab/cd la cadena ab debe aparecer seguida por la cadena cd Prioridades Los operadores que hemos visto tienen diferentes prioridades. Aparecen listados a continuacin, de mayor a menor prioridad: o () [] *+?{} ee | $ parntesis e unin entre s o mbolos repeticiones concatenacin o unin de expr. regulares o indicadores de contexto

A.1.4.

Variables y procedimientos predenidos

yylex() es el procedimiento principal a partir de las expresiones regulares denidas, act a como un analizador lxico. u e yytext es una variable de tipo cadena de caracteres y almacena la cadena que acaba de ser analizada por el scanner. yyleng es una variable entera que almacena la longitud de yytext. yyin, yyout son los nombres de los cheros de entrada y de salida del analizador lxico. e ECHO es una accin predenida que escribe la cadena analizada en el chero de o salida, por tanto, es equivalente a la instruccin o

REJECT hace que el scanner analice por segunda vez la misma cadena. En este segundo anlisis, la regla que contiene a REJECT no ser tenida en cuenta. a a

147

Manuales uex

{fprintf(yyout," %s",yytext);}

elena JuRaDO MlaGa


APENDICE A. GENERACION AUTOMATICA DE ANALIZADORES

148

A.1.5.

Condiciones de comienzo

Las condiciones de comienzo se pueden activar o desactivar dependiendo de la llegada de alg n s u mbolo o cadena de s mbolos. Existen dos tipos, las exclusivas y las no exclusivas. Se denen en la primera zona del programa utilizando las palabras reservadas %s, %S o %Star para las no exclusivas, y %x para las exclusivas. Despus debern escribirse e a los nombres de las condiciones que se vayan a utilizar. Por ejemplo: %s nombre1 nombre2 . . . Para activarlas se utilizar la accin BEGIN(nombre) y para desactivarlas BEGIN(0). a o Se utilizan colocando su nombre, encerrado entre los s mbolos <>, delante de una regla. Por ejemplo: <nombre>ab* ECHO; Esta regla slo se tendr en cuenta si la condicin nombre est activa. o a o a Las condiciones de comienzo exclusivas se caracterizan porque las reglas que no llevan su nombre delante slo se tienen en cuenta si la condicin est desactivada. En o o a el caso de las condiciones no exclusivas, estas reglas se tienen en cuenta en cualquier caso. El siguiente ejemplo permite eliminar los comentarios del chero de entrada. Suponemos que existen dos tipos diferentes de comentarios, unos encerrados entre llaves y otros entre (* y *). %x coment1 coment2 %% "{" BEGIN(coment1) <coment1>"}" BEGIN(0) "(*" BEGIN(coment2) <coment2>"*)" BEGIN(0) <coment1,coment2>. ;

A.1.6.

Acciones

Manuales uex

Cuando el analizador lxico encuentra una cadena de caracteres que encaja con e alguna de las expresiones regulares denidas, ejecuta las acciones asociadas a esta expresin. Ests acciones pueden ser las predenidas ECHO o REJECT, o cualquier o a instruccin escrita en C. A continuacin se describen algunas situaciones especiales: o o Si los caracteres de la entrada pueden encajar con diferentes expresiones regulares, se elegir aquella que valide la cadena ms larga. a a

148

TeORa De auTMaTas Y lenGuaJes FORMales


A.2. GENERADOR DE ANALIZADORES SINTACTICOS ab ab+ accin1 o accin2 o

149

Teniendo en cuenta el ejemplo anterior, si en el chero de entrada est incluida a la cadena abb se ejecutar la accin2, ya que la primera regla solo validar 2 a o a caracteres y la segunda validar 3. a En el caso de que dos reglas diferentes validen cadenas de la misma longitud, se elegir la que aparezca en primer lugar. Por ejemplo, si la cadena hola aparece a en el chero de entrada y se han denido las dos reglas siguientes: hola [a-z]+ accin1 o accin2 o

Se ejecutar la accin1 simplemente porque est escrita en primer lugar. a o a La accin que se ejecuta por defecto cuando un carcter (o cadena de caracteres) o a no encaja con ninguna de las expresiones denidas, consiste en escribir dicho carcter en el chero de salida (yyout); salvo que se haya utilizado la opcin -s a o al ejecutar PCLEX. Si detrs de una expresin regular slo escribimos el s a o o mbolo |, la accin asoo ciada a esta expresin es la misma que la asociada a la siguiente. Los siguiente o ejemplos son, por tanto, equivalentes: hola [a-z]+ | accin o hola [a-z]+ accin o accin o

Si detrs de una expresin regular slo escribimos el s a o o mbolo ; no hay ninguna accin asociada a esta expresin, ni siquiera escribir la cadena validada en el o o chero de salida, podr entenderse como no hacer nada. a

A.2.

Generador de analizadores sintcticos a

149

Manuales uex

Existen programas como YACC (Yet Another Compiler-Compiler), PCYACC o BISON, este ultimo para entornos LINUX, que permiten generar automticamente a analizadores sintcticos de tipo LR(1), a partir de la denicin de una gramtica ina o a dependiente del contexto descrita con una notacin similar a la BNF(Backus Normal o Form). Concretamente, se genera una funcin, llamada yyparse, que reconocer prograo a mas escritos en el lenguaje denido por la gramtica y detectar los errores si los a a hubiera. La funcin yyparse(), llama repetidamente al analizador lxico yylex() que o e convierte cadenas de caracteres del chero de entrada en s mbolos terminales de la gramtica (llamados tokens). Utilizando una terminolog anglosajona, al analizador a a

elena JuRaDO MlaGa


APENDICE A. GENERACION AUTOMATICA DE ANALIZADORES

150

lxico se le denomina scanner y al sintctico se le denomina parser. La forma e a convencional por la que el scanner env al parser informacin adicional sobre los a o tokens es a travs de la variable yylval. Por defecto esta variable es de tipo int pero, e como veremos, esto se puede cambiar.

A.2.1.

Cmo utilizar PCYACC o

PCYACC se ejecuta en l nea de comandos, de la siguiente forma: PCYACC [opciones] nombre chero nombre chero es el nombre del chero que contiene la especicacin de la gramtica, o a por claridad se recomienda que el nombre de estos cheros tenga extensin .y. Por o defecto se generar un chero con el mismo nombre y con extensin .c. Por ejemplo, a o si el chero de entrada se llama ejemplo.y, el de salida se llamar ejemplo.c. a Se pueden utilizar las siguientes opciones a la hora de ejecutar PCYACC: el chero de salida tiene el nombre yytab.c el chero de salida tiene el nombre que indica <nom chero> -d se genera un chero cabecera llamado yytab.h -D<nom chero> se genera un chero cabecera con el nombre que indica <nom chero> -h muestra una pantalla de ayuda -n suprime las directivas #line en el chero de salida -p<nom chero> utiliza <nom chero> como chero esqueleto para construir el chero de salida, en lugar de utilizar el chero por defecto (yaccpar.c) -r informa durante la ejecucin o -s genera vectores internos cuyos elementos son de tipo short int -S el programa se para despus de realizar la fase de anlisis e a sintctico a -t construye un arbol parser y lo almacena en el chero yy.ast -T<nom chero> construye un arbol parser y lo almacena en el chero <nom chero> -v genera un chero llamado yy.lrt con informacin sobre el o proceso y la tabla parser -V<nom chero> genera el chero de la opcin anterior pero con el nombre o <nom chero> Otros programas como YACC o BISON se utilizan de forma similar aunque el signicado de las opciones pueda variar. -c -C<nom chero>

150

Manuales uex

TeORa De auTMaTas Y lenGuaJes FORMales


A.2. GENERADOR DE ANALIZADORES SINTACTICOS

151

A.2.2.

Estructura de un programa para YACC

Un programa para YACC tiene la misma estructura que un programa para LEX. Es decir, tiene tres partes, con el mismo signicado que en el caso anterior. 1. En la primera parte, la zona de deniciones, se pueden incluir declaraciones en C, de la misma forma que se hac con LEX. a Adems, es necesario realizar algunas deniciones que necesita conocer el para ser, para ello se utilizan palabras reservadas (todas comienzan por %). La denicin del s o mbolo inicial de la gramtica se realiza utilizando la a palabra reservada %start. Por ejemplo: %start programa La denicin de los s o mbolos terminales de la gramtica se realiza utilizana do la palabra reservada %token. Por ejemplo: %token NUMERO IDENTIFICADOR 2. En la segunda parte, la zona de las reglas, se describe la G.I.C. siguiendo la siguiente notacin: o El s mbolo : se utiliza para separar la parte izquierda de una produccin o de la parte derecha. Todas las reglas que tienen la misma parte izquierda se pueden separar con el s mbolo |, sin necesidad de repetir la parte izquierda. Una coleccin de o producciones con la misma parte izquierda debe acabar con ;. Por ejemplo, las siguientes deniciones son equivalentes: lista var: lista var var lista var: lista var var lista var: var |var ; ; Los s mbolos de la gramtica que no hayan sido declarados como tokens, a se considerarn s a mbolos no terminales, excepto los caracteres simples, encerrados entre comillas que tambin se consideran s e mbolos terminales. Por ejemplo: +,*. 3. En la tercera parte del programa, procedimientos del programador es necesario, como m nimo llamar al procedimiento yyparse(). Tambin es necesario e que el programador dena la rutina yyerror. Esta rutina ser llamada por el a analizador cada vez que encuentre un error sintctico. Un ejemplo de denicin a o de yyerror puede ser: void yyerror(char *s) { } printf(" %s"\n,s);

151

Manuales uex

elena JuRaDO MlaGa


APENDICE A. GENERACION AUTOMATICA DE ANALIZADORES

152

A.2.3.

Gramticas atribuidas a

En ocasiones es necesario trabajar con informacin adicional sobre determinados o s mbolos de la gramtica. Diremos que estos s a mbolos tienen atributos. Esta informacin se almacena en una variable predenida llamada yylval que es de tipo YYSTYPE. o Como hemos comentado anteriormente, por defecto, ese tipo es int, pero en ocasiones puede resultar util cambiar su denicin. o Este cambio en la denicin de YYSTYPE se realiza en la zona de deniciones o y se puede llevar a cabo de diferentes formas. La ms sencilla consiste en utilizar la a palabra reservada %union, de la siguiente forma: %union { int num; char cadena[10]; } Suponiendo que YYSTYPE ha sido denido segn el ejemplo anterior, es neceu sario especicar que s mbolos de la gramtica van a tener atributos y de que a tipo van a ser. Esto se realiza con la palabra reservada %type. Por ejemplo: %type <num> NUMERO expresion %type <cadena> IDENTIFICADOR En el caso de los s mbolos terminales, esto mismo se puede denir con %token. Por ejemplo: %token <num> NUMERO %token <cadena> IDENTIFICADOR En la parte derecha de una produccin es posible insertar acciones escritas en o C que sern ejecutadas cuando el analizador sintctico llegue a ese punto del a a anlisis. Estas acciones debern ir encerradas entre llaves. a a Cuando queramos utilizar los atributos asociados a algunos smbolos de una produccin, utilizaremos $$, $1, $2, . . . o $$ es el atributo del s mbolo que aparece en la parte izquierda de la produccin. o $1 es el atributo del primer s mbolo de la parte derecha, $2 el del segundo s mbolo, etc. Por ejemplo: expr:expr+expr {$$=$1+$2;}

Manuales uex

A.2.4.

Prioridad y asociatividad de operadores

YACC permite especicar la prioridad y la asociatividad de determinados s mbolos de la gramtica (utilizados normalmente como operadores). a

152

TeORa De auTMaTas Y lenGuaJes FORMales


A.2. GENERADOR DE ANALIZADORES SINTACTICOS

153

Utilizando las palabras reservadas %left, %right, %nonassoc, podemos denir el tipo de asociatividad que tienen los s mbolos gramaticales. Adems, la prioridad de a los s mbolos queda impl cita al especicar su asociatividad. Los s mbolos que aparecen en la misma l nea tienen la misma prioridad entre si, y la prioridad ser ms alta a a cuanto ms tarde(en el texto) haya sido denida la asociatividad. Por ejemplo: a %left +, - %left , / Estas deniciones indican que la suma y la resta tienen la misma prioridad, ambas tienen asociatividad por la izquierda y, adems, tienen una prioridad menor que la a multiplicacin y la divisin. o o

153

Manuales uex

154

APENDICE A. GENERACION AUTOMATICA DE ANALIZADORES

Bibliograf a
[1] Hopcroft J. E. y Motwani R. y Ullman J. D. Teora de Autmatas, Lenguajes y o Computacin. Pearson-Addison Wesley, 2008. o [2] Alfonseca E. y Alfonseca M. y Moriyn R. Teor de Autmatas y Lenguajes o a o Formales. McGraw-Hill, 2007. [3] Isasi P. y Mart nez P. y Borrajo D. Lenguajes, Gramticas y Autmatas. Un a o enfoque prctico. Addison Wesley, 2001. a [4] Alfonseca M. y Sancho y Orga. Teora de Lenguajes, Gramticas y Autmatas. a o Ed. Universidad, 1993. [5] Martin J. Lenguajes Formales y Teora de la Computacin. McGraw-Hill, 2003. o [6] Brookshear. Teora de la Computacin. Lenguajes Formales, Autmatas y Com o o plejidad. Addison Wesley, 1993. [7] Kelley D. Teora Autmatas y Lenguajes Formales. Prentice Hall, 1995. o [8] Apple A. Modern Compiler Implementation in Java/C. Cambridge University Press, 1998. [9] Aho A.V. y Sethi R. y Ullman J.D. Compilers: Principles, Techniques and Tools. Addison Wesley, 1986. [10] Alfonseca y de la Cruz y Ortega y Pulido. Compiladores e Intrpretes: Teor y e a Prctica. Prentice-Hall, 2006. a

155

155

Manuales uex

TeORa De auTMaTas Y lenGuaJes FORMales

Indice alfabtico e
Arbol de derivacin, 21, 77 o Alfabeto, 15 de entrada, 40 de s mbolos no terminales, 22 de s mbolos terminales, 22 Analizador lxico, 11, 143 e semntico, 12 a sintctico, 12, 149 a Atributos semnticos, 98 a heredados, 99 sintetizados, 99 Autmata, 6 o conexo, 42 equivalente, 45 incompleto, 41 minimizacin, 43 o de pila, 74 nito determinista, 40 nito no determinista, 47 linealmente acotado, 127 Bombeo lema para gr. de tipo 2, 94 lema para gr. de tipo 3, 65 Chomsky, 7 jerarqu de, 8, 24 a Church-Turing, tesis, 120 Cierre de Kleene, 18 positivo, 19 Compilador, 10 Complejidad espacial, 138 temporal, 139 Concatenacin o de un lenguaje, 18 de una palabra, 16 Derivacin, 20 o directa, 20 Descripcin instantnea o a de un autmata de pila, 75 o de un reconocedor LR(1), 90 de una mquina de Turing, 108 a Desplazamiento, 88 Ensamblador, 10 Estado muerto, 41 nal, 40 inicial, 40 Expresin regular, 33 o Forma sentencial, 84 Funcin o -recursiva, 134 calculable, 130 caracter stica de un lenguaje, 130 de transicin, 40 o parcialmente calculable, 130 recursiva, 134 recursiva primitiva, 133 Gdel, 6, 106 o Gramtica, 6, 22 a bien formada, 29 156

157

Manuales uex

elena JuRaDO MlaGa


INDICE ALFABETICO equivalente, 26 limpia, 28 ambigua, 78 atribuida, 98 L-atribuida, 101 S-atribuida, 100 compresora, 124 con estructura de frase, 25, 123 dependiente del contexto, 25, 126 independiente del contexto, 25, 74 lineal, 35 LL(1), 85 LR(1), 92 recursiva, 24 recursivamente enumerable, 24, 123 regular, 26, 35 Hilbert, 6 Homomorsmo, 94 Intrprete, 10 e Inversa de una palabra, 17 Lenguaje, 6, 16 universal, 16 recursivamente enumerable, 124 recursivo, 125 Lex, 143 LR-item, 89 Mquina de Turing, 107 a universal, 118 Myhill-Nerode, teorema, 66 Palabra, 16 vac 16 a, anulable, 83 Potencia de un lenguaje, 18 de una palabra, 17 Problema de clase NP, 141 de clase P, 141

157 NP-completo, 142 Produccin, 19 o compresora, 20 de redenominacin, 28 o innecesaria, 27 no generativa, 28 anulable, 83 con prejos comunes, 81 con recursividad por la izquierda, 81 Reconocedor ascendente, 87 descendente, 80 LL(1), 81 LR(1 ), 87 Reduccin, 88 o Reexin o de un lenguaje, 19 de una palabra, 17 S mbolo inaccesible, 27 no generativo, 27 director de una produccin, 85 o del LR-item, 89 inicial de una cadena, 83 de una gramtica, 22 a seguidor, 84 Semntica, 97 a Shannon, 7 Sustitucin, 94 o Tabla de acciones, 88, 89 de s mbolos, 13 Turing, 6, 105 Unin de lenguajes, 17 o Yacc, 149

158

Manuales uex

You might also like