Teoriaautomatas

  • Uploaded by: Javier Antonio Dominguez Martinez
  • 0
  • 0
  • January 2021
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Teoriaautomatas as PDF for free.

More details

  • Words: 54,444
  • Pages: 176
Loading documents preview...
50 Teorías de Autómatas

ISBN 84-7723-747-6 ISBN 978-84-7723-747-1

y Lenguajes Formales

• Álgebra lineal y Geometría

9 788477 237471

50

Colección manuales uex - 55 (E.E.E.S.)

Elena Jurado Málaga

55

Teoría de autómatas y lenguajes formales

manuales uex

55 (E.E.E.S.) Espacio Europeo Educación Superior

Elena jurado málaga

teoría de autómatas y lenguajes formales

2008

La publicación del presente manual fue subvencionada por el Vicerrectorado de Calidad y Formación 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: “Diseño y desarrollo de materiales docentes adaptados a la metodología derivada del E.E.E.S.” Esta convocatoria de acciones forma parte del Plan de Adaptación de la UEX al Espacio Europeo de Educación 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 Cáceres (España) Telf. 927 257 041 - Fax 927 257 046 [email protected] www.unex.es/publicaciones

ISSN 1135-870-X ISBN 978-84-691-6345-0 Depósito Legal M-45.211-2008 Edición electrónica: Pedro Cid, S.A. Teléf.: 914 786 125

A Juan

El estudio de la teor´ıa de aut´omatas y de los lenguajes formales se puede ubicar en el campo cient´ıfico de la Inform´atica Te´orica, un campo cl´asico y multidisciplinar dentro de los estudios universitarios de Inform´atica. Es un campo cl´asico debido no s´olo a su antig¨ uedad (anterior a la construcci´on de los primeros ordenadores) sino, sobre todo, a que sus contenidos principales no dependen de los r´apidos avances tecnol´ogicos que han hecho que otras ramas de la Inform´atica deban adaptarse a los nuevos tiempos a un ritmo vertiginoso. Es multidisciplinar porque en sus cimientos encontramos campos tan aparentemente dispares como la ling¨ u´ıstica, las matem´aticas o la electr´onica. El hecho de que esta materia no haya sufrido grandes cambios en las u ´ltimas d´ecadas no le resta un ´apice de inter´es. El estudio de las m´aquinas secuenciales que abarca la teor´ıa de aut´omatas, por una parte, sienta las bases de la algoritmia y permite modelar y dise˜ nar soluciones para un gran n´ umero de problemas. Por otra parte, permite abordar cuestiones de gran inter´es para un inform´atico como qu´e tipo de problemas pueden ser resueltos por un computador o, caso de existir una soluci´on computable para un problema, c´omo podemos medir la calidad (en t´erminos de eficacia) de dicha soluci´on. Es decir, la teor´ıa de aut´omatas es la puerta que nos permite la entrada hacia campos tan interesantes como la computabilidad y la complejidad algor´ıtmica. Adem´as, una de las principales aportaciones del estudio de los lenguajes formales, sobre todo desde un punto de vista pr´actico, es su contribuci´on al dise˜ no de lenguajes de programaci´on y a la construcci´on de sus correspondientes traductores. En este sentido la asignatura ayudar´a a conocer con mayor profundidad la estructura de los lenguajes de programaci´on y el funcionamiento de los compiladores. Este manual es el resultado del trabajo que durante varios a˜ nos he realizado impartiendo la asignatura de Teor´ıa de Aut´omatas y Lenguajes Formales en las titulaciones de Inform´atica de la Universidad de Extremadura. Dicha asignatura es troncal para los alumnos de Ingenier´ıa Inform´atica y de Ingenier´ıa T´ecnica en Inform´atica de Sistemas pero tambi´en puede ser cursada como materia optativa por los alumnos de Ingenier´ıa T´ecnica en Inform´atica de Gesti´on. Se imparte en el tercer curso de estas titulaciones. La asignatura se ha dise˜ nado teniendo en cuenta las diferentes circunstancias de los alumnos de las tres titulaciones, as´ı como el tiempo disponible a lo largo del

manuales uex

Pr´ ologo

IX

Elena Jurado Málaga

curso para impartirla. Por tanto, y teniendo en cuenta sobre todo esto u ´ltimo, los contenidos han sido seleccionados de forma realista con la intenci´on de que puedan ser abarcados por completo a lo largo del curso acad´emico. Por este motivo, la alta carga formal que suele acompa˜ nar a los libros de esta materia ha sido aligerada, procurando no incluir, siempre que ha sido posible, demostraciones complejas y otras cuestiones formales que har´ıan el texto inabordable en una u ´nica asignatura. Como contrapartida se han intentado presentar los conceptos e ideas b´asicos de una manera intuitiva y clara. Otro de los aspectos que se ha tenido en cuenta al dise˜ nar los contenidos del manual ha sido destacar una de las aplicaciones pr´acticas m´as interesantes de esta materia: el dise˜ no de lenguajes de programaci´on y de compiladores. Esto ha motivado que, al cl´asico estudio de la jerarqu´ıa para las gram´aticas formales de Chomsky, de los Aut´omatas Finitos, de los Aut´omatas de Pila y de las M´aquinas de Turing, se hayan a˜ nadido temas como el de las gram´aticas atribuidas, los reconocedores LR o un anexo sobre la generaci´on autom´atica de analizadores l´exicos y sint´acticos. Si bien est´as u ´ltimas cuestiones pueden considerarse al margen de la asignatura, tienen un claro inter´es desde el punto de vista pr´actico. Considerando la pr´oxima implantaci´on de los nuevos planes de estudio dentro del espacio europeo de educaci´on superior, se ha incluido un apartado en el que se describe el plan docente de la asignatura, indicando la metodolog´ıa docente, el plan de trabajo del estudiante, as´ı como las competencias espec´ıficas de la materia y de la titulaci´on. En este sentido, y teniendo en cuenta que el trabajo no presencial del estudiante tiene cada vez m´as relevancia en el nuevo marco de las ense˜ nanzas universitarias, 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 preparaci´on previa de los temas. Quisiera terminar este pr´ologo agradeciendo la colaboraci´on de los estudiantes que han cursado esta asignatura durante los u ´ltimos a˜ nos. Sus comentarios y sugerencias han resultado imprescindibles para mejorar los contenidos y el dise˜ no de las primeras versiones de este manual.

manuales uex

Elena Jurado M´alaga

X

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES

Plan Docente I. Descripci´ on y contextualizaci´ on Identificaci´ on y caracter´ısticas de la materia

Perfiles (y subperfiles) profesionales de la titulaci´ on I. Perfil Profesional de Desarrollo Software II. Perfil Profesional de Sistemas III. Perfil Profesional de Gesti´on y Explotaci´on de Tecnolog´ıas de la Informaci´on

manuales uex

Denominaci´ on: Teor´ıa de Aut´omatas y Lenguajes Formales Curso y Titulaciones: 3o Ingenier´ıa Inform´atica, 3o Ingenier´ıa T´ecnica en Inform´atica de Sistemas, 3o Ingenier´ıa T´ecnica en Inform´atica de Gesti´on ´ Area: Lenguajes y Sistemas Inform´aticos Departamento: Ingenier´ıa de Sistemas Inform´aticos y Telem´aticos Tipo: Troncal en Ingenier´ıa Inform´atica, Troncal en Ingenier´ıa T´ecnica en Inform´atica de Sistemas, Optativa en Ingenier´ıa T´ecnica en Inform´atica de Gesti´on Coeficientes: Practicidad: 3 (Medio) Agrupamiento: 3 (Medio) Duraci´ on: Anual, 8.18 cr´editos ECTS (204.5 horas) Distribuci´ on ECTS: Grupo Grande: 62 horas (30.31 %) Seminario-Laboratorio: 20 horas (9.77 %) Tutor´ıa ECTS: 10 horas (4.88 %) No presencial: 112.5 horas (55.01 %) Descriptores (seg´ un BOE): Teor´ıa de Aut´omatas y Lenguajes Formales

XI

Elena Jurado Málaga

Competencias Espec´ıficas de la Titulaci´ on (y perfiles relacionados) 1. Aprender de manera aut´onoma nuevos conocimientos y t´ecnicas adecuados para la concepci´on, el desarrollo o la explotaci´on de sistemas inform´aticos.(Todos) 2. Comunicar de forma efectiva, tanto por escrito como oral, conocimientos, procedimientos, resultados e ideas relacionadas con las TIC y, concretamente de la Inform´atica, conociendo su impacto socioecon´omico.(Todos) 3. Comprender la responsabilidad social, ´etica y profesional, y civil en su caso, de la actividad del Ingeniero en Inform´atica y su papel en el ´ambito de las TIC y de la Sociedad de la Informaci´on y del Conocimiento.(Todos) 4. Concebir y llevar a cabo proyectos inform´aticos utilizando los principios y metodolog´ıas propios de la ingenier´ıa.(I,II) 5. Dise˜ nar, desarrollar, evaluar y asegurar la accesibilidad, ergonom´ıa, usabilidad y seguridad de los sistemas, aplicaciones y servicios inform´aticos, as´ı como de la informaci´on que proporcionan, conforme a la legislaci´on y normativa vigentes.(I) 6. Definir, evaluar y seleccionar plataformas hardware y software para el desarrollo y la ejecuci´on de aplicaciones y servicios inform´aticos de diversa complejidad.(I,II) 7. Disponer de los fundamentos matem´aticos, f´ısicos, econ´omicos y sociol´ogicos necesarios para interpretar, seleccionar, valorar, y crear nuevos conceptos, teor´ıas, usos y desarrollos tecnol´ogicos relacionados con la inform´atica, y su aplicaci´on.(Todos) 8. Concebir, desarrollar y mantener sistemas y aplicaciones software empleando diversos m´etodos de ingenier´ıa del software y lenguajes de programaci´on adecuados al tipo de aplicaci´on a desarrollar manteniendo los niveles de calidad exigidos.(I) 9. Concebir y desarrollar sistemas o arquitecturas inform´aticas centralizadas o distribuidas integrando hardware, software y redes.(II)

manuales uex

10. Proponer, analizar, validar, interpretar, instalar y mantener soluciones inform´aticas en situaciones reales en diversas ´areas de aplicaci´on dentro de una organizaci´on.(Todos)

XII

11. Concebir, desplegar, organizar y gestionar sistemas y servicios inform´aticos en contextos empresariales o institucionales para mejorar sus procesos de negocio, responsabiliz´andose y liderando su puesta en marcha y mejora continua, as´ı como valorar su impacto econ´omico y social.(III)

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES

II. Objetivos. Competencias Espec´ıficas de la Materia (y relaci´ on con CET) 1. Ser capaz de realizar operaciones b´asicas con cadenas y con lenguajes.(7) 2. Conocer los diferentes tipos de gram´aticas y de lenguajes que forman la jerarqu´ıa de Chomsky y su utilidad en el dise˜ no de los lenguajes de programaci´on y sus traductores.(7) 3. Saber c´omo reconocer de que tipo es una determinada gram´atica o lenguaje.(7) 4. Ser capaz de construir aut´omatas para resolver diferentes tipos de problemas y para reconocer diferentes lenguajes.(7,11) 5. Conocer el funcionamiento de diferentes tipos de aut´omatas y entender el tipo de problemas que cada uno puede resolver.(7,11) 6. Conocer y ser capaz de utilizar m´etodos que permitan construir, dado un lenguaje regular: gram´aticas que los generan, expresiones regulares que los representan y aut´omatas finitos que los reconocen.(7) 7. Conocer el esquema funcional de un traductor.(4) 8. Conocer los diferentes aspectos l´exicos, sint´acticos y sem´anticos que hay que tener en cuenta a la hora de dise˜ nar lenguajes formales y traductores para esos lenguajes.(4,8) 9. Ser capaz de construir un traductor.(1,2,4,8,10) 10. Ser capaz de dise˜ nar una gram´atica para un lenguaje de programaci´on sencillo.(4,7) 11. Conocer metalenguajes que permitan describir lenguajes regulares y lenguajes independientes del contexto.(1,8) 12. Saber utilizar herramientas que permitan generar autom´aticamente analizadores l´exicos y sint´acticos.(1,8) 13. Ser capaz de calcular la complejidad espacial y temporal de m´aquinas de Turing sencillas.(5,6,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)

manuales uex

14. Entender el concepto de recursividad y de calculabilidad.(5,6,7,10,11)

XIII

Elena Jurado Málaga

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 Programaci´ on y Laboratorio de Programaci´ on I, y de 2o curso, Estructuras de Datos y Algoritmos y Laboratorio de Programaci´ on II, son requisitos para esta asignatura ya que proporcionan los conocimientos sobre programaci´on necesarios para abordar la tarea de la construcci´on de un compilador. Tambi´en permiten que el alumno conozca con antelaci´on conceptos b´asicos para la asignatura como el de lenguaje de programaci´on y el de compilador. 2. El concepto de complejidad algor´ıtmica se ha tratado en asignaturas como Elementos de Programaci´ on y Estructuras de Datos y Algoritmos. En nuestra asignatura ´este se relaciona con el concepto de Maquina de Turing. 3. La asignatura de Teor´ıa de Aut´omatas y Lenguajes Formales debe sentar las bases para que los alumnos de Ingenier´ıa Inform´atica puedan abordar con garant´ıas la asignatura de 5o curso Procesadores de Lenguajes

IV. Metodolog´ıa docente y plan de trabajo del estudiante En esta secci´on se describe la metodolog´ıa utilizada para cada uno de los temas que aparecen en este manual. A cada una de las actividades programadas se le asigna un determinado tipo y el n´ umero de horas estimadas de dedicaci´on del estudiante. A continuaci´on se indican las siglas utilizadas para representar los diferentes tipos de actividades: GG Grupo grande S Seminario-Laboratorio Tut Tutor´ıa ECTS NO No Presencial.

manuales uex

Tema 1. Preliminares (Objetivos: 1,7)

XIV

Lectura y estudio (previo y/o posterior)(NP): 1h. Explicaci´on, discusi´on y ejemplificaci´on en clase(GG): 3h. Realizaci´on de ejercicios propuestos (NP): 3h. Tema 2. Lenguajes y Gram´ aticas Formales (Objetivos: 1,2)

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES

Lectura y estudio (previo y/o posterior)(NP): 2h. Explicaci´on, discusi´on y ejemplificaci´on en clase(GG): 6h. Explicaci´on de cuestiones y ejercicios relacionados con la teor´ıa(GG): 2h. Realizaci´on de ejercicios propuestos (NP): 10h. Tema 3. Expresiones y gram´ aticas regulares (Objetivos: 1,3,8,10,12,11) Lectura y estudio (previo y/o posterior)(NP): 2h. Explicaci´on, discusi´on y ejemplificaci´on en clase(GG): 1h. Explicaci´on de cuestiones y ejercicios relacionados con la teor´ıa(GG): 2h. Pr´acticas (S): 2h. Revisi´on de las actividades pr´acticas (Tut): 2h. Realizaci´on de ejercicios propuestos (NP): 4h. Tema 4. Aut´ omatas Finitos (Objetivos: 3,4,5,8,6,12,11) Lectura y estudio (previo y/o posterior)(NP): 10h. Explicaci´on, discusi´on y ejemplificaci´on en clase(GG): 10h. Explicaci´on de cuestiones y ejercicios relacionados con la teor´ıa(GG): 7h. Pr´acticas (S): 6h. Revisi´on de las actividades pr´acticas (Tut): 2h. Realizaci´on de ejercicios propuestos (NP): 20h. Evaluaci´ on del primer bloque tem´ atico Tema 5. Gram´ aticas Independientes del Contexto (GIC) y Aut´ omatas de Pila (Objetivos: 3,4,5,8,9,10,12,11) Lectura y estudio (previo y/o posterior)(NP): 10h. Explicaci´on, discusi´on y ejemplificaci´on en clase(GG): 6h. Explicaci´on de cuestiones y ejercicios relacionados con la teor´ıa(GG): 5h. Pr´acticas (S): 10h. Realizaci´on de ejercicios propuestos (NP): 12h. Tema 6. Gram´ aticas Atribuidas (Objetivos: 7,8,10,12,11) Lectura y estudio (previo y/o posterior)(NP): 3h. Explicaci´on, discusi´on y ejemplificaci´on en clase(GG): 2h.

manuales uex

Revisi´on de las actividades pr´acticas (Tut): 3h.

XV

Elena Jurado Málaga

Explicaci´on de cuestiones y ejercicios relacionados con la teor´ıa(GG): 2h. Pr´acticas (S): 2h. Revisi´on de las actividades pr´acticas (Tut): 3h. Realizaci´on de ejercicios propuestos (NP): 5h. Tema 7. M´ aquinas de Turing(MT) (Objetivos: 4,5) Lectura y estudio (previo y/o posterior)(NP): 4h. Explicaci´on, discusi´on y ejemplificaci´on en clase(GG): 5h. Explicaci´on de cuestiones y ejercicios relacionados con la teor´ıa(GG): 4h. Realizaci´on de ejercicios propuestos (NP): 14h. Tema 8. Gram´ aticas de tipo 0 y 1 (Objetivos: 3) Lectura y estudio (previo y/o posterior)(NP): 2h. Explicaci´on, discusi´on y ejemplificaci´on en clase(GG): 2h. Realizaci´on de ejercicios propuestos (NP): 2h. Tema 9. Computabilidad y M´ aquinas de Turing (Objetivos: 13,14,15) Lectura y estudio (previo y/o posterior)(NP): 2h. Explicaci´on, discusi´on y ejemplificaci´on en clase(GG): 2h. Explicaci´on de cuestiones y ejercicios relacionados con la teor´ıa(GG): 1h. Realizaci´on de ejercicios propuestos (NP): 4h. Tema 10. Introducci´ on a la Complejidad Computacional (Objetivos: 16) Lectura y estudio (previo y/o posterior)(NP): 2h. Explicaci´on, discusi´on y ejemplificaci´on en clase(GG): 2h. Realizaci´on de ejercicios propuestos (NP): 2h.

V. Evaluaci´ on

manuales uex

Criterios de Evaluaci´ on

XVI

1. Aplicar los conceptos y m´etodos estudiados para la resoluci´on de problemas relacionados con el dise˜ no de aut´omatas y gram´aticas. En este aspecto, las principales habilidades a tener en cuenta son: a) Definir formalmente un lenguaje.

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES

b) Ser capaz de determinar el tipo al que pertenece un lenguaje. c) Ser capaz de convertir un Aut´omata Finito No Determinista en Aut´omata Finito Determinista. d ) Dise˜ nar una gram´atica a partir del aut´omata que reconoce al lenguaje que ´esta genera. e) Construir el aut´omata que reconoce a un determinado lenguaje. f ) Dise˜ nar una m´aquina de Turing que resuelva un problema dado o que reconozca o genere un lenguaje determinado. g) Ser capaz de probar que una funci´on es recursiva primitiva o µ-recursiva. 2. Dise˜ nar un lenguaje formal y construir, utilizando las herramientas adecuadas, un traductor para dicho lenguaje.

Actividades e instrumentos de evaluaci´ on Examen parcial Prueba de desarrollo escrito con 1 pregunta dirigida a la comprensi´on de conceptos y 4 o 5 a la aplicaci´on los m´etodos para resolver problemas relacionados con el dise˜ no de lenguajes y aut´omatas (Temas 1-4). (20 %) Examen final Prueba de desarrollo escrito con 1 pregunta dirigida a la comprensi´on de conceptos y 4 o 5 a la aplicaci´on los m´etodos para resolver problemas relacionados con el dise˜ no de lenguajes y aut´omatas. (55 %) Seminarios y Tutor´ıas ECTS Revisi´on y an´alisis del trabajo no presencial del alumno as´ı como del trabajo desarrollado en los Seminarios. 1. Revisi´on de ejercicios pr´acticos a realizar por el alumno durante los Seminarios. (5 %)

manuales uex

2. Revisi´on del lenguaje y del traductor construido por el alumno, haciendo especial hincapi´e en un correcto dise˜ no de ambos. Prueba en la que el alumno debe realizar una sencilla ampliaci´on de su trabajo pr´actico con el objetivo de valorar el control que tiene sobre su trabajo. (20 %)

XVII

1. Preliminares 1.1. Antecedentes hist´oricos y conceptos b´asicos . 1.2. Desarrollo de la asignatura . . . . . . . . . . 1.3. Conceptos b´asicos sobre compiladores . . . . 1.3.1. Componentes de un compilador . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

5 5 8 10 11

2. Lenguajes y Gram´ aticas Formales 2.1. Definiciones b´asicas . . . . . . . . . . . . . . . . . . 2.2. Operaciones con palabras . . . . . . . . . . . . . . . 2.3. Lenguajes y operaciones con lenguajes . . . . . . . 2.4. Concepto de gram´atica formal . . . . . . . . . . . . 2.4.1. Definiciones previas . . . . . . . . . . . . . . 2.4.2. Ejemplo con un lenguaje natural(castellano) 2.4.3. Ejemplo en un lenguaje artificial . . . . . . 2.4.4. Definici´on de gram´atica formal . . . . . . . 2.5. Clasificaci´on de las gr. formales . . . . . . . . . . . 2.5.1. Gram´aticas de tipo 0 . . . . . . . . . . . . . 2.5.2. Gram´aticas de tipo 1 . . . . . . . . . . . . . 2.5.3. Gram´aticas de tipo 2 . . . . . . . . . . . . . 2.5.4. Gram´aticas de tipo 3 . . . . . . . . . . . . . 2.6. Gram´aticas equivalentes . . . . . . . . . . . . . . . 2.6.1. Simplificaci´on de gram´aticas . . . . . . . . . 2.7. Problemas y cuestiones . . . . . . . . . . . . . . . .

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

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

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

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

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

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

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

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

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

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

15 15 16 17 19 19 20 21 22 24 24 25 25 26 26 26 29

3. Expresiones y gram´ aticas regulares 3.1. Definici´on de expresi´on regular . . . ´ 3.2. Algebra de las expresiones regulares 3.3. Definici´on de gram´atica regular . . 3.4. Ejemplos . . . . . . . . . . . . . . . 3.5. Problemas . . . . . . . . . . . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

33 33 34 35 36 38

1

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . .

. . . . .

. . . .

. . . . .

. . . .

. . . . .

. . . . .

Manuales Uex

´Indice General

1

ELENA JURADO MÁLAGA ´INDICE GENERAL

Manuales Uex

2

2

4. Aut´ omatas Finitos 4.1. Introducci´on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2. Definici´on de Aut´omata Finito Determinista . . . . . . . . . . . . 4.3. Representaci´on de Aut´omatas . . . . . . . . . . . . . . . . . . . . 4.4. Los AFD como reconocedores de lenguajes . . . . . . . . . . . . . 4.5. Minimizaci´on de un AFD . . . . . . . . . . . . . . . . . . . . . . . 4.6. Aut´omatas Finitos No Deterministas(AFND) . . . . . . . . . . . 4.7. Lenguaje aceptado por un AFND . . . . . . . . . . . . . . . . . . 4.8. Simulaci´on de un AFD y AFND . . . . . . . . . . . . . . . . . . . 4.9. Paso de un AFND a AFD . . . . . . . . . . . . . . . . . . . . . . 4.10. Relaci´on entre AF, gr. y exp. reg. . . . . . . . . . . . . . . . . . . 4.10.1. Construcci´on de la expresi´on regular reconocida por un AF 4.10.2. Construcci´on del AF que reconoce una expresi´on regular . 4.10.3. Relaci´on entre A.F. y gram´aticas regulares . . . . . . . . . 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

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

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

39 39 40 40 43 43 47 50 51 52 55 55 58 62 65 65 66 70

5. G.I.C y Aut´ omatas de Pila 5.1. Definici´on de G.I.C. . . . . . . . . . . . . . . . . . . . . 5.2. Aut´omatas de Pila . . . . . . . . . . . . . . . . . . . . ´ 5.3. Arboles de derivaci´on . . . . . . . . . . . . . . . . . . . 5.3.1. Ambig¨ uedad. . . . . . . . . . . . . . . . . . . . 5.4. Reconocimiento descendente . . . . . . . . . . . . . . . 5.4.1. Simplificaci´on de las GIC . . . . . . . . . . . . . 5.4.2. Reconocedores LL(1) . . . . . . . . . . . . . . . 5.5. Reconocimiento ascendente . . . . . . . . . . . . . . . . 5.5.1. Construcci´on de la Tabla de Acciones . . . . . . 5.6. Propiedades de los L.I.C. . . . . . . . . . . . . . . . . . 5.6.1. El lema del bombeo para LIC(pumping lemma) 5.7. Problemas . . . . . . . . . . . . . . . . . . . . . . . . .

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

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

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

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

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

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

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

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

73 74 74 77 78 80 81 83 87 89 93 94 95

6. Gram´ aticas Atribuidas 6.1. Concepto de Sem´antica y de Gram´atica 6.2. Atributos heredados y sintetizados . . 6.3. Gram´aticas S-atribuidas y L-Atribuidas 6.3.1. Gram´aticas S-atribuidas . . . . 6.3.2. Gram´aticas L-atribuidas . . . . 6.4. Problemas . . . . . . . . . . . . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

97 97 99 100 100 101 104

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

. . . . . .

. . . . . .

. . . . . .

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES ´INDICE GENERAL

3

7. M´ aquinas de Turing 7.1. Introducci´on. Antecedentes hist´oricos . . . . . . . . . . . . . . . . . . 7.2. Definici´on y ejemplos de M.T.’s . . . . . . . . . . . . . . . . . . . . . 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 simult´aneamente . . . . . . . . . . . . . . . . . . . . . . . . . 7.4. Modificaciones de la M.T. . . . . . . . . . . . . . . . . . . . . . . . . 7.4.1. Almacenamiento de informaci´on en el control finito . . . . . . 7.4.2. Pistas m´ ultiples . . . . . . . . . . . . . . . . . . . . . . . . . . 7.4.3. S´ımbolos de chequeo . . . . . . . . . . . . . . . . . . . . . . . 7.4.4. M´aquinas multicinta . . . . . . . . . . . . . . . . . . . . . . . 7.4.5. M.T. no determinista . . . . . . . . . . . . . . . . . . . . . . . 7.5. T´ecnicas para la construcci´on de M.T. . . . . . . . . . . . . . . . . . 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

105 105 107 110 111 112

8. Gram´ aticas de tipo 0 y 1 8.1. Gram´aticas de tipo 0 . . . . . . . 8.2. Lenguajes de tipo 0 . . . . . . . . 8.3. El problema de la parada . . . . . 8.4. Lenguajes y gram´aticas de tipo 1

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

123 123 124 126 126

9. Computabilidad y M´ aquinas de Turing 9.1. Funciones calculables . . . . . . . . . . 9.2. Funciones recursivas . . . . . . . . . . 9.2.1. Funciones recursivas primitivas 9.2.2. Funciones µ-recursivas . . . . . 9.3. Problemas . . . . . . . . . . . . . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

129 129 131 132 134 134

10.Introducci´ on a la Complejidad Computacional 10.1. Complejidad y M´aquinas de Turing . . . . . . . . . . . . . . . . . . . 10.2. Medidas de complejidad algor´ıtmica . . . . . . . . . . . . . . . . . . . 10.3. Problemas P, NP y NP-completos . . . . . . . . . . . . . . . . . . . .

137 137 138 141

. . . .

. . . .

A. Generaci´ on autom´ atica de analizadores 143 A.1. Generador de analizadores l´exicos . . . . . . . . . . . . . . . . . . . . 143 A.1.1. C´omo utilizar PCLEX . . . . . . . . . . . . . . . . . . . . . . 144 A.1.2. Estructura de un programa Lex . . . . . . . . . . . . . . . . . 144

Manuales Uex

112 113 113 114 114 115 116 116 118 119 120 120

3

ELENA JURADO MÁLAGA ´INDICE GENERAL

4

Manuales Uex

A.1.3. C´omo representar una expresi´on regular A.1.4. Variables y procedimientos predefinidos . A.1.5. Condiciones de comienzo . . . . . . . . . A.1.6. Acciones . . . . . . . . . . . . . . . . . . A.2. Generador de analizadores sint´acticos . . . . . . A.2.1. C´omo utilizar PCYACC . . . . . . . . . A.2.2. Estructura de un programa para YACC . A.2.3. Gram´aticas atribuidas . . . . . . . . . . A.2.4. Prioridad y asociatividad de operadores .

4

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

146 147 148 148 149 150 151 152 152

Tema 1 Preliminares Contenido 1.1. Antecedentes hist´ oricos y conceptos b´ asicos . . . . . . .

5

1.2. Desarrollo de la asignatura . . . . . . . . . . . . . . . . . .

8

1.3. Conceptos b´ asicos sobre compiladores . . . . . . . . . . .

10

En este primer tema de la asignatura pretendemos sentar las bases de la misma y explicar cu´al va a ser su estructura. En la secci´on 1.1 explicaremos cuales son los temas centrales sobre los que va a girar la asignatura, as´ı como los antecedentes hist´oricos sobre los que se han desarrollado estos temas, mencionando los personajes que m´as han influido en su nacimiento. La estructura de la asignatura es el contenido fundamental de la secci´on 1.2 en la que tambi´en se detallan algunas de las aplicaciones m´as interesantes de los conceptos te´oricos que estudiaremos. Teniendo en cuenta que probablemente la aplicaci´on pr´actica m´as interesante de esta asignatura es el dise˜ no de lenguajes de computaci´on y la construcci´on de sus correspondientes traductores, en la secci´on 1.3 se sentar´an las bases que permitir´an entender la estructura de un compilador y las tareas que debe llevar a cabo.

Antecedentes hist´ oricos y conceptos b´ asicos

La mayor parte del conocimiento cient´ıfico es el resultado de muchos a˜ nos de investigaci´on, con frecuencia sobre temas que aparentemente no tienen una relaci´on directa. Como veremos, esto sucede tambi´en con un campo como la Inform´atica Te´orica (´ambito en el que se enmarca la asignatura de Teor´ıa de Aut´omatas y Lenguajes Formales). Esta materia se ha desarrollado gracias a la confluencia de campos muy diferentes, como son: las matem´aticas, la teor´ıa de m´aquinas, la ling¨ u´ıstica, etc. Podemos considerarla, por tanto, como una materia multidisciplinar. En este apartado pretendemos explicar de manera intuitiva los conceptos b´ asicos que constituyen las 5

Manuales Uex

1.1.

5

ELENA JURADO MÁLAGA

Manuales Uex

6

6

TEMA 1. PRELIMINARES

bases de la asignatura as´ı como los campos cient´ıficos que han influido fundamentalmente en el desarrollo de esta materia y que nos ayudar´an a entender sus aplicaciones m´as importantes. Veamos, en primer lugar, la relaci´on entre conceptos que trataremos a lo largo de todo el temario: lenguaje, gram´ atica y aut´ omata. Toda comunicaci´on conlleva la utilizaci´on de un lenguaje, que podemos definir como un conjunto de palabras (tambi´en llamadas cadenas) formadas por s´ımbolos de un alfabeto. Las gram´aticas permitir´an definir la estructura de los lenguajes, es decir, proporcionar´an las formas v´alidas en las que se pueden combinar los s´ımbolos del alfabeto para construir cadenas correctas. Una m´aquina abstracta o aut´omata es un dispositivo te´orico que recibe como entrada una cadena de s´ımbolos y los procesa, cambiando de estado, de manera que genera una determinada salida. Los aut´omatas pueden servir, entre otras cosas, para determinar si una palabra pertenece o no a un determinado lenguaje. Por lo tanto, las gram´aticas nos permitir´an definir lenguajes y los aut´omatas podr´an reconocer las palabras de dichos lenguajes. A pesar de la conexi´on que existe entre estos conceptos, los trabajos iniciales sobre aut´omatas y lenguajes tienen, como veremos a continuaci´on, un origen diferente. Para encontrar los principios de la Inform´ atica Te´orica debemos remontarnos a los a˜ nos 30, d´ecada en la que el mundo de las matem´aticas se hallaba ocupado, sobre todo, en temas como la l´ogica y la definici´on de sistemas axiom´aticos. El m´etodo axiom´atico requiere una colecci´on de enunciados b´asicos, llamados axiomas, que describen las propiedades fundamentales del sistema que se estudia. A partir de estos axiomas, se derivan enunciados adicionales, llamados teoremas, aplicando secuencias finitas de reglas de inferencia. Una ventaja del m´etodo axiom´atico es que ofrece un modelo de razonamiento deductivo en el cual todas las suposiciones est´an aisladas en los axiomas iniciales y las reglas de inferencia. Cualquier enunciado que se derive posteriormente ser´a una consecuencia de estas suposiciones. A principios del siglo XX, muchos matem´aticos cre´ıan que era posible encontrar un u ´ nico sistema axiom´atico en el que podr´ıan basarse todas las matem´aticas. Su meta era encontrar un conjunto de axiomas y reglas de inferencia correctos de manera que las matem´aticas pudieran reducirse a un sistema computacional con el cual pudiera deducirse la veracidad o falsedad de cualquier enunciado matem´atico. Uno de los principales defensores de esta idea era el conocido matem´atico alem´an Hilbert. Sin embargo, en 1931, el austriaco Kurt G¨ odel public´o el “Teorema de la incompletitud”, en el que demostraba que era imposible la completa axiomatizaci´on de las matem´aticas. Este teorema increment´o el debate por el poder de los m´etodos axiom´aticos y los procesos computacionales. En 1937, el matem´atico ingl´es Alan Turing, en su art´ıculo “Sobre los n´ umeros computables”, present´o la conocida M´ aquina de Turing(M.T.), una entidad matem´atica

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES ´ ´ 1.1. ANTECEDENTES HISTORICOS Y CONCEPTOS BASICOS

7

abstracta con la que se formaliz´o el concepto de algoritmo1 , adem´as demostr´o que muchos problemas perfectamente definidos no pueden ser resueltos mediante una M.T., es decir, no son computables y de esta manera ratific´ o la teor´ıa de G¨odel. Esta m´aquina ser´ıa la precursora, desde un punto de vista te´orico, de los computadores que se construyeron durante la siguiente d´ecada. La M´aquina de Turing tiene el poder computacional m´as alto conocido hasta el momento, es decir, es capaz de resolver cualquier problema que tenga una soluci´on computacional. Podemos considerar todo esto como el primer eslab´on dentro del campo de la Inform´atica Te´orica. El segundo eslab´on se ubicar´ıa en un campo muy cercano a la Electr´onica en el que el matem´atico Shannon estableci´o las bases para la aplicaci´on de la l´ogica matem´atica al dise˜ no de los circuitos combinatorios y secuenciales. Las ideas de Shannon derivar´ıan en la formalizaci´on de una teor´ıa de m´aquinas secuenciales y aut´omatas, cuyo principal objetivo era representar de manera formal el comportamiento de un determinado dispositivo electr´onico o mec´anico. Los aut´omatas son, en un sentido amplio, sistemas que aceptan se˜nales del medio que les rodea, cambian de estado como consecuencia de estas se˜ nales y trasmiten otras se˜ nales al medio. En este sentido, un electrodom´estico com´ un, una central telef´onica, un ordenador, e incluso ciertas facetas del comportamiento de los seres vivos pueden modelarse mediante aut´omatas. A finales de los a˜ nos 50 se comenz´o a estudiar la utilidad de los aut´omatas en relaci´on con los lenguajes de programaci´on y su proceso de traducci´on. La Teor´ıa de Aut´omatas estudia diferentes niveles de aut´omatas entre los que podemos destacar, de una parte, los Aut´omatas Finitos por constituir el grupo m´as sencillo de aut´omatas y, de otra, las M´aquinas de Turing que, por el contrario, son los aut´omatas m´as complejos y con mayor poder computacional. Estos dos tipos de aut´omatas representan los dos extremos de la jerarqu´ıa, otros niveles intermedios los encontramos en los Aut´omatas de Pila y en los Aut´omatas Linealmente Acotados. B´asicamente, la diferencia principal entre estos aut´omatas estriba en la utilizaci´on o no de memoria auxiliar y en la forma de acceso a dicha memoria.

1 Un algoritmo puede considerarse como un m´etodo gen´erico que, en un n´ umero finito de pasos o computaciones, permite resolver un determinado problema. Recordemos que la palabra algoritmo debe su nombre a un matem´ atico persa Abu Ja’far Mohamed ibn Musa al-Jowˆaizmˆı, autor de un tratado de aritm´etica publicado en el a˜ no 825.

Manuales Uex

Para llegar al tercer eslab´on de la Inform´atica Te´orica hay que saltar al campo de la ling¨ u´ıstica. En la d´ecada de los a˜ nos 50, el ling¨ uista y pensador Noam Chomsky, en un intento de formalizar los lenguajes naturales, estableci´o las bases de la ling¨ u´ıstica matem´atica o formal y con ello proporcion´o una poderosa herramienta que facilit´o la definici´on de los primeros lenguajes de programaci´on, que empezaban a surgir en esa ´epoca.

7

ELENA JURADO MÁLAGA

8

TEMA 1. PRELIMINARES

1.2.

Desarrollo de la asignatura

Chomsky clasific´o las gram´aticas formales (y los lenguajes que ´estas generan) de acuerdo a una jerarqu´ıa de cuatro niveles representada en la tabla 1.1. Sorprendentemente, es posible establecer una relaci´on biun´ıvoca entre los diferentes niveles de la jerarqu´ıa de Chomsky y cuatro niveles de una jerarqu´ıa definida entre los diferentes tipos de aut´omatas. A cada nivel de gram´ atica se le puede asociar de forma natural un conjunto de lenguajes que ser´an los que esas gram´aticas generan, pero adem´as, se le puede asociar una clase de aut´omatas formada por aquellos que podr´ an reconocer a dichos lenguajes. La siguiente figura describe la relaci´on que hay entre los diferentes niveles de gram´aticas de la jerarqu´ıa de Chomsky, los lenguajes que generan y las m´aquinas que reconocen estos lenguajes. Lenguajes Lenguajes recursivamente enumerables Lenguajes recursivos Lenguajes Dependientes del Contexto Lenguajes Independientes del Contexto

Gramáticas

Gr. tipo 0 Gr. tipo 1

Autómatas

Máquinas de Turing Autómatas Linealmente Acotados

Leng. LR(k) Leng. LR(1)

Gr. tipo 2

Autómatas de Pila

Leng. LL(k) Leng. LL(1) Leng. (expresiones) regulares

Gr. tipo 3

Autómatas Finitos

Manuales Uex

Figura 1.1: Jerarqu´ıa de gram´aticas, lenguajes y aut´omatas

8

Cada nivel de lenguaje se corresponde con un tipo de aut´omata. Por ejemplo, dado un lenguaje de tipo 3 siempre ser´a posible encontrar un Aut´omata Finito que 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´a necesario utilizar un aut´omata m´as complejo, concretamente un Aut´omata de Pila. La figura 1.1, adem´as de sintetizar la Jerarqu´ıa de Chomsky, presenta un sencillo esquema de los temas a abordar durante el curso. Comenzaremos con el estudio de los lenguajes m´as sencillos

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES

1.2. DESARROLLO DE LA ASIGNATURA

9

(los de tipo 3) y de los aut´ omatas asociados a ellos, para acabar con el estudio de 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 figura, pero tambi´en aparecen otros conjuntos de lenguajes que representan niveles intermedios de esta jerarqu´ıa y que por su inter´es ser´an tambi´en estudiados en la asignatura. Concretamente, los lenguajes LL(1) y LR(1), incluidos en el conjunto de los lenguajes independientes del contexto se estudiar´an en el tema 5 y los lenguajes recursivos ser´an tratados en el tema 8. Como muestra la figura 1.1, en los tres conceptos estudiados (gram´ aticas, lenguajes y aut´omatas) cada nivel contiene al anterior. Por ejemplo, cualquier lenguaje de tipo 3 es a su vez un lenguaje de tipo2 (sin embargo, comprobaremos que lo contrario no es cierto), es decir (L3�L2�L1�L0). De la misma forma, un Aut´ omata Finito puede considerarse como un caso particular de Aut´omata de Pila y ´este como un caso particular de M´aquina de Turing. A continuaci´on comentaremos cu´ales son las principales aplicaciones de los temas que se estudiar´an en esta asignatura. El estudio de las gram´aticas formales ser´a una herramienta muy u ´til para el dise˜ no de los lenguajes de programaci´on. El estudio de determinados aut´omatas (concretamente los aut´omatas finitos y los de pila) permitir´ a construir de manera sistem´atica algunos de los componentes b´asicos de los compiladores.

Los aut´omatas, en general, tienen una gran aplicaci´on en el mundo industrial, ya que permiten modelar el comportamiento de cualquier dispositivo electromec´anico: una cadena de montaje, un robot, un electrodom´estico, etc. Tambi´en pueden ser utilizados para el reconocimiento de patrones y para el dise˜ no de redes neuronales. Los Aut´omatas Finitos ayudan a dise˜ nar software que compruebe la correcci´on de cualquier sistema que tenga un n´ umero finito de estados: protocolos de comunicaci´on, protocolos para el intercambio seguro de informaci´on, etc. Tambi´en se utilizan en el dise˜ no y la verificaci´on del comportamiento de circuitos digitales. Los lenguajes regulares se pueden utilizar para especificar argumentos en determinados comandos de un sistema operativo o de un sistema de b´ usqueda de informaci´on.

Manuales Uex

Los aut´omatas finitos se pueden aplicar con ´exito en el procesamiento del lenguaje natural, por ejemplo, en la categorizaci´ on gramatical de las palabras en una oraci´on o en la extracci´on de informaci´on a partir de grandes vol´ umenes de texto. Tambi´en pueden ser utilizados para manipular ficheros de texto que almacenan una informaci´on estructurada, por ejemplo, con objeto de modificar dicha estructura.

9

ELENA JURADO MÁLAGA

10

TEMA 1. PRELIMINARES Los aut´omatas son tambi´en esenciales para el estudio de los l´ımites de la computaci´on. En este terreno, existen dos cuestiones importantes que nos podemos plantear y que se estudiar´an en los u ´ ltimos temas de la asignatura: 1. ¿Qu´e puede hacer un computador? Utilizaremos el concepto de computabilidad para aplicarlo a los problemas que puede resolver un computador. 2. ¿Qu´e puede hacer un computador eficientemente? Diremos que un problema es tratable, si un computador puede resolverlo en un tiempo que crezca lentamente al aumentar el tama˜ no de los datos de entrada.

Manuales Uex

1.3.

10

Conceptos b´ asicos sobre compiladores

Salvo los dos u ´ ltimos temas que se centrar´an en la teor´ıa de la computaci´on, el planteamiento del resto de los temas estar´a, en general, enfocado al dise˜ no de lenguajes de programaci´on y a la construcci´on de compiladores, teniendo en cuenta que es ´esta una de las aplicaciones m´as interesantes de los conceptos te´oricos tratados en esta asignatura. Por este motivo, en esta secci´on se introducen conceptos muy elementales sobre el proceso de traducci´on de los lenguajes de programaci´on. 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 programaci´on de alto nivel y el objeto sea un lenguaje de bajo nivel (ensamblador o c´odigo m´aquina), a dicho traductor se le denomina compilador. An´alogamente, un ensamblador es un traductor cuyo lenguaje fuente es el lenguaje ensamblador. A diferencia de los programas mencionados anteriormente, un int´ erprete es un traductor que no genera un programa en c´odigo objeto, sino que toma una sentencia 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 ´epoca, se impuso la utilizaci´on de int´erpretes frente a la de compiladores, pues el programa fuente y el int´erprete juntos requer´ıan menos memoria que la que era necesaria para el proceso de compilaci´on. Por ello, los primero ordenadores personales ten´ıan instalado habitualmente un int´erprete para el lenguaje BASIC. Sin embargo, con el tiempo se impusieron los compiladores debido, sobre todo, a la informaci´on que ofrec´ıan sobre los errores cometidos por el programador, y a una mayor velocidad de ejecuci´on del c´odigo resultante. A modo de resumen, los siguientes p´arrafos indican las ventajas que pueden tener un m´etodo de traducci´on frente al otro. Ventajas del compilador frente al int´ erprete El programa se compila una sola vez, pero se puede ejecutar muchas.

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES ´ 1.3. CONCEPTOS BASICOS SOBRE COMPILADORES

11

La ejecuci´on del programa objeto es mucho m´as r´apida que la interpretaci´on del fuente. El compilador tiene una visi´on completa del programa, por lo que puede dar una informaci´on m´as detallada de los errores cometidos por el programador. Ventajas del int´ erprete El int´erprete necesita menos memoria que el compilador. Permite una mayor interactividad con el c´odigo en tiempo de desarrollo. 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 continuaci´on. El preprocesador se ocupa de incluir ficheros, expandir macros, eliminar comentarios, etc. El enlazador (linker ) construye el fichero ejecutable a˜ nadiendo al fichero objeto las cabeceras necesarias y las funciones de librer´ıa utilizadas por el programa fuente. El depurador permite seguir paso a paso la ejecuci´on del programa. Finalmente, muchos compiladores generan un programa en lenguaje ensamblador que debe despu´es convertirse en un ejecutable mediante la utilizaci´on de un ensamblador.

1.3.1.

Componentes de un compilador

Un compilador es un programa complejo en el que no es f´acil distinguir claramente unas partes de otras. Sin embargo, se ha conseguido establecer una divisi´on l´ogica del compilador en fases, lo que permite formalizar y estudiar por separado cada una de ellas. En la pr´actica, estas fases no siempre se ejecutan secuencialmente sino que lo hacen simult´aneamente, pudiendo ser unas fases tratadas como subrutinas de otras.

Cadenas espec´ıficas, como las palabras reservadas (if, while, . . .), signos de puntuaci´on (., ,, =, . . .), operadores aritm´eticos (+,*, . . .) y l´ogicos (AND, OR, . . .), etc. Habitualmente, las cadenas espec´ıficas no tienen asociado ning´ un valor, s´olo su tipo.

Manuales Uex

An´ alisis l´ exico El analizador l´exico, tambi´en conocido como scanner, lee los caracteres del programa fuente, uno a uno, desde el fichero de entrada y va formando grupos de caracteres con alguna relaci´on entre s´ı (tokens). Cada token es tratado como una u ´ nica 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:

11

ELENA JURADO MÁLAGA

12

TEMA 1. PRELIMINARES

Cadenas no espec´ıficas, como los identificadores o las constantes num´ericas o de texto. Las cadenas no espec´ıficas siempre tienen tipo y valor. Por ejemplo, si dato es el nombre de una variable, el tipo del token ser´a identificador y su valor ser´a dato. Frecuentemente el analizador l´exico funciona como una subrutina del analizador sint´actico. Para el dise˜ no del analizadores l´exicos se utilizan los Aut´omatas Finitos. An´ alisis sint´ actico El analizador sint´actico, tambi´en llamado parser, recibe como entrada los tokens que genera el analizador l´exico y comprueba si estos tokens van llegando en el orden correcto. Siempre que no se hayan producido errores, la salida te´orica de esta fase del compilador ser´a un a´rbol sint´actico. Si el programa es incorrecto se generar´an los mensajes de error correspondientes. Para el dise˜no de los analizadores sint´acticos se utilizan los Aut´omatas de Pila. An´ alisis sem´ antico El analizador sem´antico trata de determinar si el significado de las diferentes instrucciones del programa es v´alido. Para conseguirlo tendr´a que calcular y analizar informaci´ on asociada a las sentencias del programa, por ejemplo, deber´a determinar el tipo de los resultados intermedios de la expresiones, comprobar que los argumentos de un operador pertenecen al conjunto de los operandos posibles, comprobar que los operandos son compatibles entre si, etc. ´ La salida te´orica de esta fase ser´a un ´arbol sem´antico. Este es una ampliaci´on de un ´arbol sint´actico en el que cada rama del ´arbol ha adquirido, adem´as, el significado que debe tener el fragmento de programa que representa. Esta fase del an´alisis es m´as dif´ıcil de formalizar que las dos anteriores y se utilizar´an para ello las gram´aticas atribuidas.

Manuales Uex

Generaci´ on de c´ odigo intermedio Cuando una empresa se dedica a la generaci´on de compiladores, normalmente trabaja con muchos lenguajes fuentes (m) y con muchos lenguajes objetos (n) diferentes. Para evitar el tener que construir m*n compiladores, se utiliza un lenguaje intermedio. De esta forma s´olo hay que construir m programas que traduzcan cada lenguaje fuente al c´odigo intermedio (front ends) y n programas que traduzcan del lenguaje intermedio a cada lenguaje objeto (back ends). La utilizaci´on del lenguaje intermedio permite construir en menos tiempo compiladores para nuevos lenguajes y para nuevas m´aquinas. Desgraciadamente, no existe consenso para utilizar un u ´ nico lenguaje intermedio.

12

Optimizaci´ on de c´ odigo La mayor´ıa de los compiladores suelen tener una fase de optimizaci´on de c´odigo intermedio (independiente de los lenguajes fuente y objeto), y una fase de optimizaci´on de c´odigo objeto (no aplicable a otras m´aquinas).

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES ´ 1.3. CONCEPTOS BASICOS SOBRE COMPILADORES

13

Estas fases se a˜ naden al compilador para conseguir que el programa objeto sea m´as r´apido y necesite menos memoria para ejecutarse. Veamos en los siguientes p´arrafos algunos ejemplos de optimizaci´on: 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 asignaci´ on B := 1 se puede sacar del bucle Generaci´ on de c´ odigo objeto En esta fase, el c´odigo intermedio optimizado es traducido a una secuencia de instrucciones en ensamblador o en c´ odigo m´aquina. Por ejemplo, la sentencia A := B+C se convertir´ıa en una colecci´on de instrucciones que podr´ıan representarse as´ı: LOAD B ADD C STORE A

Control de errores Informar adecuadamente al programador de los errores que hay en su programa es una de las misiones m´as importantes y complejas de un compilador. Es una tarea dif´ıcil porque a veces unos errores ocultan a otros, o porque un error desencadena una avalancha de errores asociados. El control de errores se lleva a cabo, sobre todo, en las etapas de an´alisis sint´actico y sem´antico.

Manuales Uex

Tabla de s´ımbolos El compilador necesita gestionar la informaci´on de los elementos que se va encontrando en el programa fuente: variables, tipos, funciones, clases, etc. Esta informaci´on se almacena en una estructura de datos interna conocida como tabla de s´ımbolos. Para que la compilaci´on sea eficiente la tabla debe ser dise˜ nada cuidadosamente de manera que contenga toda la informaci´on que el compilador necesita. Adem´as, hay que prestar especial atenci´on a la velocidad de acceso a la informaci´on con objeto de no ralentizar el proceso.

13

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES

Tema 2 Lenguajes y Gram´ aticas Formales Contenido 2.1. Definiciones b´ asicas . . . . . . . . . . . . . . . . . . . . . .

15

2.2. Operaciones con palabras . . . . . . . . . . . . . . . . . . .

16

2.3. Lenguajes y operaciones con lenguajes . . . . . . . . . . .

17

2.4. Concepto de gram´ atica formal . . . . . . . . . . . . . . . .

19

2.5. Clasificaci´ on de las gr. formales . . . . . . . . . . . . . . .

24

2.6. Gram´ aticas equivalentes . . . . . . . . . . . . . . . . . . .

26

2.7. Problemas y cuestiones . . . . . . . . . . . . . . . . . . . .

29

En este tema se abordan los conceptos de gram´atica y lenguaje formal. El tema comienza con la definici´on de una serie de conceptos b´asicos, seguidamente, se estudian 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 introducci´on del concepto de gram´atica formal, que se har´a en primer lugar de forma intuitiva, hasta llegar a una definici´on formal. El tema acaba con la presentaci´on de una taxonom´ıa de las gram´aticas formales realizada por Noam Chomsky y con el estudio de algunos m´etodos para simplificar ciertas gram´aticas.

Definiciones b´ asicas

A continuaci´on se incluyen las definiciones de conceptos elementales que se utilizar´an a lo largo de toda la asignatura. Alfabeto: conjunto no vac´ıo y finito de s´ımbolos. A estos s´ımbolos tambi´en se les suele llamar letras del alfabeto. Se denota con la letra griega Σ. Ejemplos: 15

Manuales Uex

2.1.

15

ELENA JURADO MÁLAGA ´ TEMA 2. LENGUAJES Y GRAMATICAS FORMALES

16

Σ1 = {a,b,c,...,z}

Σ2 = {0,1}

Palabra: secuencia finita de s´ımbolos de un alfabeto. Lo correcto es hablar de “palabras definidas sobre un alfabeto”. Habitualmente utilizaremos en nuestros ejemplos las u ´ ltimas letras min´ usculas de nuestro alfabeto (x, y, z) para denotar a las palabras. Ejemplos: x = casa es una palabra definida sobre el alfabeto Σ1 y = 010100 es una palabra definida sobre el alfabeto Σ2 Palabra vac´ıa: es una palabra que no tiene ning´ un s´ımbolo y se representa como λ. Longitud de una palabra: es el n´ umero de s´ımbolos que componen la palabra. Se representa utilizando dos barras verticales(||). Ejemplos: |x| = 4

|y| = 6

|λ| = 0

Lenguaje Universal definido 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 infinito, y siempre pertenece a ´el la palabra vac´ıa. Ejemplo: si

Σ = {a} entonces ω(Σ) = {λ, a, aa, aaa, ...}

Lenguaje L definido sobre un alfabeto Σ, es un conjunto cualquiera de palabras definidas sobre dicho alfabeto, por lo tanto, L ⊂ ω(Σ).

2.2.

Operaciones con palabras

En este apartado se presenta una colecci´on de operaciones que se pueden realizar con palabras y las propiedades que cumplen estas operaciones.

Manuales Uex

1. Concatenaci´ on Sean x e y dos palabras, se concatenan para formar otra palabra que se denota xy y que est´a formada por todas las letras de x seguidas por las letras de y. Ejemplo: x= casa y=blanca ⇒xy = casablanca Propiedades:

16

Operaci´on cerrada. Si x e y est´an definidas sobre el mismo alfabeto, xy tambi´en lo estar´a. Asociativa.

(xy)z = x(yz)

Elemento neutro (λ).

xλ = λx = x

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES

2.3. LENGUAJES Y OPERACIONES CON LENGUAJES

17

|xy| = |x| + |y| No es una operaci´on conmutativa 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. Reflexi´ on (o inversa) de una palabra (x−1 ) Es otra palabra definida sobre el mismo alfabeto y formada por los mismos s´ımbolos que x, dispuestos en orden inverso. Ejemplo: x = casa ⇒ x−1 = asac Propiedad: |x| = |x−1 |

2.3.

Lenguajes y operaciones con lenguajes

1. Uni´ on de lenguajes La uni´on de dos lenguajes L1 y L2 definidos sobre el mismo alfabeto Σ es otro lenguaje, tambi´en definido sobre ese alfabeto, que contiene todas las palabras de L1 y todas las de L2 . L = L1 ∪ L2 = {x/x ∈ L1 ∨ x ∈ L2 } Propiedades:

Manuales Uex

Como hemos visto anteriormente un lenguaje definido sobre un alfabeto no es m´as que un subconjunto del lenguaje universal de ese alfabeto. Por ejemplo, si Σ = {0,1}, podemos definir diferentes lenguajes sobre ese alfabeto: L1 = {x/|x| = 4} L2 = {0n 1n /n > 0} L3 = {x/x no contenga un n´ umero par de 0’s } Sobre cualquier alfabeto se pueden definir lenguajes especiales como el lenguaje vac´ıo, que se representa como LØ = Ø y que no tiene ninguna palabra. Tambi´en existe el lenguaje que contiene solamente la palabra vac´ıa Lλ = {λ} Se presentan, a continuaci´on, diferentes operaciones que se pueden definir sobre los lenguajes. Casi todas est´an basadas en las operaciones sobre palabras que se explicaron en la secci´on anterior.

17

ELENA JURADO MÁLAGA ´ TEMA 2. LENGUAJES Y GRAMATICAS FORMALES

18

Operaci´on cerrada. El lenguaje resultante est´a definido sobre el mismo alfabeto que L1 y L2 . Asociativa. (L1 ∪ L2 ) ∪ L3 = L1 ∪ (L2 ∪ L3 ) Conmutativa. L1 ∪ L2 = L2 ∪ L1 Elemento Neutro (Ø).

L ∪ Ø=Ø ∪ L=L

Idempotencia. L ∪ L = L 2. Concatenaci´ on Sean dos lenguajes L1 y L2 definidos sobre el mismo alfabeto Σ, la concatenaci´on de ambos lenguajes estar´a formada por todas las palabras obtenidas al concatenar una palabra cualquiera de L1 con otra de L2 . L = L1 L2 = {xy/x ∈ L1 ∧ y ∈ L2 } Propiedades: Operaci´on cerrada. El lenguaje resultante est´a definido sobre el mismo alfabeto que L1 y L2 . Asociativa. (L1 L2 ) L3 = L1 (L2 L3 ) Elemento Neutro (Lλ = {λ}).

Lλ L = LLλ = L

No es conmutativa. 3. Potencia i-esima n´ umero i de veces. Propiedades:

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

Li+j = Li Lj

Manuales Uex

L0 = Lλ = {λ}

18

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∗ =

∞ �

i=0

Li

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES ´ 2.4. CONCEPTO DE GRAMATICA FORMAL

19

5. Clausura positiva La clausura positiva de un lenguaje (L+ ) es la uni´on de todas las potencias de ese lenguaje, exceptuando la potencia cero. L+ =

∞ �

Li

i=1

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. Reflexi´ on La reflexi´on de un lenguaje (L−1 ) est´a formada por las inversas de todas las palabras de ese lenguaje. L−1 = {x−1 /x ∈ L}

2.4.

Concepto de gram´ atica formal

Si nos referimos a los lenguajes naturales el concepto de gram´atica es muy antiguo. Los primeros trabajos aparecen en la India durante los comienzos del primer milenio antes de Cristo, alcanz´andose el m´aximo apogeo con Panini (siglos VII y VI a. C.). Al mismo tiempo en Grecia se desarrollaba una corriente de investigaci´on gramatical, cuyo m´aximo representante ser´ıa Pit´agoras. Sin embargo, el concepto de gram´atica desde un punto de vista formal tiene su origen en los trabajos de Chomsky a mediados del siglo XX.

2.4.1.

Definiciones previas

Definici´ on 2.1 (Producci´ on) Sea Σ un alfabeto, llamamos producci´on (o regla) definida sobre ese alfabeto a un par ordenado de palabras (x, y) donde x, y ∈ Σ∗ . Se dice que x es la parte izquierda de la producci´on y que y es la parte derecha. A las producciones tambi´en se las llama reglas de derivaci´on. Se representa x ::= y.

Manuales Uex

Comenzaremos este apartado con una serie de definiciones cuyo inter´es pr´actico quedar´a de manifiesto con los ejemplos que aparecen a continuaci´on.

19

ELENA JURADO MÁLAGA ´ TEMA 2. LENGUAJES Y GRAMATICAS FORMALES

20

Definici´ on 2.2 (Producci´ on compresora) Se dice que una producci´on es compresora si la longitud de su parte derecha es menor que la de la parte izquierda. Definici´ on 2.3 (Derivaci´ on directa) Sea Σ un alfabeto, P un conjunto de producciones definidas 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 producci´on xi ::= yi tal que v = zxi u y w = zyi u La notaci´on utilizada para representar una derivaci´on directa es v → w Definici´ on 2.4 (Derivaci´ on) Sea Σ un alfabeto, P un conjunto de producciones definidas 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 ... wm−1 → wm = w ∗ La notaci´on utilizada en este caso es v → w

Manuales Uex

2.4.2.

20

Ejemplo con un lenguaje natural(castellano)

Estamos familiarizados con el concepto tradicional de gram´atica que, de forma intuitiva, podr´ıamos considerar como un conjunto de reglas que nos indican qu´e es correcto y qu´e no lo es en un lenguaje natural. Con el fin de acercarnos a una definici´on m´as formal comenzaremos con un ejemplo en lengua castellana. La gram´atica debe describir la estructura de las frases y de las palabras de un lenguaje. Veamos una serie de reglas muy sencillas que nos permitir´ıan comprobar que la frase “el perro corre deprisa” es correcta.

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES ´ 2.4. CONCEPTO DE GRAMATICA FORMAL

21

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

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´ıa generar la frase “la gata corre” a partir 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

2.4.3.

Ejemplo en un lenguaje artificial

Aplicaremos el mismo m´etodo para definir un fragmento de un lenguaje de programaci´on. Pretendemos describir c´omo son las instrucciones que permiten asignar el valor de una expresi´on a una variable en un lenguaje como C.

Manuales Uex

Sin embargo, la forma m´as habitual de representar este mismo proceso de generaci´on de una cadena de s´ımbolos es mediante un ´arbol de derivaciones (o ´arbol parser ) como el que se muestra en la figura 2.1.

21

ELENA JURADO MÁLAGA ´ TEMA 2. LENGUAJES Y GRAMATICAS FORMALES

22

<sujeto> <articulo> la

<predicado> <nombre> gata

corre

´ Figura 2.1: Arbol de derivaci´on

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 f´acil comprobar que a partir 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.

Manuales Uex

2.4.4.

22

Definici´ on de gram´ atica formal

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 definidas. A partir de estas ideas intuitivas, formalizaremos la definici´on de gram´atica. Definici´ on 2.5 (Gram´ atica Formal) Se llama gram´atica formal definida sobre un alfabeto Σ a una tupla de la forma G = {ΣT , ΣN , S, P } donde:

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES ´ 2.4. CONCEPTO DE GRAMATICA FORMAL

23

•ΣT es el alfabeto de s´ımbolos terminales •ΣN es el alfabeto de s´ımbolos no terminales (aparecen en los ejemplos encerrados entre <>) •S es el s´ımbolo inicial de la gram´atica •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 >

P =

                          

< Numero >::=< Signo >< Digito > < Signo >::= + < Signo >::= − < Digito >::=< Caracter >< Digito > < Digito >::=< Caracter > < Caracter >::= 0 < Caracter >::= 1 ··· < Caracter >::= 9

                          

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 may´ usculas para representar a los s´ımbolos no terminales y las min´ usculas para los terminales. Adem´as, utilizaremos la notaci´on BNF (Backus Normal Form). Con esta notaci´on se utilizan los s´ımbolos ::= para separar la parte izquierda de una producci´ on de la derecha y adem´as, se emplea el s´ımbolo | para indicar que la parte izquierda de una producci´ on coincide con la de la anterior, as´ı no se repite la parte izquierda de determinadas producciones. Por tanto, en el ejemplo anterior la descripci´ on de las producciones quedar´ıa as´ı:

Manuales Uex

Con esta gram´atica, y a partir del s´ımbolo < Numero >, podemos generar cualquier n´ umero natural, siempre que vaya precedido por un signo. Por ejemplo: -57, +5, -4999.

23

ELENA JURADO MÁLAGA

24

´ TEMA 2. LENGUAJES Y GRAMATICAS FORMALES  < Numero >::=< Signo >< Digito >     < Signo >::= +     |−      < Digito >::=< Caracter >< Digito > | < Caracter > P =    < Caracter >::= 0    |1     |···    |9

                          

Definici´ on 2.6 (Lenguaje generado por una gram´ atica) Sea una gram´atica definida como G = {ΣT , ΣN , S, P } llamamos lenguaje generado ∗ por dicha gram´atica a L = {x ∈ Σ∗T /S → x} Por lo tanto, las palabras del lenguaje estar´an formadas por cadenas de s´ımbolos terminales generadas a partir del s´ımbolo inicial de la gram´atica, utilizando las producciones que la definen. Definici´ on 2.7 (Recursividad) ∗ Una gram´atica es recursiva si tiene alguna derivaci´ on recursiva, es decir, si A → xAy ∗ donde A ∈ ΣN , x, y ∈ Σ . Si x = λ se dice que la gram´atica es recursiva por la izquierda, y si y = λ se dice que es recursiva por la derecha. Es evidente que si una gram´atica tiene producciones recursivas, es decir producciones con la forma A ::= xAy, entonces es recursiva. Teorema 2.1 Un lenguaje es infinito si y s´olo si existe una gram´atica recursiva que lo genera.

2.5.

Clasificaci´ on de las gr. formales

Manuales Uex

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

24

2.5.1.

Gram´ aticas de tipo 0

Tambi´en se las llama gram´aticas sin restricciones o gram´aticas recursivamente enumerables. Las producciones de las gram´aticas de tipo 0 tienen la forma:

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES ´ DE LAS GR. FORMALES 2.5. CLASIFICACION

25

xAy ::= v donde A ∈ ΣN , x, y, v ∈ Σ∗ Sin embargo, es posible demostrar que cualquier lenguaje de tipo 0 puede ser tambi´en generado por una gram´atica que pertenece a un grupo algo m´as restringido, las gram´ aticas con estructura de frase. Podemos decir, por tanto, que las gr. de tipo 0 y las gr. con estructura de frase tienen el mismo poder generativo. Las producciones de las gram´aticas con estructura de frase tienen la forma: xAy ::= xvy donde A ∈ ΣN , x, y, v ∈ Σ∗

2.5.2.

Gram´ aticas de tipo 1

A este tipo de gram´aticas tambi´en se las llama gram´aticas dependientes del contexto. Las producciones deben tener la siguiente forma: xAy ::= xvy donde A ∈ ΣN , v ∈ Σ+ x, y ∈ Σ∗ Es obvio que todas las gram´aticas de tipo 1 son tambi´en gram´aticas con estructura de frase, pero en este caso hay una restricci´on a˜ nadida y es que la longitud de la parte derecha de las producciones es siempre mayor o igual que la de la parte izquierda, es decir, no hay producciones compresoras. El nombre de gram´aticas dependientes del contexto se debe a que las producciones 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 producci´on.

2.5.3.

Gram´ aticas de tipo 2

A ::= v donde A ∈ ΣN

v ∈ Σ∗

En este tipo de gram´aticas, la conversi´on de A en v se realiza independientemente del contexto en el que se encuentre A, de ah´ı su nombre. Son especialmente adecuadas para representar los aspectos sint´acticos de cualquier lenguaje de programaci´on.

Manuales Uex

Son tambi´en llamadas gram´aticas independientes del contexto. Sus producciones son a´ un m´as restrictivas. En este caso, la parte izquierda de la producci´ on est´a formada por un u ´nico s´ımbolo no terminal. Por lo tanto, las producciones son de la forma:

25

ELENA JURADO MÁLAGA ´ TEMA 2. LENGUAJES Y GRAMATICAS FORMALES

26

2.5.4.

Gram´ aticas de tipo 3

Es el grupo m´as restringido de gram´aticas y tambi´en son llamadas regulares. En este caso tambi´en se le imponen restricciones a la parte derecha de las producciones, que tendr´an como m´aximo dos s´ımbolos. Hay dos tipos de gram´aticas regulares y sus producciones pueden ser de la siguiente forma: 1. Para las gram´aticas lineales por la derecha (GLD) a) A ::= a b) A ::= aV c) S ::= λ

donde A, V ∈ ΣN , a ∈ ΣT

y S es el s´ımbolo inicial de la gram´atica.

2. Para las gram´aticas lineales por la izquierda (GLI) a) A ::= a b) A ::= V a c) S ::= λ

donde A, V ∈ ΣN , a ∈ ΣT

y S es el s´ımbolo inicial de la gram´atica.

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

2.6.

Gram´ aticas equivalentes

A continuaci´on veremos como, en ocasiones, es recomendable simplificar ciertas gram´aticas, eliminando s´ımbolos o producciones no deseadas. En estos casos, el objetivo ser´a llegar a definir una gram´atica equivalente a la primera pero que no tenga esos elementos indeseables. En este apartado trabajaremos exclusivamente con gram´aticas independientes del contexto.

Manuales Uex

Definici´ on 2.8 (Gram´ aticas equivalentes) Dos gram´aticas son equivalentes cuando generan el mismo lenguaje. Es evidente que, para que esto suceda, deben estar definidas sobre el mismo ΣT .

26

2.6.1.

Simplificaci´ on de gram´ aticas

Comenzaremos definiendo los elementos indeseables de los que habl´abamos anteriormente.

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES ´ 2.6. GRAMATICAS EQUIVALENTES

27

Definici´ on 2.9 (Reglas innecesarias) Son produciones de la forma A ::= A. Evidentemente no aportan informaci´on a la gram´atica. Definici´ on 2.10 (S´ı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 gram´atica. Definici´ on 2.11 (S´ımbolos no generativos) Son s´ımbolos no terminales a partir de los cuales no puede derivarse ninguna cadena de s´ımbolos terminales. Veamos a continuaci´on m´etodos para localizar los s´ımbolos inaccesibles y los no generativos. M´ etodo para localizar los s´ımbolos inaccesibles de una gram´ atica En realidad, el m´etodo trata de identificar los s´ımbolos accesibles, as´ı el resto ser´an s´ımbolos inaccesibles. Para conseguirlo se puede dise˜nar un algoritmo que construya de forma incremental este conjunto de s´ımbolos accesibles. Inicialmente cualquier s´ımbolo que aparezca en la parte derecha de una producci´on que tiene a S en la parte izquierda, es un s´ımbolo accesible. A partir de aqu´ı, si un s´ımbolo est´a en la parte derecha de una producci´on que tiene a un s´ımbolo accesible en la parte izquierda es tambi´en accesible. Veamos un algoritmo para llevar a cabo esta tarea:

M´ etodo para localizar los s´ımbolos no generativos El m´etodo es an´alogo 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

Algoritmo 2.1 B´ usqueda S´ı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

27

ELENA JURADO MÁLAGA

28

´ TEMA 2. LENGUAJES Y GRAMATICAS FORMALES

izquierda de una producci´on que tiene s´olo s´ımbolos terminales o la cadena nula en la parte derecha. Veamos el algoritmo: Algoritmo 2.2 B´ usqueda S´ı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 gram´atica, ya que no aportan informaci´on relevante a la misma. Definici´ on 2.12 (Gram´ atica Limpia) Decimos que una gram´atica es limpia si no tiene reglas innecesarias, ni s´ımbolos no generativos, ni s´ımbolos inaccesibles.

Manuales Uex

Definici´ on 2.13 (Reglas de redenominaci´ on) Son reglas en las que hay un u ´ nico s´ımbolo no terminal tanto en la parte izquierda de la producci´on como en la derecha. Es decir, tienen la forma: A ::= B, A, B ∈ ΣN

28

Para eliminar las reglas de redenominaci´on de una gram´atica es necesario sustituirlas 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 Definici´ on 2.14 (Reglas no generativas) Son aquellas en las que s´olo aparece λ en la parte derecha de la producci´on.

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES

2.7. PROBLEMAS Y CUESTIONES

29

Para eliminar estas reglas tambi´en es necesario a˜ nadir otras a la gram´atica. Si queremos eliminar la producci´on A ::= λ es necesario localizar las producciones que tiene a A en la parte derecha (por ejemplo: B ::= xAy) y a˜ nadir para cada producci´on de este tipo otra equivalente en la que no aparece A (en este caso, B ::= xy). La producci´on S ::= λ no puede eliminarse de ninguna gram´atica ya que es imprescindible si se pretende que el lenguaje generado contenga la palabra nula. Definici´ on 2.15 (Gram´ atica bien formada) Decimos que una gram´atica est´a bien formada si no tiene reglas de redenominaci´on ni reglas no generativas.

2.7.

Problemas y cuestiones

2.1 Dado el alfabeto Σ = {a, b}, ¿cu´antas palabras hay en el lenguaje An B y c´omo son dichas palabras?, considerando los siguientes casos: 1. A = {a}

B = {b}

2. A = {a}

B = {b, λ}

3. A = {a, λ}

B = {b, λ}

4. A = {a, λ}

B = {b}

2.2 Dado el alfabeto Σ = {a, b}, y el lenguaje definido sobre ´el, L = {aa, bb} ¿c´omo son las palabras del lenguaje L4 ? 2.3 ¿En qu´e situaci´on se cumple que L∗ = L+ ?

1. ΣT = {a, b, c, 0, 1} ΣN = {S}

 S ::= a     |b     |c    |Sa P = |Sb     |Sc     |S0    |S1

                      

Manuales Uex

2.4 Dadas las siguientes gram´aticas, indicar de qu´e tipo son y c´omo es el lenguaje que generan:

29

ELENA JURADO MÁLAGA

30

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

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

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

 S ::= A    |λ P = A ::= aAb    |ab  S ::= A     |λ    A ::= aA P = |Ab     |a    |b

 S ::= A    |λ P = A ::= AaA    |a

      

              

      

2.5 Dados los siguientes lenguajes, dise˜nar una gram´atica que los genere 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 definida en el alfabeto {0, 1}}

Manuales Uex

2.6 Dadas las siguientes gram´aticas, obtener gram´aticas equivalentes a ellas que sean limpias y bien formadas

30

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

                          

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES

2.7. PROBLEMAS Y CUESTIONES

 S ::= zP zQz      P ::= xP x |Q P =   Q ::= yP y    |λ

          

Manuales Uex

2. ΣT = {x, y, z} ΣN = {S, P, Q}

31

31

Tema 3 Expresiones y gram´ aticas regulares Contenido 3.1. Definici´ on de expresi´ on regular . . . . . . . . . . . . . . . ´ 3.2. Algebra de las expresiones regulares . . . . . . . . . . . .

33

3.3. Definici´ on de gram´ atica regular . . . . . . . . . . . . . . .

35

3.4. Ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

36

3.5. Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . .

38

34

En este tema se van a estudiar las gram´aticas regulares, tambi´en llamadas de tipo 3 atendiendo a la clasificaci´on de Chomsky. Tambi´en se aborda el estudio de las expresiones regulares que permiten definir de forma precisa los lenguajes generados por estas gram´aticas (lenguajes regulares).

3.1.

Definici´ on de expresi´ on regular

Una expresi´on regular es una notaci´on normalizada para representar lenguajes regulares, es decir, lenguajes generados por gram´aticas de tipo 3. Como veremos, las expresiones regulares permiten describir con exactitud y sencillez cualquier lenguaje regular. Para definir una expresi´ on regular(e.r.) se pueden utilizar todos los s´ımbolos del alfabeto Σ y, adem´as, λ y Ø. Los operadores que tambi´en se pueden utilizar son:

. representa la concatenaci´on (este s´ımbolo no se suele escribir) * representa el cierre de Kleene ( ) modifican las prioridades de los dem´as operadores 33

Manuales Uex

+ representa la uni´on

33

ELENA JURADO MÁLAGA ´ TEMA 3. EXPRESIONES Y GRAMATICAS REGULARES

34

Una expresi´on regular se puede definir de acuerdo a los siguientes criterios: 1. Ø es una e.r. que representa al lenguaje vac´ıo (no tiene palabras) LØ = Ø 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 α + β tambi´en lo es y representa al lenguaje Lα+β = Lα ∪ Lβ 5. Si α y β son e.r. entonces αβ tambi´en lo es y representa al lenguaje Lαβ = Lα Lβ 6. Si α es una e.r. entonces α∗ tambi´en lo es y representa al lenguaje � i i Lα∗ = ∞ en se puede representar α∗ = Σ∞ i=0 α i=0 Lα que tambi´

S´olo son e.r. aquellas que puedan ser definidas utilizando los 6 puntos vistos anteriormente. La prioridad de las operaciones, que puede modificarse utilizando par´entesis, es 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 definido sobre el alfabeto

3.2.

´ Algebra de las expresiones regulares

Propiedades de la uni´ on (+)

Manuales Uex

1. Asociativa

34

2. Conmutativa

(α + β) + γ = α + (β + γ) α+β =β+α

3. Elemento neutro (Ø) 4. Idempotencia

α+Ø=α

α+α=α

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES ´ DE GRAMATICA ´ 3.3. DEFINICION REGULAR

35

Propiedades de la concatenaci´ on (.) 1. Asociativa

(αβ)γ = α(βγ)

2. Distributiva respecto de la uni´ on 3. Elemento neutro (λ)

α(β + γ) = αβ + αγ

αλ = λα = α

4. αØ = Ø 5. No es conmutativa Propiedades del cierre de Kleene (*) 1. λ∗ = λ 2. Ø∗ = λ 3. α∗ α∗ = α∗ 4. α∗ α = αα∗ 5. (α∗ )∗ = α∗ 6. α∗ = λ + αα∗ 7. α∗ = λ + α + α2 + . . . + αn + αn+1 α∗ Si tenemos una funci´on f : EΣn −→ EΣ (por ejemplo f (α, β) = α∗ β), donde EΣ representa al conjunto de las expresiones regulares definidas sobre Σ, entonces: 8. f (α, β, γ, . . .) + (α + β + γ + . . .)∗ = (α + β + γ + . . .)∗ 9. (f (α∗ , β ∗, γ ∗ , . . .))∗ = (α + β + γ + . . .)∗

3.3.

Definici´ on de gram´ atica regular

1. A ::= a 2. A ::= aV

donde A, V ∈ ΣN , a ∈ ΣT

3. S ::= λ

y S es el s´ımbolo inicial de la gram´atica.

Manuales Uex

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

35

ELENA JURADO MÁLAGA ´ TEMA 3. EXPRESIONES Y GRAMATICAS REGULARES

36

Las producciones de las gram´aticas lineales por la izquierda pueden ser de la forma: 1. A ::= a 2. A ::= V a

donde A, V ∈ ΣN , a ∈ ΣT

3. S ::= λ

y S es el s´ımbolo inicial de la gram´atica.

Estos dos tipos de gram´aticas tienen el mismo poder generativo, es decir, dada una gram´atica lineal por la izquierda siempre existe una gram´ atica lineal por la derecha que es equivalente a ella y viceversa. Adem´as, dado un lenguaje regular siempre existen, al menos, una gram´atica lineal por la izquierda y una gram´atica lineal por 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

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

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

Manuales Uex

y por la gr. lineal por la derecha

36

 S ::= aA     A ::= aA    |bA P = ···     |zA    |λ

              

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES

3.4. EJEMPLOS

37

3. El lenguaje de las palabras que empiezan por a, terminan por c y adem´as de estas dos letras s´olo pueden tener b´s (tantas como se quieran) puede representarse 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

   S ::= aA  A ::= bA P =   |c

Los lenguajes regulares son especialmente adecuados para representar las caracter´ısticas l´exicas de un lenguaje de programaci´on, como veremos en los siguientes ejemplos en los que consideraremos un lenguaje de programaci´on similar a C. 4. Las cadenas que pueden ser consideradas como un identificador del lenguaje (nombres inventados por el programador para definir variables, funciones, etc.) est´an formadas por letras (may´ usculas y min´ usculas), d´ıgitos y el gui´on bajo ( ), pero no pueden comenzar por un d´ıgito. Este lenguaje definido 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 a 1Ab Si trabajamos con el alfabeto Σ3 = {0, . . . , 9, .,+ , −, e, E} (el s´ımbolo de la suma ha sido representado en un tama˜ no menor del habitual para distinguirlo con claridad del operador uni´ on (+)) +

6. La e.r. β = α.(0 + . . . + 9)∗ representa n´ umeros reales no negativos con una notaci´on cl´asica (por ejemplo: 55.7, 854.95 o 5.). 7. La e.r. γ = (β(e + E)α) + (β(e + E)+ α) + (β(e + E) − α) representa n´ umeros reales no negativos con una notaci´on cient´ıfica (por ejemplo: 5.5e+10).

Manuales Uex

5. La e.r. α = (0 + . . . + 9)(0 + . . . + 9)∗ permite representar a cualquier n´ umero natural (por ejemplo: 4, 27 o 256).

37

ELENA JURADO MÁLAGA ´ TEMA 3. EXPRESIONES Y GRAMATICAS REGULARES

38

3.5.

Problemas

3.1 Describir los lenguajes representados por las siguientes expresiones regulares definidas 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 expresi´ on regular, los siguientes lenguajes 1. Considerando que Σ = {a}, a) el lenguaje formado por cadenas de a’s de longitud par b) el lenguaje formado por cadenas de a’s de longitud impar 2. Considerando que Σ = {a, b}, el lenguaje formado por cadenas de a’s y b´s, 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 expresi´on representa y otra que no pertenezca a dicho lenguaje 1. (1∗ + 0∗ )(1∗ + 0∗ )(1∗ + 0∗ ) 2. (1 + 0)∗ 10(1 + 0)∗

3. 1∗ (0 + 10∗ )1∗ 4. 10∗ + 01∗

3.4 Simplificar 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.5 Dadas dos expresiones regulares α = 0 ∗ + 1∗ β = 01∗ + 10∗ + 1∗ 0 + (0∗ 1)∗ encontrar

Manuales Uex

1. una palabra que pertenezca a α pero no a β

38

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 β

Tema 4 Aut´ omatas Finitos Contenido 39

4.2. Definici´ on de Aut´ omata Finito Determinista . . . . . . .

40

4.3. Representaci´ on de Aut´ omatas . . . . . . . . . . . . . . . .

40

4.4. Los AFD como reconocedores de lenguajes . . . . . . . .

43

4.5. Minimizaci´ on de un AFD . . . . . . . . . . . . . . . . . . .

43

4.6. Aut´ omatas Finitos No Deterministas(AFND) . . . . . .

47

4.7. Lenguaje aceptado por un AFND . . . . . . . . . . . . . .

50

4.8. Simulaci´ on de un AFD y AFND . . . . . . . . . . . . . .

51

4.9. Paso de un AFND a AFD . . . . . . . . . . . . . . . . . .

52

4.10. Relaci´ on entre AF, gr. y exp. reg. . . . . . . . . . . . . .

55

4.11. L´ımites para los leng. regulares . . . . . . . . . . . . . . .

65

4.12. Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . .

70

Introducci´ on

Aunque no se puede considerar como una definici´on correcta de aut´omata, est´a muy extendida una idea que confunde el concepto de aut´omata con el de robot. Por lo tanto, se considera err´oneamente que un aut´omata es una m´aquina que imita funciones t´ıpicas de los seres vivos, sobre todo relacionadas con el movimiento, pudiendo incluso ejecutar ciertas ´ordenes. En realidad el concepto de aut´omata es mucho m´as gen´erico, ya que podemos considerarlo como un dispositivo que procesa cadenas de 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. 39

Manuales Uex

4.1.

4.1. Introducci´ on . . . . . . . . . . . . . . . . . . . . . . . . . .

39

ELENA JURADO MÁLAGA

40

´ TEMA 4. AUTOMATAS FINITOS

La teor´ıa de aut´omatas se ocupa de clasificar y estudiar de modo sistem´atico diferentes tipos de m´aquinas abstractas que llevan a cabo un procesamiento secuencial de la informaci´on. Dentro del conjunto de las m´aquinas abstractas que estudiaremos en esta asignatura, los Aut´omatas Finitos constituyen el grupo de m´aquinas m´as sencillas y que, por tanto, tienen un menor poder funcional. El estudio de los aut´omatas finitos se utiliza para modelar el comportamiento de dispositivos mec´anicos y tambi´en de sistemas naturales. Concretamente, permite estudiar procesos que dependen de una historia, es decir, sistemas cuyo comportamiento actual depende del pasado. Tambi´en se aplican en el procesamiento del lenguaje natural, pero en el contexto de esta asignatura su principal aplicaci´on ser´a el reconocimiento de lenguajes regulares (de tipo 3).

4.2.

Definici´ on de Aut´ omata Finito Determinista

Los Aut´omatas Finitos son m´aquinas te´oricas que van cambiando de estado dependiendo de la entrada que reciban. La salida de estos Aut´ omatas est´a limitada a dos valores: aceptado y no aceptado, que pueden indicar si la cadena que se ha recibido como entrada es o no v´alida. Generalmente utilizaremos los Aut´omatas Finitos para reconocer lenguajes regulares, es decir, una palabra se considerar´a v´alida s´olo si pertenece a un determinado lenguaje. Formalmente, un Aut´omata Finito Determinista (AFD) se define como una tupla AF D = (Σ, Q, f, q0 , F ), donde Σ es el alfabeto de entrada Q es el conjunto finito y no vac´ıo de los estados del Aut´omata f es la funci´on de transici´on que indica en qu´e situaciones el Aut´omata pasa de un estado a otro, se define f : Q × Σ −→ Q q0 ∈ Q es el estado inicial F ⊂ Q es el conjunto de estados finales de aceptaci´on (F �= Ø)

Manuales Uex

4.3.

40

Representaci´ on de Aut´ omatas

Existen dos formas de representar un AFD, mediante tablas de transici´ on o mediante diagramas de transici´ on. Introduciremos estas dos representaciones con un ejemplo. Sea el siguiente AFD: Σ = {a, b} Q = {p, q, r} q0 = p F = {q} donde f se define 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

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES ´ DE AUTOMATAS ´ 4.3. REPRESENTACION

41

Tabla de transici´ on El AFD se representar´ıa mediante la siguiente tabla que representa los valores de la funci´on de transici´on. a b → p q r ∗ q q r r r r La flecha indica que p es el estado inicial, y el asterisco indica que q es un estado final de aceptaci´on (en general, pueden aparecer muchos asteriscos aunque s´olo puede aparecer una flecha ya que s´olo hay un estado inicial). Diagrama de transici´ on La figura 4.1 representa de forma gr´afica las transia

a

p

q

b

b

a,b

r

Figura 4.1: Ejemplo de AFD

Aut´ omatas Incompletos A menudo nos encontramos con aut´omatas para los que no est´an definidas todas las transiciones. Las situaciones que no est´an definidas deben ser consideradas como situaciones de error, es decir, si una cadena hace llegar al aut´omata hasta una situaci´on no definida, consideraremos que la cadena no ha sido reconocida por dicho aut´omata.

Manuales Uex

ciones del aut´omata. Los estados finales de aceptaci´on se identifican por estar encerrados en un doble circulo. El estado inicial se destaca con una flecha arrugada. Al analizar el aut´omata del ejemplo es evidente que s´olo considera como cadenas aceptadas aquellas que est´an formadas solamente por a’s. Cualquier cadena que contenga una b har´a que el aut´omata acabe en el estado r , que es un estado muerto. Diremos que un estado est´a muerto si no es un estado final de aceptaci´on y no parte de ´el ninguna transici´on hacia otro estado. Es evidente que si durante el an´alisis de una cadena se llega a un estado muerto, como ya no es posible salir de dicho estado, la cadena no ser´a aceptada por el aut´omata.

41

ELENA JURADO MÁLAGA ´ TEMA 4. AUTOMATAS FINITOS

42

Si deseamos completar un aut´omata (no es imprescindible) bastar´a con a˜ nadir un estado muerto que reciba todas las transiciones que le faltan al aut´ omata incompleto. En la figura 4.2 podemos ver un ejemplo de esta situaci´on. El aut´omata de la izquierda est´a incompleto, pero podemos completarlo trasform´andolo en el de la derecha, al que hemos a˜ nadido el estado r, que es un estado muerto. a

p

q

b

a

p

q a,b

a

b

a a,b

s

s b

r

Figura 4.2: Ejemplo de AF incompleto y completo

Estados accesibles y aut´ omatas conexos Definici´ on 4.1 (Aut´ omata Conexo) Un aut´omata es conexo si todos sus estados son accesibles desde el estado inicial. Definici´ on 4.2 (Parte conexa de un aut´ omata) Si un aut´omata no es conexo, se llama parte conexa del aut´omata al conjunto de estados accesibles desde el estado inicial. Ejemplo 4.1 El aut´omata representado en la figura 4.3 no es conexo y su parte conexa es la formada por los estados p y q y por las transiciones que hay entre ellos. a

a

p

q

b

Manuales Uex

b

42

a

r

Figura 4.3: AF no conexo

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES

4.4. LOS AFD COMO RECONOCEDORES DE LENGUAJES

4.4.

43

Los AFD como reconocedores de lenguajes

Como se ha visto en secciones anteriores, la funci´on de transici´on f ha sido definida de manera que depende de un u ´ nico s´ımbolo del alfabeto de entrada. A continuaci´ on, se ampliar´a esta definici´on de forma que dicha funci´on pueda actuar sobre cadenas de s´ımbolos, es decir, la funci´on indicar´a a qu´e estado pasa el aut´omata ante la llegada de una cadena de s´ımbolos (y no solamente de un u ´ nico s´ımbolo). Por tanto, consideraremos que f : Q × Σ∗ −→ Q. Para conseguir esta ampliaci´on, f se redefine de forma recursiva: f (q, λ) = q

∀q ∈ Q

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

∀a ∈ Σ, x ∈ Σ∗ , q ∈ Q

Ejemplo 4.2 Considerando el aut´omata que aparece en la figura 4.1 la funci´on de transici´on extendida devolver´ıa los siguientes valores: 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 definici´on de la funci´on de transici´on es posible definir formalmente cu´al es el lenguaje aceptado por un AFD. Definici´ on 4.3 (Leng. aceptado por un AFD) El lenguaje que acepta un AFD es el conjunto de palabras definidas sobre Σ que hacen que el aut´omata llegue a un estado final de aceptaci´on L = {x ∈ Σ∗ / f (q0 , x) ∈ F }

Minimizaci´ on de un AFD

En ocasiones nos encontramos con aut´omatas que tienen algunos estados equivalentes, en estos casos esos estados se pueden agrupar de manera que se consigue un aut´omata, equivalente al primero, pero con un menor n´ umero de estados. Se dice que el aut´omata ha sido minimizado. Un concepto diferente al de minimizar un aut´omata es el de simplificar un aut´omata que consiste en eliminar estados muertos o inaccesibles. A continuaci´on se presenta un algoritmo para minimizar un AFD. El objetivo 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 tambi´en son

Manuales Uex

4.5.

43

ELENA JURADO MÁLAGA ´ TEMA 4. AUTOMATAS FINITOS

44

equivalentes entre s´ı. Todos los estados que sean equivalentes entre s´ı se fundir´an en un u ´ nico estado en el aut´omata resultante. Para conseguir este objetivo se construir´a una partici´on de Q, que se ir´a refinando paulatinamente, de manera que finalmente cada elemento de la partici´on agrupar´a estados equivalentes. Inicialmente, se construye una partici´on de Q formada por dos u ´nicos elementos: los estados de aceptaci´on y los que no lo son. Dicha partici´on se ir´a refinando todo lo posible, separando en diferentes elementos a los estados que no son equivalentes. Recordemos que una partici´ on de Q consiste en dividir Q en varios subconjuntos {Gi }1≤i≤n de tal forma que: Gi ∩ Gj = Ø ∀i �= j

y



Gi = Q

1≤i≤n

Algoritmo 4.1 Minimizaci´on de un AFD Input: AF D A = (Σ, Q, f, q0 , F ) Output: AF D A� = (Σ, Q� , f �, q0� , F � ) Begin Partici´on = {G1 , G2 } donde G1 = F y G2 = Q \ F Auxiliar = Ø while Auxiliar �= Partici´on do Auxiliar = Partici´on ∀Gi ∈ Partici´on y ∀a ∈ Σ separar en diferentes grupos a los estados s y t ∈ Gi siempre que f (s, a) ∈ Gj , f (t, a) ∈ Gk siendo j �= k end while Cada elemento Gi de Partici´on se convierte en un estado de Q� , las transiciones ser´an las mismas que define f End

Manuales Uex

Ejemplo 4.3 Se minimizar´a el Aut´omata representado en la figura 4.4. Inicialmente, Partici´on = {G1 , G2 } G1 = {E} G2 = {A, B, C, D} Evidentemente no es posible refinar el grupo G1 . Pero hay que comprobar c´omo se comportan los estados de G2 con los s´ımbolos a y b.

44

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.

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES ´ DE UN AFD 4.5. MINIMIZACION

45

b b

C b

E

a

a

b

A a B

b

D

a

a

Figura 4.4: Aut´omata a minimizar

Partici´on = {G1 , G�2 , G3 } G1 = {E} G�2 = {A, B, C} G3 = {D} Veamos como se comporta G�2 con los s´ımbolos a y b. G�2 A B C

s´ımbolo a → B ∈ G�2 → B ∈ G�2 → B ∈ G�2

G�2 A B C

→ → →

s´ımbolo b C ∈ G�2 D ∈ G3 C ∈ G�2

De nuevo es evidente que el estado B no es equivalente a los otros dos. Es necesario dividir G�2 . Ahora, Partici´on = {G1 , G��2 , G3 , G4 } donde G1 = {E} G��2 = {A, C} G3 = {D} G4 = {B} Volvemos a comprobar el comportamiento de G��2 , el u ´ nico grupo que es posible refinar. s´ımbolo a → B ∈ G4 → B ∈ G4

G��2 A C

s´ımbolo b → C ∈ G��2 → C ∈ G��2

No es posible refinar m´as la partici´on. Es evidente que A y C son equivalentes y, por tanto, deben formar parte del mismo grupo. A continuaci´on aparece el nuevo aut´omata (figura 4.5), equivalente al anterior, que tiene un estado menos, debido al agrupamiento entre A y C(representado por G��2 ). Definici´ on 4.4 (AFD equivalentes) Dos AFD son equivalentes si reconocen el mismo lenguaje. Es evidente que para que esto ocurra deben estar definidos sobre el mismo alfabeto.

Manuales Uex

G��2 A C

45

ELENA JURADO MÁLAGA ´ TEMA 4. AUTOMATAS FINITOS

46

G1

b a

b

G’’2 a G4

b a

b

G3

a

Figura 4.5: Aut´omata minimizado

A veces es f´acil comprobar de manera intuitiva si dos AFD son equivalentes, pero esto no siempre ocurre. Un m´etodo para comprobar si dos AFD son equivalentes consiste en unirlos de manera que formen un u ´nico AFD que, por supuesto, no es conexo. Formalmente, la uni´on de los dos aut´omatas se llevar´ıa a cabo as´ı: Sean A1 = {Σ, Q1 , f1 , q01 , F1 } A2 = {Σ, Q2 , f2 , q02 , F2 } El aut´omata resultante tras la uni´ on ser´ı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 aut´omata uni´ on, ´este se minimiza. Si al concluir el proceso de minimizaci´on, los dos estados iniciales q01 y q02 forman parte del mismo elemento de la partici´on, los aut´omatas originales son equivalentes y el AFD que hemos obtenido es el aut´omata m´ınimo equivalente a ambos.

Manuales Uex

Ejemplo 4.4 Dados los aut´omatas de la figura 4.6, aplicaremos el m´etodo anterior para decidir si son equivalentes o no. Como hemos visto inicialmente, Partici´ on = {G1 , G2 } donde G1 = {q, r, w} G2 = {p, s, v, u} Hay que comprobar c´omo se comportan los elementos de G1 y G2 con los s´ımbolos a y b.

46

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

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES ´ 4.6. AUTOMATAS FINITOS NO DETERMINISTAS(AFND) b

47

b a

p

b a,b s

b

Autómata 1

w

b a

a

a

a

v

q

b

a

r

u Autómata 2

Figura 4.6: ¿Aut´omatas equivalentes?

4.6.

Aut´ omatas Finitos No Deterministas(AFND)

En los aut´omatas deterministas sabemos exactamente cu´al es la transici´on que debemos llevar a cabo ante una determinada situaci´on. Sin embargo, en los no deterministas podemos encontrarnos con varias opciones e, incluso, con λ-transiciones

Manuales Uex

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. Partici´on = {G1 , G�2 , G3 } G1 = {q, r, w} G�2 = {p, v, u} G3 = {s} Veamos c´omo se comporta G�2 con los s´ımbolos a y b. G�2 s´ımbolo a G�2 s´ımbolo b p → q ∈ G1 p → p ∈ G�2 v → w ∈ G1 v → v ∈ G�2 u → w ∈ G1 u → v ∈ G�2 � Es evidente que todos los estados de G2 son equivalentes. Por tanto, no es posible refinar m´as la partici´on. Podemos determinar que los Aut´omatas 1 y 2 son equivalentes ya que los estados iniciales p y v son equivalentes. Adem´as, el aut´omata que se muestra en la figura 4.7 es equivalente a ambos y es m´ınimo. Como el estado G3 es inaccesible se puede eliminar. As´ı el aut´omata quedar´ıa como muestra la figura 4.8.

47

ELENA JURADO MÁLAGA ´ TEMA 4. AUTOMATAS FINITOS

48

G’2

a

b G1

a a, b

G3

G1 = {q, r, w} G’2 = {p, u, v} G3 = {s}

Figura 4.7: Aut´omata m´ınimo

G’2

a

b a

G1

G1 = {q, r, w} G’2 = {p, u, v}

Figura 4.8: Aut´omata simplificado

que se realizan sin considerar el correspondiente s´ımbolo de la cadena de entrada. Para tener en cuenta estas consideraciones, los AFND se definen 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 relaci´on binaria definida sobre Q que indica las λ-transiciones del aut´omata (si pT q ⇒ existe una λ-transici´on desde p hasta q)

Manuales Uex

El resto de los s´ımbolos tiene el mismo significado que en la definici´on de AFD.

48

Ejemplo 4.5 Representaci´on de un AFND utilizando un diagrama de transiciones: ver figura 4.9 Descripci´on del mismo aut´omata mediante una tabla de transiciones:

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES ´ 4.6. AUTOMATAS FINITOS NO DETERMINISTAS(AFND)

→ ∗p q r ∗s

a {q} {p, s} Ø Ø

b Ø {r, p} {s, p} Ø

λ Ø {s} {r, s} {r}

a p

49

q

a,b a, λ

b

λ

s

b

λ

r

λ,b

Figura 4.9: A.F. no determinista

Es evidente que un AFD no es m´as que un caso particular de AFND, es decir, AFD ⊂ AFND. En realidad, un AFD es un AFND que cumple |f (q, a)| = 1 ∀q ∈ Q, ∀a ∈ Σ

T = Id y

 0 0 p 0 0 q   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

Es u ´ til conocer el cierre transitivo de la relaci´on T , que se denota T ∗ . Si pT ∗ q, 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 despu´es todas las potencias de dicha matriz (llega un momento en que las potencias se repiten y no es necesario calcular m´as). As´ı BT 2 = (BT )2 representa las parejas de estados que est´an conectadas por dos λ-transiciones, BT 3 las que est´an conectadas por tres, y as´ı sucesivamente. Por lo tanto Id+BT +BT 2 +BT 3 +. . . es una matriz booleana que representa la relaci´on que deseamos calcular T ∗ . En nuestro ejemplo:

49

ELENA JURADO MÁLAGA ´ 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

Definici´ on 4.5 (λ-clausura) 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 definici´on se puede ampliar a conjuntos � de estados de manera natural. Si R ⊂ Q, entonces λ − clausura(R) = q∈R λ − clausura(q) Aunque para calcular la λ-clausura de un estado se pueden utilizar las matrices booleanas que acabamos de ver, a continuaci´on se describe un algoritmo que tambi´en nos permite calcular la λ-clausura. Algoritmo 4.2 C´alculo de la λ-clausura(q) Output: Clausura ⊂ Q Begin Clausura = {q} Auxiliar = Ø while Auxiliar �= Clausura do Auxiliar = Clausura Clausura = Clausura ∪ {s ∈ Q/∃ λ-transici´on desde p hasta s, siendo p ∈ Auxiliar} end while λ-clausura(q) = Clausura End

Manuales Uex

4.7.

50

Lenguaje aceptado por un AFND

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 final de aceptaci´on. Para llegar a una definici´on formal de este lenguaje ampliaremos la definici´on de la funci´on de transici´on con objeto de que acepte cadenas de caracteres. Es decir, si la funci´on de transici´on de un AFND de define as´ı: f : Q ∗ Σ → 2Q . Definiremos una funci´on de transici´on ampliada, de la siguiente forma f � : Q ∗ Σ∗ → 2Q , donde

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES ´ DE UN AFD Y AFND 4.8. SIMULACION

51

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 definici´on de la funci´on de transici´on, el lenguaje aceptado por el AFND es: L(AF ND) = {x ∈ Σ∗ /f � (q0 , x) ∩ F �= Ø}

4.8.

Simulaci´ on de un AFD y AFND

En esta secci´on veremos sendos algoritmos que nos permitir´ an simular el comportamiento de un AFD y de un AFND. Por tanto, permitir´an determinar si una cadena pertenece o no al lenguaje que reconoce el aut´omata. Algoritmo 4.3 Simulaci´on de un AFD Input: x ∈ Σ∗ Begin c es el primer car´acter de x q = q0 while c �= Fin do q = f (q, c) c es el siguiente car´acter de x 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 simulaci´on de un AFND, supondremos que tenemos implementadas las siguientes funciones: f (R, a) = ∪q∈R f (q, a), siendo R ⊂ Q y a ∈ Σ

La diferencia fundamental entre ambos algoritmos est´a en el significado de q y S. En el algoritmo 4.3, q representa el estado que el aut´omata tiene en cada instante. 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 aut´omata.

Manuales Uex

λ − clausura(R), siendo R ⊂ Q

51

ELENA JURADO MÁLAGA ´ TEMA 4. AUTOMATAS FINITOS

52

Algoritmo 4.4 Simulaci´on de un AFND Input: x ∈ Σ∗ Begin c es el primer car´acter de x S = λ − clausura(q0 ) while c �= Fin do S = λ − clausura(f (S, c)) c es el siguiente car´acter de x 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´ıa de los aut´omatas), es decir, pueden resolver los mismos problemas. Por lo tanto, dado un AFND siempre es posible encontrar un AFD que sea equivalente a ´el. En esta secci´on estudiaremos un m´etodo para resolver este problema. En primer lugar explicaremos de manera gen´erica el paso de un aut´omata a otro, para despu´es ilustrar con un ejemplo este mecanismo de trasformaci´on. 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 ) 3. F � = {C ⊂ Q/C ∩ F �= Ø} � 4. f � (C, a) = {C � ⊂ Q/C � = q∈C λ − clausura(f (q, a))}, siendo C ⊂ Q

Manuales Uex

El aut´omata que se obtiene por este m´etodo no tiene porqu´e ser m´ınimo y podr´ıa llegar a tener, como m´aximo, 2|Q| estados.

52

Ejemplo 4.6 Calcularemos el AFD equivalente al AFND que se muestra en la figura 4.10. Comenzamos calculando el estado inicial q0 que es la λ-clausura del estado inicial del AFND. q0 =λ-clausura(A) = {A,C} A continuaci´on hay que calcular la funci´on de transici´on para el estado q0

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES

4.9. PASO DE UN AFND A AFD

53 b B

a,b

b λ

a

A λ

D

a

a

a C λ

E b

a,b

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

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

Es necesario seguir calculando la funci´ on de transici´on para los nuevos estados que van apareciendo.

53

ELENA JURADO MÁLAGA ´ TEMA 4. AUTOMATAS FINITOS

54

El AFD resultante aparece en la siguiente figura.

q1

a q0

a a

b

q3 b

b

a b

a

a,b q6

q5

b

q2

a q4

b

Figura 4.11: AFD equivalente al de la figura 4.10

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

Manuales Uex

G2 q0 q1

54

s´ımbolo a q4 ∈ G1 q3 ∈ G1 q5 ∈ G1 q3 ∈ G1 q6 ∈ G1

G1 q2 q3 q4 q5 q6

s´ımbolo a → q1 ∈ G2 → q3 ∈ G1

G2 q0 q1

→ → → → →

→ → → → →

s´ımbolo b q2 ∈ G1 q2 ∈ G1 q6 ∈ G1 q2 ∈ G1 q6 ∈ G1

s´ımbolo b → q2 ∈ G1 → q2 ∈ G1

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 definitiva partici´on ser´ıa: {G1 , G�2 , G3 } G1 = {q2 , q3 , q4 , q5 , q6 } G�2 = {q0 } G3 = {q1 }. A continuaci´on se representa el nuevo aut´omata (figura 4.12) que es determinista, m´ınimo y equivalente al AFND del que partimos.

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES ´ ENTRE AF, GR. Y EXP. REG. 4.10. RELACION

55 a, b

b

G’2

G1 a

a, b G3

G1 = {q2, q3, q4, q5, q6} G’2 = { q0} G3 = { q1}

Figura 4.12: AFD m´ınimo equivalente al del figura 4.11

4.10.

Relaci´ on entre Aut´ omatas Finitos, gram´ aticas y expresiones regulares

Como sabemos las gram´aticas regulares generan lenguajes regulares que pueden ser representados mediante expresiones regulares. A su vez, estos lenguajes pueden ser reconocidos por Aut´omatas Finitos. En esta secci´on estudiaremos diferentes m´etodos que nos permitir´an construir unos elementos a partir de otros.

4.10.1.

Construcci´ on de la expresi´ on regular reconocida por un AF

Estudiaremos dos m´etodos diferentes. El m´etodo del sistema de ecuaciones El m´etodo de las funciones recursivas Previamente se define y demuestra la Regla de Inferencia que se aplicar´a en el primer m´etodo como un mecanismo para despejar inc´ ognitas.

Demostraci´ on: 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

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

55

ELENA JURADO MÁLAGA ´ TEMA 4. AUTOMATAS FINITOS

56

Suponemos que R = SR + T y queremos demostrar que R = S ∗ T , para ello comenzaremos demostrando que S ∗ T ⊂ R

Si α ∈ S y β ∈ T (como R = SR + T entonces T ⊂ R y por tanto β ∈ R) ⇒ αβ ∈ SR ⊂ R An´alogamente y aplicando n veces el mismo razonamiento, si α1 , . . . , αn ∈ S y β ∈ T ⇒ α1 . . . αn β ∈ R ⇒ S ∗ T ⊂ R Supongamos que S ∗ T �= R, entonces R = S ∗ T + C

(consideramos que C ∩ S ∗ T = Ø)

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

Eso significa 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 m´ etodo del sistema de ecuaciones Este m´etodo se basa en la definici´on de una serie de e.r. que inicialmente ser´ an las inc´ognitas de un sistema de ecuaciones. Partimos de un AF D = (Σ, Q, f, q0 , F ) y para cada uno de los estados qi ∈ Q definimos una e.r. Xi que representa a todas las cadenas que permiten llegar desde el estado i hasta alg´ un estado final de aceptaci´on. Xi = Ø si F es inaccesible desde qi a ∈ Xi ,

∀a ∈ Σ tal que f (qi , a) ∈ F

Manuales Uex

Todas las cadenas de la forma aXj pertenecen a Xi , si f (qi , a) = qj

56

Teniendo en cuenta estas consideraciones, Xi se define de la siguiente forma: Xi = Σnj=1 aij Xj + af 1 + af 2 + . . . + af m donde f (qi , aij ) = qj y f (qi , af k ) ∈ F . Adem´as, hay que a˜ nadir λ si qi ∈ F . Si aplicamos esta definici´on para todos los estados del AF, conseguimos construir un sistema de n ecuaciones con n inc´ognitas, donde n es el n´ umero de estados del AF. El sistema de ecuaciones se resolver´a sustituyendo unas ecuaciones en otras y aplicando la regla de inferencia para despejar dichas inc´ognitas. En realidad, no es necesario resolver el sistema completo ya que la u ´ nica inc´ognita que nos interesa es X0 (considerando que q0 es el estado inicial) que es la e.r. buscada. Ejemplo 4.7 Sea el siguiente AF

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES ´ ENTRE AF, GR. Y EXP. REG. 4.10. RELACION

b q0

57

b

a q1

a

Definimos el sistema de ecuaciones: � � X0 = bX0 + aX1 + a X1 = aX0 + bX1 + b + λ Aplicamos la regla de inferencia en la 2 ecuaci´on. (considerando que R = X1 , S = b y T = aX0 + b + λ) X1 = aX0 + bX1 + b + λ = b∗ (aX0 + b + λ) Sustituimos X1 en la primera ecuaci´on. 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 ecuaci´on. (ahora, R = X0 , S = b + ab∗ a y T = ab∗ ) X0 = (b + ab∗ a)X0 + ab∗ = (b + ab∗ a)∗ ab∗

Para que este m´etodo pueda llevarse a cabo sin ambig¨ uedades es necesario numerar los estados a partir del 1, es decir, Q = {q1 , . . . , qn }. Tambi´en en este caso definiremos una serie de e.r.(en este caso, de forma recursiva) que inicialmente ser´an inc´ognitas que es necesario calcular. k Cada e.r. Rij representar´a a las cadenas que permiten llegar del estado qi al 0 estado qj pasando exclusivamente por los estados q1 , . . . , qk . Definiremos Rij como el conjunto de cadenas (en este caso, s´ımbolos) que nos llevar´an directamente del estado 0 qi al estado qj . Las e.r del tipo Rij se definen de forma directa, mientras que las e.r. k Rij , k ≥ 1 se definen de forma recursiva. � si i �= j {a ∈ Σ/f (qi , a) = qj } 0 Rij = {a ∈ Σ/f (qi , a) = qj } ∪ λ si i = j k k−1 k−1 k−1 ∗ k−1 = Rij + Rik (Rkk ) Rkj , Rij

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

k , Rij

la e.r. buscada es:

k≥1

n R1f 1

n + R1f + . . . donde q1 es el 2

Manuales Uex

El m´ etodo de las funciones recursivas

57

ELENA JURADO MÁLAGA ´ TEMA 4. AUTOMATAS FINITOS

58

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

q1

R11 R12 R21 R22

k=0 λ a Ø b+λ

b

a q2

k=1 λ a Ø b+λ

k=2 λ ab∗ Ø b∗

Las dos u ´ ltimas columnas se han calculado mediante la f´ormula recursiva vista 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 (R11 ) R11 = Ø + Øλ∗ λ = Ø R21 1 0 0 0 ∗ 0 R22 = R22 + R21 (R11 ) R12 = (b + λ) + Øλ∗ a = b + λ 2 1 1 1 ∗ 1 = R11 + R12 (R22 ) R21 = λ + a(b + λ)∗ Ø = λ R11 2 1 1 1 ∗ 1 = R12 + R12 (R22 ) R22 = a + a(b + λ)∗ (b + λ) = a + ab∗ = ab∗ R12 2 1 1 1 ∗ 1 R21 = R21 + R22 (R22 ) R21 = Ø + (b + λ)(b + λ)∗ Ø = Ø 2 1 1 1 ∗ 1 = R22 + R22 (R22 ) R22 = (b + λ) + (b + λ)(b + λ)∗ (b + λ) = b∗ R22 Teniendo en cuenta que s´olo hay un estado final de aceptaci´on q2 , la e.r. que 2 estamos buscando ser´a R12 = ab∗

4.10.2.

Construcci´ on del AF que reconoce una expresi´ on regular

Manuales Uex

Estudiaremos dos m´etodos que nos ayudar´an a construir un aut´omata que reconoce el lenguaje que representa una e.r. dada. El primero construye un AFND mientras que el segundo permite construir un AFD.

58

Paso de expresi´ on regular a AFND De la misma forma que las e.r. se definieron de forma recursiva, este m´etodo para construir el AFND, que est´a basado en la definici´on de las e.r., tambi´en puede considerarse recursivo. Para cada tipo de e.r. construiremos un AFND, de esta manera diferentes aut´omatas pueden ensamblarse para construir otro m´as complejo.

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES ´ ENTRE AF, GR. Y EXP. REG. 4.10. RELACION

1 - e.r. = ∅

59

q1

2 - e.r. = λ

qf

q1

3 – e.r. = a ∈ Σ

a

q1

qf

q1



λ

qf1

λ 4 – e.r. = α + β

qf

q0 λ

5 – e.r. = α β



q1



q2

λ

qf1

λ qf2

q2



qf

λ

q1 6 – e.r. = α∗



qf1 λ

λ q0

λ

qf

Figura 4.13: Paso de e.r. a AFND

Paso de expresi´ on regular a AFD Introduciremos este m´etodo mediante un ejemplo con la e.r. (a + b)*abb. Para desarrollar este m´etodo es necesario etiquetar con un n´ umero a cada uno de los s´ımbolos que componen la e.r. A estas etiquetas las llamaremos posiciones. Adem´as, a˜ nadiremos el s´ımbolo # a la derecha de la e.r. para indicar el final de las

Manuales Uex

En la figura 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 aut´omatas que reconocen a las e.r. α y β respectivamente.

59

ELENA JURADO MÁLAGA ´ 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 definir su conjunto siguiente que estar´a formado por las posiciones que pueden seguir a una dada en cualquier palabra 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 c´omo afectan a las diferentes posiciones. Para este ejemplo, los valores de estos 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´a un conjunto de posiciones. Los estados finales de aceptaci´on ser´an aquellos que contienen a la posici´ on asociada al s´ımbolo # (en el ejemplo, la posici´on 6). Se calculan simult´aneamente estos estados y las transiciones 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 posici´ on i. En nuestro caso: simb(1) = {a} simb(2) = {b}

simb(3) = {a} simb(4) = {b}

simb(5) = {b} simb(6) = Ø

Manuales Uex

Adem´as, pp representa a las primeras posiciones de la e.r., es decir, las posiciones por las que puede comenzar cualquier palabra representada por la e.r. En este ejemplo, pp = {1, 2, 3} Las siglas EM y ENM significan Estados Marcados y Estados No Marcados respectivamente, y representan a dos conjuntos de estados del aut´omata que se est´a construyendo. Estos conjuntos se utilizan para saber si un estado ha sido marcado o no. Marcar un estado significa procesarlo, es decir, calcular las transiciones que parten de dicho estado. Cuando un estado se procesa pasa del conjunto ENM al conjunto EM. La construcci´on del aut´omata terminar´a cuando no quede ning´ un estado sin marcar. Veamos como se aplicar´ıa el algoritmo 4.5 al ejemplo con el que estamos trabajando. Comenzamos definiendo el estado inicial q0 = pp = {1, 2, 3}. Inicialmente, EM = Ø y ENM = {q0 } A continuaci´on hay que calcular la funci´on de transici´on para el estado q0

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 funci´on de transici´on para los nuevos estados que van apareciendo.

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES ´ ENTRE AF, GR. Y EXP. REG. 4.10. RELACION

61

Algoritmo 4.5 Construcci´on del AFD a partir de la e.r. Input: x ∈ Σ∗ Begin ENM = pp EM = Ø while ENM �= Ø do Pasar T desde ENM hasta EM for all � a ∈ Σ do R = ∀i∈T sig(i) tal que simb(i) = a if R �= Ø and R ∈ / (EM ∪ ENM) then a˜ nadir R a ENM 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 figura 4.14 representa gr´aficamente al aut´omata construido. Como se puede observar, el u ´ nico estado final de aceptaci´on es q3 . a a

q1 a b

a

q0

b q2

b

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

Manuales Uex

b

q3

61

ELENA JURADO MÁLAGA ´ TEMA 4. AUTOMATAS FINITOS

62

4.10.3.

Relaci´ on entre A.F. y gram´ aticas regulares

En este apartado, se estudiar´an m´etodos, similares entre si, para construir el AF que reconoce al lenguaje generado por una gram´atica regular (distinguiendo si es lineal por la izquierda o por la derecha). De forma an´aloga se estudiar´an m´etodos para construir gram´aticas que generen el lenguaje que reconoce un AF dado. Para poder definir una relaci´on entre los AF’s y las gr. regulares estableceremos, en primer lugar, las siguientes correspondencias: Cada estado del aut´omata se corresponder´a con un s´ımbolo no terminal de la gram´atica. Cada transici´on del aut´omata se corresponder´a con una producci´on de la gram´atica. Paso de GLD a AFND En este caso: 1. El estado inicial del aut´omata se corresponder´a con el s´ımbolo inicial de la gram´atica. 2. Definiremos un estado final de aceptaci´on P que no se corresponde con ning´ un s´ımbolo no terminal de la gram´atica. 3. A cada producci´on de la gram´atica le corresponde una transici´on en el aut´omata seg´ un el siguiente esquema:

A ::= aB

Manuales Uex

S ::= λ

62

a

A

A ::= a

A

S

P

a

B

λ P

Ejemplo 4.9 En la figura 4.15 se muestra la obtenci´on de un aut´omata finito a partir de una gram´atica lineal por la derecha.

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES ´ ENTRE AF, GR. Y EXP. REG. 4.10. RELACION

A

1

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

S

63

0

1

P

1

0 B

0, 1

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 final dan lugar a dos producciones diferentes como indica la siguiente figura. a

A

Obtenemos dos producciones: A ::= aB y A ::= a

B

Ejemplo 4.10 En la figura 4.16 se muestra la obtenci´on de una gram´atica lineal por la derecha a partir de un aut´omata finito. La gram´atica ha sido posteriormente simplificada ya que el s´ımbolo P no es un estado generativo. 1

S

A 0

1 P

S ::= 1A | 1P |1 A ::= 0S

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

Paso de GLI a AFND Si trabajamos con GLI’s, debemos tener en cuenta que: 1. El estado final del aut´omata se corresponder´a con el s´ımbolo inicial de la gram´atica.

Manuales Uex

Figura 4.16: Ejemplo de paso de AFND a GLD

63

ELENA JURADO MÁLAGA ´ TEMA 4. AUTOMATAS FINITOS

64

2. Definiremos un estado inicial llamado P que no se corresponde con ning´ un s´ımbolo no terminal de la gram´atica. 3. A cada producci´on de la gram´atica le corresponde una transici´on en el Aut´omata seg´ un el siguiente esquema: a

P

A ::= a

A ::= Ba

a

B

S ::= λ

A

A

λ

P

S

Ejemplo 4.11 En la figura 4.17 se muestra el aut´omata obtenido a partir de una gram´atica lineal por la izquierda.

1

A

0

P

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

1 S 0

0

1 B

Figura 4.17: Ejemplo de paso de GLI a AFND

Manuales Uex

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 finales, en ese caso las transiciones que llevan a un estado final dan lugar a dos producciones seg´ un se indica en el siguiente esquema.

64

B

a A

• Si A es el único estado final, obtenemos la producción S ::= Ba • Si hay varios estados finales, obtenemos las producciones A ::= Ba y S ::= Ba

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES 4.11. L´IMITES PARA LOS LENG. REGULARES

65

Ejemplo 4.12 En la figura 4.18 se muestra la gram´atica lineal por la izquierda obtenida a partir de un aut´omata finito.

0

B

1

D

A 1

C

D ::= B1

G ::= E0 |G0

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

S ::= B1 | C0

F 1

0 1

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

1

0

E

0

0

G

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

0

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 secci´on estudiaremos dos resultados, el lema del bombeo y el teorema de Myhill-Nerode que nos permitir´an establecer l´ı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 suficiente para demostrar que no es regular. Sin embargo, en ning´ un caso este lema servir´a para demostrar que un lenguaje es regular.

1. |v| ≥ 1 2. |uv| ≤ n 3. ∀i ≥ 0 ⇒ uv i w ∈ L

Manuales Uex

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 verifican:

65

ELENA JURADO MÁLAGA ´ 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 demostraci´on se realizar´a por el m´etodo de reducci´ on al absurdo. Es decir, supondremos que L es regular, si partiendo de esta hip´ otesis llegamos a una situaci´on absurda habremos comprobado que nuestra suposici´on inicial 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 s´olo se bombear´ıan a’s con los que conseguir´ıamos cadenas con m´as a’s que b’s, que no pertenecer´ıan a L. En el segundo caso ocurrir´ıa lo contrario ya que s´olo bombear´ıamos b’s. En el tercer caso bombeamos a’s y b’s simult´aneamente, por tanto ser´ıa posible obtener el mismo n´ umero de a’s que de b’s. Sin embargo, las cadenas obtenidas contendr´ıan subcadenas del tipo ababab o aabbaabbaabb, de cualquier forma estas palabras nunca pertenecer´ıan a L. No existe ninguna otra forma 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´a saber si un lenguaje es o no regular. Adem´as y en el caso de que el lenguaje sea regular, la demostraci´on del teorema nos muestra un m´etodo para construir el AFD m´ınimo que reconoce a dicho lenguaje. Antes de enunciar el teorema ser´a necesario conocer algunas definiciones acerca de las relaciones binarias. Consideraremos que R es una relaci´on de equivalencia definida sobre el conjunto X.

Manuales Uex

Definici´ on 4.6 (Relaci´ on invariante por la derecha) Se dice que R es invariante por la derecha respecto a una operaci´on ◦ definida sobre X, si se cumple que:

66

si xRy ⇒ ∀z ∈ X, x ◦ zRy ◦ z Definici´ on 4.7 (Relaci´ on de ´ındice finito) Se dice que R es de ´ındice finito si el cardinal de su conjunto cociente es finito, es decir, si el n´ umero de clases de equivalencia que define R es finito.

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES 4.11. L´IMITES PARA LOS LENG. REGULARES

67

Teorema 4.2 (Teorema de Myhill-Nerode) Dado un lenguaje L definido sobre un alfabeto Σ, las siguientes afirmaciones son equivalentes: 1. L ⊂ Σ∗ es regular 2. L es la uni´on de algunas clases de equivalencia de una relaci´on de equivalencia RM definida sobre Σ∗ que es de ´ındice finito e invariante por la derecha respecto a la concatenaci´on. 3. A partir de L se puede definir una relaci´on binaria RL sobre Σ∗ , de la siguiente 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. Se cumple que la relaci´on RL es una relaci´on de equivalencia, de ´ındice finito e invariante por la derecha respecto a la concatenaci´on. Demostraci´ on. Para demostrar este teorema comprobaremos en primer lugar que 1 ⇒ 2, despu´es que 2 ⇒ 3 y finalmente 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 aut´omata podemos definir una relaci´on binaria sobre Σ∗ a la que llamaremos RM : xRM y ⇐⇒ f (q0 , x) = f (q0 , y)

Es evidente que esta relaci´on es de equivalencia y adem´as tendremos tantas clases de equivalencia como estados tenga el aut´omata, por tanto, ser´a una relaci´on de ´ındice finito. Veamos que RM es de invariante por la derecha respecto a la concatenaci´on. Si 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 est´an relacionadas con x. Utilizando esta notaci´on y teniendo en cuenta la definici´on de RM es evidente que L = {∪[x]/f (q0 , x) ∈ F }. Es decir, L es la uni´on de varias clases de equivalencia de RM , concretamente, tantas como estados finales tenga el aut´omata.

Manuales Uex

∀x, y ∈ Σ∗

67

ELENA JURADO MÁLAGA ´ TEMA 4. AUTOMATAS FINITOS

68

2 =⇒ 3 Suponemos que L es la uni´on de varias clases de equivalencia definidas por una relaci´on a la que llamaremos RM que es de ´ındice finito e invariante por la derecha. Por otra parte, se ha definido la relaci´on RL de la siguiente forma: xRL y ⇐⇒ ∀z ∈ Σ∗

xz ∈ L ⇔ yz ∈ L

Es evidente que RL es una relaci´on 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 continuaci´on que xRM y ⇒ xRL y. Si esto ocurre el n´ umero de clases de equivalencia que genera RM ser´a mayor o igual que el n´ umero de clases de RL , lo que permitir´a afirmar que RL es de ´ındice finito. � 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. 3 =⇒ 1 Suponemos que RL es de ´ındice finito e invariante por la derecha. Para 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 finito porque RL es de ´ındice finito. f est´a bien definido porque si [x] = [y] ⇒ [xa] = [ya]∀a ∈ Σ ya que RL es invariante por la derecha respecto a la concatenaci´on ⇒ f ([x], a) = f ([y], a) Este aut´omata finito que se ha definido reconoce a L ya que x ∈ L ⇐⇒ [x] ∈ F ⇐⇒ f (q0 , x) = f ([λ], x) = [x] ∈ F

Manuales Uex

Como hemos demostrado que L es reconocido por un Aut´omata Finito, podemos asegurar que L es un lenguaje regular. �

68

Ejemplo 4.14 Utilizando el teorema de Myhill-Nerode construiremos el AFD m´ınimo 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

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES 4.11. L´IMITES PARA LOS LENG. REGULARES [1] = [λ]? ⇐⇒ ∀z f (q1 , 0) = [10]

69

1z ∈ L ⇔ z ∈ L? Falso =⇒ f (q0 , 1) = [1] = q1 f (q1 , 1) = [11]

[10] = [λ]? ⇐⇒ ∀z

10z ∈ L ⇔ z ∈ L? Falso

[10] = [1]? ⇐⇒ ∀z

10z ∈ L ⇔ 1z ∈ L? Cierto =⇒ f (q1 , 0) = [10] = q1

[11] = [λ]? ⇐⇒ ∀z

11z ∈ L ⇔ z ∈ L? Falso

[11] = [1]? ⇐⇒ ∀z

11z ∈ L ⇔ 1z ∈ L? Falso =⇒ f (q1 , 1) = [11] = q2

f (q2 , 0) = [110]

f (q2 , 1) = [111]

[110] = [11]? ⇐⇒ ∀z

110z ∈ L ⇔ 11z ∈ L? Cierto =⇒ f (q2 , 0) = q2

[111] = [11]? ⇐⇒ ∀z

111z ∈ L ⇔ 11z ∈ L? Cierto =⇒ f (q2 , 1) = q2

La siguiente figura muestra el aut´omata que se acaba de construir. 0 q0

0 1

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

0,1 1

q1 q1 =[1]=[01]

q2

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

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´ umero infinito de clases de equivalencia para la relaci´on RL , concretamente [a] �= [a2 ] �= [a3 ] �= . . . Bastar´a demostrar que [ai ] �= [aj ] cuando i �= j, o lo que es lo mismo, que / L aj cuando i �= j. ai R / L =⇒ ai R / L aj Sea z = bj entonces aj z ∈ L y sin embargo ai z ∈

Manuales Uex

Es importante destacar que el estado q0 = [λ] = [0] representa a todas las cadenas binarias que no tienen ning´ un 1, el estado q1 = [1] = [10] representa a las cadenas binarias que tienen un solo 1 y, por tanto, pertenecen al lenguaje (por ese motivo es el u ´ nico estado final de aceptaci´on), y el estado q2 = [11] representa a las cadenas que tienen m´as de un 1. Es evidente que q0 , q1 y q2 o, lo que es lo mismo, las clases de equivalencia [λ], [1] y [11] constituyen una partici´on del lenguaje universal (0 + 1)∗ .

69

ELENA JURADO MÁLAGA ´ TEMA 4. AUTOMATAS FINITOS

70

4.12.

Problemas

4.1 Minimizar el siguiente aut´omata 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´e lenguajes reconocen los siguientes aut´omatas? A

1

0 1

0,1

0

B 0

1 1

0

1

0

0

1 C

1

0,1 0 1

D

0 0

Manuales Uex

1

70

0,1

1 0

1

4.4 A partir de los siguiente Aut´omatas Finitos:

0,1

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES

4.12. PROBLEMAS

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 aut´omatas. Calcular las expresiones regulares que describen dichos lenguajes utilizando el m´etodo del sistema de ecuaciones. → A B ∗ C ∗ D

a b {B, D} − C − − − − A

71 λ − A − −



4.5 Utilizando el m´etodo de los conjuntos siguientes calcular el AFD que reconoce a cada uno de los siguientes lenguajes: 1. ab∗ c + a∗ c∗ 2. b∗ (a + bc) 3. a(bc)∗ + ab(cb)∗ cd

Manuales Uex

4.6 Utilizando el teorema de Myhill-Nerode construir un AFD m´ınimo que reconozca los lenguajes L1 = (ab)∗ y L2 = ab∗

71

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES

Tema 5 Gram´ aticas Independientes del Contexto y Aut´ omatas de Pila

5.1. Definici´ on de G.I.C. . . . . . . . . . . . . . . . . . . . . . .

74

5.2. Aut´ omatas de Pila . . . . . . . . . . . . . . . . . . . . . . .

74

´ 5.3. Arboles de derivaci´ on . . . . . . . . . . . . . . . . . . . . .

77

5.4. Reconocimiento descendente . . . . . . . . . . . . . . . . .

80

5.5. Reconocimiento ascendente . . . . . . . . . . . . . . . . .

87

5.6. Propiedades de los L.I.C. . . . . . . . . . . . . . . . . . . .

93

5.7. Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . .

95

En este tema se estudiar´an las Gram´aticas Independientes del Contexto (GIC), los lenguajes que ´estas definen, llamados lenguajes independientes del contexto (LIC), y los aut´omatas que reconocen a estos u ´ ltimos, los Aut´omatas de Pila (AP). Considerando la jerarqu´ıa de Chomsky, tambi´en se les llama respectivamente gram´aticas y lenguajes de tipo 2. Estas gram´aticas, igual que ocurre con las regulares, tienen una gran importancia pr´actica en la definici´on de lenguajes de programaci´on, ya que nos permiten formalizar el concepto de sintaxis, de la misma forma que los Aut´omatas de Pila nos permitir´an modelar el funcionamiento del analizador sint´actico, una de las partes fundamentales de un compilador. An´alogamente, los lenguajes regulares y los Aut´omatas Finitos permiten representar los aspectos l´exicos y el an´alisis l´exico, respectivamente, de los lenguajes de programaci´on. 73

Manuales Uex

Contenido

73

ELENA JURADO MÁLAGA ´ TEMA 5. G.I.C Y AUTOMATAS DE PILA

74

5.1.

Definici´ on de G.I.C.

En las Gram´aticas Independientes del Contexto las producciones son menos restrictivas que en las gram´aticas regulares. En este caso, la parte izquierda de la producci´on tambi´en est´a formada por un u ´ nico s´ımbolo no terminal, pero no hay restricciones respecto a la parte derecha de la producci´ on. Por lo tanto, las producciones son de la forma: A ::= v donde A ∈ ΣN ,

v ∈ Σ∗

En este tipo de gram´aticas, la conversi´on de A en v se realiza independientemente del contexto en el que se encuentre A, de ah´ı su nombre.

5.2.

Aut´ omatas de Pila

De la misma forma que cualquier lenguaje regular puede ser reconocido por un Aut´omata Finito, cualquier lenguaje independiente del contexto puede ser reconocido por un Aut´omata de Pila. Sin embargo, en este caso la equivalencia es menos satisfactoria ya que los Aut´omatas de Pila no son dispositivos deterministas y el conjunto de los Aut´omatas de Pila Deterministas s´olo permite reconocer a un subconjunto de los lenguajes de tipo 2. Afortunadamente, este subconjunto suele ser suficiente para definir los aspectos m´as comunes de cualquier lenguaje de programaci´on. En esencia, un Aut´omata de Pila es un Aut´omata Finito al que se le ha incorporado memoria que se gestiona como una pila, con lo que se aumenta su poder funcional. El dispositivo ser´a no determinista y tendr´a un n´ umero finito de movimientos (o transiciones) a elegir en cada situaci´on. Hay dos tipos de movimientos: 1. Dependiendo del estado actual del Aut´omata, del s´ımbolo que hay en la cima de la pila y del que hay en la cadena de entrada, habr´a que elegir entre un conjunto de posibles transiciones. Cada transici´on est´a formada por un posible cambio de estado y por una cadena (puede ser λ) que reemplazar´a al s´ımbolo que ocupa la cima de la pila. Despu´es de realizar un movimiento se avanza en el an´alisis de la cinta de entrada.

Manuales Uex

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 an´alisis de dicha cadena no avanza.

74

Definiremos formalmente un Aut´omata de Pila de la siguiente forma: AP = {Q, Σ, f, Γ, q0 , z0 , F } Q es el conjunto finito de estados

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES ´ 5.2. AUTOMATAS DE PILA

75

Σ 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 finales f : Q × (Σ ∪ λ) × Γ −→ P(Q × Γ∗ )

f (q, a, z) = {(p1 , ψ1 ), (p2 , ψ2 ), . . . , (pn , ψn )} Estas transiciones indican que si el Aut´omata de Pila se encuentra en el estado q, recibe como entrada el s´ımbolo a y z es el s´ımbolo que se encuentra en la cima de la pila, el Aut´omata puede pasar al estado p1 y reemplazar en la pila el car´acter z por la cadena ψ1 , o bien elegir cualquiera de las otras posibilidades. Para describir formalmente la configuraci´on de un Aut´omata de Pila en un instante dado, utilizamos la Descripci´ on Instant´ anea(DI). La DI estar´a definida por una tupla (q, w, γ) donde q es el estado actual del Aut´omata, w es la cadena de s´ımbolos de entrada que a´ un queda por procesar, y γ es la cadena de los s´ımbolos almacenados en la pila (el car´acter m´as a la izquierda de γ ser´a la cima de la pila). Utilizaremos la notaci´on (q, aw, zγ) −→ (p, w, βγ) cuando (p, β) ∈ f (q, a, z). La ∗ notaci´on (q, w, γ) −→ (p, w �, β) indica que se ha pasado de la primera situaci´on a la segunda en un n´ umero indeterminado de transiciones. Lenguaje aceptado por un Aut´ omata de Pila El lenguaje aceptado por un Aut´omata de Pila se puede definir de dos formas diferentes y equivalentes: 1. De forma an´aloga a los Aut´omatas Finitos, es decir, el lenguaje aceptado es el conjunto de entradas que hacen que el Aut´omata llegue a un estado final. ∗ L(M) = {w ∈ Σ∗ /(q0 , w, z0 ) −→ (p, λ, γ), p ∈ F }

∗ N(M) = {w ∈ Σ∗ /(q0 , w, z0) −→ (p, λ, λ)}.

Dado un lenguaje independiente del contexto siempre es posible encontrar un Aut´omata de Pila con estados finales y un Aut´omata de Pila Vac´ıa que reconozcan a dicho lenguaje.

Manuales Uex

2. El lenguaje est´a formado por el conjunto de entradas que vac´ıan la pila. En este caso decimos que es un Aut´omata de Pila Vac´ıa. Para esta definici´on el conjunto F es irrelevante y podemos considerar que F = Ø.

75

ELENA JURADO MÁLAGA ´ TEMA 5. G.I.C Y AUTOMATAS DE PILA

76

Ejemplo 5.1 Construiremos un Aut´omata de Pila con estados finales para el lenguaje L = {0n 1n /n ≥ 0}, generado por la GIC S ::= 0S1|λ

La estrategia ser´a la siguiente: mientras se procesan los primeros caracteres de la cadena (que deber´an ser 0’s), ´estos se almacenan en la pila. Cuando se llega a la segunda mitad de la cadena y comienzan a llegar 1’s, se pasa a otro estado cuya misi´on ser´a eliminar un 0 de la pila por cada 1 que se procese. Cuando se termine de procesar la cadena, la pila deber´a estar vac´ıa (en realidad, s´olo almacenar´a el s´ımbolo inicial de la pila z0 ). El AP se define: Q = {q0 , q1 , q2 } Σ = {0, 1} Γ = {z0 , 0} F = {q0 }

Y la funci´on de transici´on se define de la siguiente forma: 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 , λ)

en el estado q1 se a˜ naden caracteres a la pila en el estado q2 se eliminan caracteres de la pila

En este caso el estado inicial tambi´en es estado final debido a que λ ∈ L. Cualquier situaci´on que no haya sido definida indicar´a un error. Por ejemplo, si la cadena comienza con 1 el aut´omata detectar´a el error, n´otese que la funci´on de transici´on no est´a definida para la situaci´on (q0 , 1, z0 ).

Ejemplo 5.2 Construiremos un Aut´omata de Pila Vac´ıa para el lenguaje L = {w2w −1/w ∈ (0 + 1)∗ } generado por la gram´atica

Manuales Uex

S ::= 0S0 | 1S1 | 2

76

La estrategia ser´a la siguiente: cuando se est´a procesando la primera mitad de la cadena (antes de recibir el 2), los caracteres se almacenan en la pila. Cuando comienza a llegar la segunda mitad de la cadena, cada car´acter debe coincidir con el que est´a en 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 vac´ıa. El AP se define Q = {q0 , q1 }

La funci´on de transici´on ser´a:

Σ = {0, 1, 2}

Γ = {z0 , 0, 1}

TEORÍA DE AUTÓMATAS 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 funci´on se puede simplificar utilizando como comod´ın * que 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 Aut´omata de Pila Vac´ıa para el lenguaje 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 cu´al es el punto medio de la cadena, momento en el que ser´ıa necesario cambiar 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 aut´omata pueda cambiar de estado. La estrategia ser´a similar a la del ejemplo anterior. El AP se define Q = {q0 , q1 } Σ = {0, 1} Γ = {z0 , 0, 1} La funci´on de transici´on ser´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 , λ)

idem

la pila queda vac´ıa

´ Arboles de derivaci´ on

El a´rbol de derivaci´on, al representar las producciones utilizadas para generar una palabra, est´a indicando adem´as su estructura, lo que resulta determinante para entender su significado. Por esa raz´on, en los mecanismos para reconocer lenguajes independientes del contexto no es suficiente con indicar si una cadena determinada pertenece o no al lenguaje, tambi´en es muy importante que el reconocedor construya el ´arbol de derivaci´on de dicha cadena.

Manuales Uex

5.3.

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

77

ELENA JURADO MÁLAGA ´ TEMA 5. G.I.C Y AUTOMATAS DE PILA

78

Cada nodo interno del ´arbol ser´a un s´ımbolo no terminal de la gram´atica mientras que las hojas ser´an los s´ımbolos terminales. Una producci´on como A ::= X1 . . . Xn se representar´a como un sub´arbol cuyo nodo padre es A siendo sus hijos los s´ımbolos X1 , . . . , Xn . Si en un paso de la construcci´on del ´arbol, se aplica una producci´on al s´ımbolo no terminal que est´a situado m´as a la izquierda del ´arbol, se dice que es una derivaci´on por la izquierda. La misma definici´on se aplica a derivaci´on por la derecha.

5.3.1.

Ambig¨ uedad.

Una gram´atica es ambigua cuando es posible construir dos o m´as ´arboles de derivaci´on diferentes para una misma palabra. El problema de la ambig¨ uedad es muy complejo ya que no existe ning´ un algoritmo que permita reconocer si una gram´atica es o no ambigua y, en el caso de que lo sea, tampoco existe ning´ un algoritmo que permita eliminar dicha ambig¨ uedad (ni siquiera es posible eliminarla en todos los casos). Los lenguajes independientes del contexto para los cuales todas las GIC que los generan son ambiguas, se dice que tienen una ambig¨ uedad inherente.

Manuales Uex

Ejemplo 5.4 (Gram´ atica ambigua) Un ejemplo cl´asico de gram´atica ambigua se presenta en la definici´on de las expresiones aritm´eticas que aparecen com´ unmente en los lenguajes de programaci´on. El siguiente ejemplo simplificado permite definir expresiones en las que intervienen las cuatro operaciones aritm´eticas b´asicas con operandos que pueden ser identificadores (id) o constantes (cte). Llamaremos a esta gram´atica G Exp 0. ΣT = {id, cte, (, ), +, −, ∗, /} ΣN = {< expre >, < op >} S =< expre >

78

 < expre >::=< expre >< op >< expre >     |(< expre >)     |id    |cte P =  < op >::= +    |−     |∗    |/

                      

Es f´acil demostrar que esta gram´atica es ambigua construyendo dos ´arboles diferentes para generar la misma expresi´on, concretamente id + cte * id

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES ´ ´ 5.3. ARBOLES DE DERIVACION

79

<expre> <expre>

<expre>

<expre>

<expre>



<expre>

id

+

cte

*

id

<expre>

id

<expre>



+

<expre>



<expre>

cte

*

id

Figura 5.1: Ejemplo de ambig¨ uedad

Analizando la figura 5.1 es f´acil comprobar que la ambig¨ uedad est´a provocada por la ausencia de una jerarqu´ıa entre los operadores. En el ´arbol de la izquierda la operaci´on suma, entre los dos primeros operandos, se lleva a cabo antes que la multiplicaci´on. Sin embargo, en el ´arbol de la derecha se comenzar´ıa multiplicando los dos u ´ ltimos operandos y al resultado de esta operaci´on se le sumar´ıa el valor del primer operando. Es evidente que a pesar de que la expresi´on es correcta, la utilizaci´on de cada ´arbol generar´ıa en cada caso resultados diferentes. Para resolver este caso de ambig¨ uedad hay que imponer una jerarqu´ıa entre los operadores. Como suele ser habitual consideraremos que la multiplicaci´on y la divisi´on tienen una prioridad m´as alta que la suma y la resta. Si aparecen varias operaciones con la misma prioridad se ejecutar´an de izquierda a derecha, aunque en este caso el resultado de la expresi´on siempre ser´ıa el mismo. Para definir la jerarqu´ıa se van a introducir en la gram´atica nuevos s´ımbolos no terminales: < termino > y < op − adt > estar´an asociados a los operadores aditivos suma y resta.

As´ı llegamos a la siguiente gram´atica, equivalente a G Exp 0: ΣN = {< expre >, < termino >, < f actor >, < op − adt >, < op − mult >} S =< expre >

Manuales Uex

< f actor > y < op − mult > estar´an asociados a los operadores multiplicaci´ on y divisi´on.

79

ELENA JURADO MÁLAGA ´ TEMA 5. G.I.C Y AUTOMATAS DE PILA

80

  < expre >::=< expre >< op − adt >< termino >         | < termino >         < termino >::=< termino >< op − mult >< f actor >         | < f actor >           < f actor >::= (< expre >) |id P =     |cte         < op − adt >::= +         |−         < op − mult >::= ∗       |/

Con esta nueva gram´atica, a la que llamaremos G Exp 1, la expresi´on anterior tendr´ıa un u ´ nico a´rbol de derivaci´on que se representa en la figura 5.2.

<expre> <expre>







id



+

cte

*

id

Figura 5.2: Nuevo ´arbol de derivaci´on

Este a´rbol representa la estructura de la expresi´on id + cte * id, obligando a que la multiplicaci´on se realice antes que la suma.

Manuales Uex

5.4.

80

Reconocimiento descendente

En general, un reconocedor es un algoritmo que recibe como entrada una palabra w ∈ Σ+ ımbolos de izquierda a derecha e intenta construir un a´rbol T , examina sus s´ de derivaci´on para dicha palabra. Con el proceso de construcci´on del ´arbol se obtiene adem´as la estructura de la palabra, las producciones gramaticales que han de aplicarse y el orden en el que deben utilizarse.

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES

5.4. RECONOCIMIENTO DESCENDENTE

81

Un reconocedor descendente o analizador sint´actico descendente es un m´etodo de reconocimiento de palabras de un LIC que se caracteriza porque construye el ´arbol de derivaci´on de cada palabra de manera descendente, es decir, desde la ra´ız hasta las hojas. A continuaci´on se describir´a un reconocedor descendente llamado LL(1) (LeftLeft(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 derivaci´on por la izquierda, y el 1 indica que s´olo es necesario un car´acter para que el reconocedor decida qu´e producci´on debe utilizar en la construcci´on del ´arbol. Como paso previo a la descripci´on de los reconocedores LL(1) estudiaremos algunos aspectos de las GIC que es importante detectar y evitar para el correcto funcionamiento del m´etodo.

5.4.1.

Simplificaci´ on de las GIC

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´a trasformar una gram´atica en otra equivalente de forma que las producciones cumplan ciertos requisitos que faciliten la construcci´on de un reconocedor para dicha gram´atica. Podemos encontrar en las GIC tres defectos que es conveniente eliminar: los prefijos comunes, la recursividad por la izquierda y la ambig¨ uedad. 1. Eliminaci´ on de los prefijos comunes. Una gram´atica tiene prefijos comunes cuando hay dos o m´as producciones que, teniendo la misma parte izquierda, tienen algunos s´ımbolos coincidentes en el comienzo de la parte derecha de la producci´on. La forma de eliminar los prefijos comunes es muy sencilla, se pretende sacar factor com´ un de los s´ımbolos que constituyen el prefijo com´ un. A esta operaci´on se la llama factorizar por la izquierda. En general, si nos encontramos con la siguiente situaci´on: A ::= δα1 |δα2 | . . . |δαn |β1 | . . . |βm considerando que n ≥ 2 y que |δ| > 0

Estas producciones se pueden sustituir por las siguientes, en las que ha sido necesario a˜ nadir un nuevo s´ımbolo no terminal A� . A� ::= α1 |α2 | . . . |αn

2. Eliminaci´ on de la recursividad por la izquierda. En una gram´atica es ´ muy frecuente encontrar producciones recursivas. Estas tienen la forma X ::= αXβ. Ser´an recursivas por la izquierda cuando su forma sea X ::= Xβ, y recursivas por la derecha si son de la forma X ::= αX La recursividad por la izquierda resulta perjudicial a la hora de construir reconocedores LL(1), por lo que la eliminaremos sustituy´endola por recursividad por la derecha.

Manuales Uex

A ::= δA� |β1 | . . . |βm

81

ELENA JURADO MÁLAGA ´ TEMA 5. G.I.C Y AUTOMATAS DE PILA

82

Considerando la siguiente situaci´on:

A ::= Aα1 |Aα2 | . . . |Aαn |β1 | . . . |βm

Estas producciones se pueden sustituir por las siguientes, en las que ha sido necesario a˜ nadir un nuevo s´ımbolo no terminal A� : A ::= β1 A� | . . . |βm A�

A� ::= α1 A� |α2 A� | . . . |αn A� |λ

Ejemplo 5.5 Utilizaremos la gram´atica de las expresiones aritm´eticas presentada en la p´agina 78. Para representar de forma m´as compacta dicha gram´atica utilizaremos letras may´ usculas para indicar cuales son los s´ı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 continuaci´on la gram´atica no ambigua original a la izquierda y la nueva versi´on, a la que llamaremos G Exp 2, a la derecha. En esta u ´ltima versi´on de la gram´atica se ha eliminado la recursividad por la izquierda. Como la recursividad por la izquierda aparece en las producciones que tienen a E y a T en la parte izquierda, ser´a necesario a˜ nadir dos nuevos s´ımbolos no terminales a los que llamaremos E’ y T’.

Manuales Uex

1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.

82

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::=* |/

3. Ambig¨ uedad. No existe ning´ un algoritmo que nos permite eliminar la ambig¨ uedad de forma sistem´atica. Sin embargo, y como vimos en el ejemplo de la p´agina 78, en ocasiones es posible resolver este problema analizando cuales son sus causas.

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES

5.4. RECONOCIMIENTO DESCENDENTE

5.4.2.

83

Reconocedores LL(1)

En la construcci´on de los reconocedores LL(1) es muy importante el papel que juegan los s´ımbolos directores de las producciones que, como su nombre indica, dirigir´an el an´alisis de la cadena, es decir, indicar´an cu´al es la producci´on que ha de utilizarse en cada paso de la construcci´on del ´arbol. Para llegar a la definici´on de s´ımbolos directores de una producci´on ser´a necesario conocer otras definiciones previas, todas ellas relativas a una GIC. Los ejemplos que aparecen en esta secci´ on est´an basados en la gram´atica G Exp 2. Definici´ on 5.1 (Cadena o palabra anulable) Una cadena w ∈ Σ∗N es anulable si, a partir de ella, y utilizando algunas producciones 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 � Definici´ on 5.2 (Producci´ on anulable) Una producci´on X ::= α es anulable si α es una cadena anulable. Una producci´on anulable en modo alguno puede considerarse eliminable. Esto se debe a que aunque a partir de una producci´ on anulable es posible llegar a λ, tambi´en es 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. Definici´ on 5.3 (S´ı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β, β ∈ Σ∗ }

M´ etodo para calcular los S´ımbolos Iniciales Hay que tener en cuenta las siguientes consideraciones: w = aβ, a ∈ ΣT =⇒

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 consideraci´ on reiteradamente. w = Xβ, X ∈ ΣN =⇒ INIC(w) =



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

Manuales Uex

1. Si w comienza por un s´ımbolo terminal es trivial: INIC(w) = {a}

83

ELENA JURADO MÁLAGA

84

´ 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 � ) = {∗, /}

Definici´ on 5.4 (Forma sentencial) Es una cadena w ∈ (ΣN ∪ ΣT )∗ que puede generarse a partir del s´ımbolo inicial de una GIC utilizando un n´ umero indeterminado de producciones. Definici´ on 5.5 (S´ı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) M´ etodo para calcular los S´ımbolos Seguidores de X. Este m´etodo se basa en el examen de las producciones de la gram´atica. El m´etodo se divide en dos fases y es necesario calcular simult´aneamente los s´ı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 alg´ un s´ımbolo gramatical. Situaci´ on A. Si hay una producci´on de la forma: Y ::= αXaβ donde a ∈ ΣT α, β ∈ Σ∗ =⇒ a ∈ SEG(X)

Situaci´ on B. Si hay una producci´on de la forma: Y ::= αXZβ donde Z ∈ ΣN α, β ∈ Σ∗ =⇒ INIC(Z) ⊂ SEG(X)

Situaci´ on C. Si hay una producci´on de la forma: Y ::= αXδβ donde δ ∈ Σ+ α, β ∈ Σ∗ =⇒ INIC(β) ⊂ SEG(X) N es anulable

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.

Manuales Uex

Fase 2. En esta segunda fase buscaremos producciones en las que X se encuentre al final de la parte derecha.

84

Situaci´ on D. Si hay una producci´on de la forma: Y ::= αX donde α ∈ Σ∗ =⇒ SEG(Y ) ⊂ SEG(X)

Situaci´ on E. Si hay una producci´on de la forma: Y ::= αXδ donde ∗ δ ∈ Σ+ N es anulable y α ∈ Σ =⇒ SEG(Y ) ⊂ SEG(X)

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES

5.4. RECONOCIMIENTO DESCENDENTE

85

Tras considerar las situaciones D y E con todas las producciones, se obtiene una colecci´on de relaciones de inclusi´on entre los conjuntos de s´ı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 definitiva. Si consideramos que el s´ımbolo $ aparece al final 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 gram´atica G Exp 2 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 m´etodo se han considerado las siguientes relaciones de inclusi´on: SEG(E) ⊂ SEG(E � ) ⊂ SEG(T ) ⊂ SEG(T � ) ⊂ SEG(F ) Definici´ on 5.6 (S´ımbolos directores de una producci´ on) El c´alculo de los s´ımbolos directores de una producci´on (X ::= α) es inmediato. Sabiendo calcular los S´ımbolos Iniciales, los Seguidores y sabiendo identificar las Cadenas anulables, basta con aplicar la siguiente f´ ormula: � INIC(α) si α no es anulable DIR(X ::= α) = INIC(α) ∪ SEG(X) si α es anulable

Gram´ aticas LL(1) Una gram´atica ser´a LL(1) si es posible construir para ella un reconocedor LL(1) determinista. Para que esto ocurra es necesario que la consulta del siguiente s´ımbolo

Manuales Uex

Cuando se est´a construyendo el ´arbol de derivaci´on correspondiente a una palabra, se analizan de izquierda a derecha los caracteres de dicha palabra y se decide cu´al es la producci´on que se va a utilizar. Para tomar esa decisi´on hay que considerar que, en cada momento, se debe llevar a cabo la derivaci´on por la izquierda siempre y cuando el car´acter que se est´a procesando en ese momento forme parte de los S´ımbolos Directores de la producci´on a utilizar.

85

ELENA JURADO MÁLAGA ´ TEMA 5. G.I.C Y AUTOMATAS DE PILA

86

de la palabra que se est´a analizando permita determinar sin incertidumbre la producci´on que se debe utilizar para proseguir con el an´alisis. Por lo tanto, para que una gram´atica sea LL(1) es necesario que todas las producciones que tienen el mismo s´ımbolo en la parte izquierda no tengan ning´ un S´ımbolo Director en com´ un. Es decir, considerando que: X ::= α1 |α2 | . . . |αn y que D1 = DIR(X ::= α1 ) D2 = DIR(X ::= α2 ) ... Dn = DIR(X ::= αn )

La gram´atica ser´a LL(1) si Di ∩ Dj = Ø, i �= j i, j ∈ {1, . . . , n} Para que una GIC sea LL(1) es imprescindible que no sea ambigua, que no tenga prefijos comunes, ni recursividad por la izquierda.

Manuales Uex

Ejemplo 5.7 Los s´ımbolos directores para las producciones de la gram´atica G Exp 2 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 f´acil comprobar que es una gram´atica LL(1) ya que: DIR2 ∩ DIR3 = ∅ DIR5 ∩ DIR6 = ∅ DIR7 ∩ DIR8 ∩ DIR9 = ∅ DIR10 ∩ DIR11 = ∅ DIR12 ∩ DIR13 = ∅

86

Ejemplo 5.8 Gram´ atica que no es LL(1). La gram´atica que se describe a continuaci´on permitir´a representar la cl´asica estructura alternativa de cualquier lenguaje de programaci´on. Es una gram´atica ambigua y por ese motivo no es LL(1) como comprobaremos a continuaci´on. ΣN = {S, E, R} ΣT = {i, t, a, e, b} Los s´ımbolos gramaticales tienen el siguiente significado: S = Sentencia E = Expresi´on R = Resto de la sentencia

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES

5.5. RECONOCIMIENTO ASCENDENTE i = if

t = then

S´ımbolos seguidores:

87

a = accion e = else   S ::= iEtSR         |a   R ::= eS P =     |λ       E ::= b S R E

Fase 1 e$

b = boolean

Fase 2 e$

t

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 afirmar que la gram´atica no es LL(1)

5.5.

Reconocimiento ascendente

Son m´as potentes que los reconocedores LL(1). Es decir, el conjunto de los lenguajes LL(1) est´a contenido en el conjunto de los LR(1). Un analizador LR(1) detecta un error en una cadena tan pronto como sea posible.

Manuales Uex

El reconocimiento ascendente o an´alisis sint´actico ascendente se caracteriza por construir el ´arbol de derivaci´on de manera ascendente, es decir, desde las hojas hasta la ra´ız. A continuaci´on se describir´a un reconocedor ascendente llamado LR(1) (LeftRight(1)). En este nombre, L indica que la cadena se analiza de izquierda a derecha, R indica que en cada paso se construye la derivaci´on por la derecha en orden inverso, y el 1 indica que s´olo es necesario un car´acter para que el reconocedor decida qu´e acci´on se debe realizar. Una gram´atica es LR(1) si es posible construir para ella un reconocedor LR(1) determinista. Algunas de las ventajas de los reconocedores LR(1):

87

ELENA JURADO MÁLAGA ´ TEMA 5. G.I.C Y AUTOMATAS DE PILA

88

Pr´acticamente todas las gram´aticas que definen los lenguajes de programaci´on son LR(1). La desventaja de los reconocedores LR(1) es que su construcci´on a mano es m´as compleja. Sin embargo, existen herramientas (YACC) que permiten la construcci´on autom´atica de este tipo de reconocedores. 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 transici´on de un estado a otro. Se representan como Di , donde i identifica el estado al que se va a pasar. 2. Reducciones. Esta acci´on se lleva a cabo cuando en el ´arbol aparece la parte derecha de una producci´on y se a˜ nade la parte izquierda, subiendo un nivel en la construcci´on del ´arbol. Se representa como Ri , donde i permite identificar la producci´on utilizada en el proceso de reducci´ on. Los analizadores LR(1) tambi´en utilizan una pila en la que se van almacenando los caracteres que se van procesando as´ı como los estados por los que el reconocedor ha pasado. Veamos con un sencillo ejemplo como funcionar´ıa un reconocedor LR(1), conociendo su Tabla de Acciones. Posteriormente estudiaremos c´omo construir dicha tabla. Ejemplo 5.9 Sea la gram´atica definida con los siguientes s´ımbolos: ΣT = {a, (, )} ΣN = {S, A} y las producciones: 1. S ::= A 2. A ::= a 3. A ::= (a) Las acciones se definen en funci´on del estado del aut´omata y del s´ımbolo de la cadena de entrada que se procesa en cada momento. Hay que tener en cuenta que las situaciones no definidas se consideran situaciones de error. La Tabla de Acciones asociada a este ejemplo se muestra a continuaci´on. En la tabla aparece el s´ımbolo $, que indica el final de la cadena de entrada.

Manuales Uex

$

88

q0 q1 q2 q3 q4 q5

a D2

( D3

)

A D1

R1 R2 D4 D5 R3

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

TEORÍA DE AUTÓMATAS 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

89

Acci´ on Desplazar a q3 Desplazar a q4 Desplazar a q5 Reducir por la 3a producci´on A ::= (a) Desplazar a q1 Reducir por S ::= A (el proceso termina)

Veamos c´omo se procesar´ıa una cadena incorrecta como a) Entrada Pila a)$ q0 )$ q0 aq2 Se produce un error ya que en s´ımbolo ).

5.5.1.

Acci´ on Desplazar a q2 Error el estado q2 no hay ninguna acci´on asociada al

Construcci´ on de la Tabla de Acciones

La Tabla de Acciones se construye al mismo tiempo que se definen los estados. Para llevar este trabajo a cabo es necesario introducir el concepto de LR-item que indicar´a el progreso del an´alisis de la cadena. Denominamos LR-item a una producci´on a la que se le coloca una marca (un punto) en alg´ un lugar de la parte derecha. Esta marca indica qu´e parte de la cadena ha sido ya procesada y cu´al es la que queda por analizar. Adem´as, en los LR-items hay un conjunto de s´ımbolos terminales (separados por una coma de la producci´on) 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 producci´on de la gram´atica y w1 , w2 ∈ ΣT ) Los estados del analizador LR(1) ser´an conjuntos de LR-items y cada LR-item, seg´ un la posici´on en la que se encuentre el punto, indicar´a la acci´on que se debe llevar a cabo. Si detr´as de la marca hay alg´ un s´ımbolo, la acci´on que se realizar´a ser´a un desplazamiento al estado que contenga un LR-item similar pero con la marca desplazada en una posici´on a la derecha. Acci´ on(p,B)= Desplazamiento a q

Si la marca est´a situada al final de la producci´on, la acci´on a realizar ser´a una reducci´ on por la producci´on que representa el LR-item, siempre y cuando el car´acter analizado sea uno de sus s´ımbolos directores.

Manuales Uex

Es decir, si [A ::= x.By, w] ∈ p y [A ::= xB.y, w] ∈ q entonces

89

ELENA JURADO MÁLAGA

90

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

Acci´ on(p,w)= Reducir por la producci´ on A ::= xBy En cada instante, el analizador va a tener una configuraci´on (descripci´on instant´anea) determinada que viene dada por el contenido de la pila y por el fragmento de la cadena de entrada que a´ un no ha sido procesado. En la pila se almacenan los estados por los que ha ido pasando el analizador as´ı como los s´ımbolos (terminales y no terminales) que est´an ubicados en las zonas superiores del ´arbol de derivaci´on. Por ejemplo: (q0 X1 q1 . . . Xm qm , aj aj+1 . . . an $) qi ∈ Q Xi ∈ Σ ai ∈ ΣT Veamos como var´ıa la configuraci´on del analizador en funci´on de la acci´on que se realice: Desplazamiento Si Accion(qm , aj ) = Dr La nueva configuraci´on ser´a: (q0 X1 q1 . . . Xm qm aj qr , aj+1 . . . an $) Se a˜ nade a la pila el car´acter procesado y el estado actual. Reducci´ on Si Accion(qm , aj ) = Ri y la producci´on i es A ::= β donde |β| = r supondremos que los u ´ltimos r s´ımbolos almacenados en la pila coinciden con β. Es decir, β = Xm−r+1 . . . Xm . En este caso, se sustituyen los u ´ ltimos r s´ımbolos de la pila (y los estados que les acompa˜ nan) por A. La nueva configuraci´on ser´a: (q0 X1 q1 . . . Xm−r qm−r Aqp , aj aj+1 . . . an ) Accion(qm−r , A) = Dp

donde

En este caso no ha sufrido ninguna modificaci´on el fragmento de cadena que a´ un queda por procesar. Aunque aj ha sido tenido en cuenta para decidir la operaci´on a realizar, no podemos considerar que haya sido procesado, es decir, no forma parte de la pila ni tampoco del ´arbol de derivaci´on.

Manuales Uex

M´ etodo para la construcci´ on de los LR-items Los estados se van creando en dos fases: en primer lugar se construye lo que podemos denominar el n´ ucleo del estado, posteriormente, y siempre que sea necesario, se a˜ naden otros LR-items hasta cerrar el estado.

90

Determinaci´ on del n´ ucleo de q0 . Para cada una de las producciones que tienen al s´ımbolo inicial en la parte izquierda (S::=x), a˜ nadir al estado q0 el LR-item [S::= .x, $] Cierre de un estado. Si [A::=x.By,w] ∈ q y B ∈ ΣN hay que a˜ nadir al estado q LR-items construidos a partir de todas las producciones de la gram´atica que tienen a B en la parte izquierda.

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES

5.5. RECONOCIMIENTO ASCENDENTE

91

Para la producci´on B::=z, hay que a˜ nadir el LR-item [B::= .z, u] donde u = INIC(yw). Creaci´ on del n´ ucleo de un nuevo estado. Si existe un LR-item de la forma [A::=x.Yz,w], se crea un nuevo estado con el LR-item [A::=xY.z,w] Ejemplo 5.10 Veamos c´omo se crea la Tabla de S´ımbolos para el ejemplo anterior: 1. Crear el n´ ucleo del estado q0 [S::=.A, $] ∈ q0 2. Cerrar q0 q0 = {[S::=.A, $], [A::=.(a), $], [A::=.a, $]} Analizando estos tres LR-items y los que se construyen despu´es, es evidente que: Accion(q0 , A) = D1

Accion(q0 , () = D3

Accion(q0 , a) = D2

3. Crear nuevos estados (en este caso est´an ya cerrados) 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

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

Ejemplo 5.11 C´alculo del reconocedor LR(1) para la siguiente gram´atica: ΣT = {a, b} ΣN = {S, A, B} y las producciones: 1. S ::= A 2. A ::= BA 4. B ::= aB 3. |λ 5. |b Esta gram´atica genera el lenguaje (a∗ b)∗ Definici´on de los estados:

91

ELENA JURADO MÁLAGA ´ TEMA 5. G.I.C Y AUTOMATAS DE PILA

92

q0 q1 q2 q3 q4 q5 q6

$ R3 R1 R3 R5 R2 R4

a D3

b D4

A D1

B D2

D3 D3 R5

D4 D4 R5

D5

D2 D6

R4

R4

Utilizando esta tabla, veamos como se procesar´ıa la cadena ab: Entrada ab$ b$ $ $ $ $ $

Pila q0 q0 aq3 q0 aq3 bq4 q0 aq3 Bq6 q0 Bq2 q0 Bq2 Aq5 q0 Aq1

Acci´ on 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

producci´on producci´on producci´on producci´on producci´on

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

Veamos c´omo se procesar´ıa una cadena incorrecta como a Entrada a$ $

Pila q0 q0 aq3

Acci´ on Desplazar a q3 Error

Gram´ aticas LR(1) Una gram´atica es LR(1) siempre que sea posible construir un reconocedor LR(1) que sea determinista. Para que esto pueda ocurrir deben cumplirse las siguientes condiciones: 1. La gram´atica debe ser aumentada, es decir, el s´ımbolo inicial no debe aparecer nunca en la parte derecha de ninguna producci´on. Si no es as´ı, basta con a˜ nadir una producci´on como S’ ::= S, en la que S’ se convierte en el nuevo s´ımbolo inicial de la gram´atica.

Manuales Uex

2. No deben aparecer conflictos a la hora de construir la tabla de acciones. Hay tres tipos de conflicto:

92

a) Conflicto desplazamiento/desplazamiento. Aparece cuando en un estado q hay dos items del siguiente tipo: [A ::= α.aβ, u1] y [B ::= γ.aδ, u2 ]. La acci´on asociada al estado q ante la llegada del s´ımbolo a podr´ıa ser un desplazamiento al estado que contiene al LR-item [A ::= αa.β, u1] o un desplazamiento al que contiene a [B ::= γa.δ, u2 ].

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES

5.6. PROPIEDADES DE LOS L.I.C.

93

b) Conflicto reducci´ on/reducci´ on. Aparece cuando en un estado q hay dos items del siguiente tipo: [A ::= α., u] y [B ::= β., u]. La acci´on asociada al estado q ante la llegada del s´ımbolo u podr´ıa ser una reducci´on utilizando la producci´on A ::= α o una reducci´on utilizando la producci´on B ::= β. c) Conflicto desplazamiento/reducci´ on. Aparece cuando en un estado q hay dos items del siguiente tipo: [A ::= α.aβ, u1 ] y [B ::= β., a]. La acci´on asociada al estado q ante la llegada del s´ımbolo a podr´ıa ser un desplazamiento al estado que contiene al LR-item [A ::= αa.β, u1] o una reducci´on utilizando la producci´on B ::= β. Ejemplo 5.12 Gram´ atica que no es LR(1). Σ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 gram´atica genera el lenguaje c + ca+ b+ Comenzamos la definici´on de los estados: 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 informaci´on el conflicto es evidente: ¿qu´e acci´on hay que realizar si estando en el estado q0 llega el s´ımbolo c? Si atendemos al primer LR-item deber´ıamos desplazarnos a q1 pero si atendemos al segundo el desplazamiento deber´ıa hacerse a q2 , por lo tanto es imposible construir un reconocedor LR(1) determinista.

5.6.

Propiedades de los L.I.C.

Teorema 5.1 El conjunto de los LIC est´a cerrado para la uni´on, la concatenaci´on y el cierre de Kleene.

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

Teorema 5.2 El conjunto de los LIC no est´a cerrado para la intersecci´on ni para la complementaci´on.

93

ELENA JURADO MÁLAGA ´ TEMA 5. G.I.C Y AUTOMATAS DE PILA

94

Como L1 ∩L2 = L1 ∪ L2 , si los LIC fueran cerrados para la complementaci´on tambi´en lo ser´ıan para la intersecci´on y hemos comprobado en el ejemplo anterior que esto no 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. Definici´ on 5.7 (Sustituci´ on) Sean Σ y Γ dos alfabetos, se define una sustituci´on como una funci´on s : Σ −→ P(Γ∗ ) tal que ∀a ∈ Σ s(a) es un LIC. Esta funci´on se puede extender a cadenas de caracteres y a lenguajes de forma natural. Definici´ on 5.8 (Homomorfismo) Un homomorfismo es un caso particular de sustituci´ on en el que h : Σ −→ Γ∗ Teorema 5.4 El conjunto de los LIC est´a cerrado para las sustituciones y (como caso particular) para los homomorfismos.

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 suficiente para demostrar que no es independiente del contexto. Sin embargo, en ning´ un caso este lema servir´a para demostrar que un lenguaje es LIC.

Manuales Uex

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 verifican:

94

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

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES

5.7. PROBLEMAS

5.7.

95

Problemas

5.1 Construir un Aut´omata de Pila Vac´ıa para los siguientes lenguajes definidos 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 gram´aticas de tipo 2 es ambigua y encuentra otra gram´atica equivalente que no lo sea 1. S ::= A

A ::= AA|a|b

2. S ::= A|B

A ::= aAb|ab

3. S ::= aB|Ab

A ::= aA|λ

B ::= abB|λ B ::= bB|λ

5.3 Para cada una de las siguientes gram´aticas de tipo 2 hay que comprobar si son 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

A ::= bA|λ

2. S ::= aA

A ::= Ab|b

3. S � ::= S

S ::= 0S0|A

4. S ::= A

A ::= AB|λ

5. S ::= E

E ::= E + T |T

6. S ::= cAb

A ::= 1A|λ B ::= aB|b T ::= a|(E)

A ::= aA|λ

5.4 Utliza el lema del bombeo para demostrar que los siguientes lenguajes no son independientes del contexto

2. L2 = {an bn cm , m ≥ n ≥ 0} 3. L3 = {an bm cn dm , n, m ≥ 0} 4. L4 = {an bn cm , n �= m n, m ≥ 0}

Manuales Uex

1. L1 = {an bn cn , n ≥ 0}

95

ELENA JURADO MÁLAGA ´ TEMA 5. G.I.C Y AUTOMATAS DE PILA

96 5. L5 = {an bn cm , 0 ≤ n ≤ m ≤ 2n}

5.5 Demuestra que la gram´atica que aparece en el ejemplo 5.8 (p´agina 86) es ambigua y no es LR(1) 5.6 Demuestra que una gram´atica LR(1) no puede ser ambigua 5.7 Demuestra que el lenguaje L = {an bm cm dn , n, m ≥ 0} es independiente del contexto 5.8 Dise˜ na una gram´atica que genere par´entesis anidados y demuestra que es LR(1) 5.9 Modifica la siguiente gram´atica de manera que sea LL(1) y demuestra que realmente lo es ΣN = {D, T, L} S=D ΣT = {entero, real, id, ,}

Manuales Uex

D ::= T L

96

T ::= entero|real

L ::= L, id|id

Tema 6 Gram´ aticas Atribuidas Contenido 6.1. Concepto de Sem´ antica y de Gram´ atica Atribuida . . .

97

6.2. Atributos heredados y sintetizados . . . . . . . . . . . . .

99

6.3. Gram´ aticas S-atribuidas y L-Atribuidas . . . . . . . . . . 100 6.4. Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104

Hasta ahora hemos visto como las gram´aticas regulares (tipo 3) son adecuadas para representar las caracter´ısticas morfol´ogicas de los elementos b´asicos de un lenguaje de programaci´on. Igualmente, las gram´aticas independientes del contexto (tipo 2) lo son para representar las caracter´ısticas sint´acticas. Sin embargo, dichas gram´aticas no son lo suficientemente potentes como para representar los aspectos sem´ anticos de un lenguaje de programaci´on. Veremos, a lo largo de este tema, c´omo las gram´aticas atribuidas pueden ser u ´ tiles para realizar esta labor.

Concepto de Sem´ antica y de Gram´ atica Atribuida

La sem´antica, considerada desde el punto de vista de los lenguajes de programaci´on, se ocupa del significado que tienen las instrucciones de los programas escritos en un determinado lenguaje. Para poder realizar un an´alisis sem´antico de un programa ´este debe ser correcto tanto desde el punto de vista l´exico como desde el sint´actico. En la sem´antica de un lenguaje de programaci´on pueden distinguirse dos aspectos: est´atico y din´amico. La sem´ antica est´ atica se ocupa de las condiciones que deben cumplir las construcciones de un programa para que su significado sea correcto. 97

Manuales Uex

6.1.

97

ELENA JURADO MÁLAGA ´ TEMA 6. GRAMATICAS ATRIBUIDAS

98

Ejemplo 6.1 Una sentencia de asignaci´on en C como A := 5 + B es correcta desde un punto de vista l´exico y sint´actico, pero para que sea sem´anticamente correcta la variable B debe ser de un tipo al que se le pueda aplicar el operador + y, adem´as, el valor resultante de evaluar la expresi´on 5 + B debe ser de un tipo compatible con el de la variable sobre la que se efect´ ua la asignaci´on (A). La sem´ antica din´ amica se ocupa del significado de una construcci´on con objeto de que pueda ser traducido a c´odigo directamente ejecutable por la m´aquina. Ejemplo: A partir de una sentencia de asignaci´on V ← Expresi´ on debe generarse c´odigo que permita: 1. obtener la direcci´on de memoria de la variable V 2. calcular el valor de la expresi´on asignada 3. almacenar el valor calculado en el paso 2 en la direcci´on de memoria obtenida en el paso 1 La sem´antica de un lenguaje de programaci´on, en sus dos vertientes est´atica y din´amica, es m´as dif´ıcil de especificar que los aspectos l´exicos y sint´acticos de un lenguaje. Se podr´ıa utilizar el lenguaje natural pero su falta de precisi´on provocar´ıa probablemente ambig¨ uedad. Tambi´en resultar´ıa dif´ıcil confirmar que se ha realizado una especificaci´on completa de todas las caracter´ısticas sem´anticas del lenguaje. Las gram´aticas atribuidas son un buen mecanismo formal para dar soluci´on a este problema. Las gram´aticas atribuidas pueden considerarse como una ampliaci´on de las independientes del contexto que tiene por objeto dotar a la gram´atica de capacidad para especificar correctamente la sem´antica de un lenguaje de programaci´on. Para conseguirlo, a los s´ımbolos de la gram´atica se les asocian atributos que permiten definir ciertas caracter´ısticas sem´anticas de los mismos, y a las producciones se les asocian funciones sem´anticas que permiten calcular, evaluar y controlar dichos atributos. Definici´ on 6.1 (Gram´ atica atribuida) Si una Gram´atica Independiente del Contexto se define como G= {ΣT , ΣN , S, P }

Manuales Uex

la gram´atica atribuida se define como

98

GA ={G, AS, F S}, donde AS son los atributos sem´ anticos asociados a los s´ımbolos de la gram´atica. FS son las funciones sem´ anticas asociadas a las producciones de la gram´atica.

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES

6.2. ATRIBUTOS HEREDADOS Y SINTETIZADOS

99

De la misma forma que G permite definir los aspectos sint´acticos de un lenguaje, GA permite definir los aspectos sem´anticos. Un mismo s´ımbolo de la gram´atica puede tener asociados varios atributos que permitan representar diferentes aspectos de dicho s´ımbolo. Por ejemplo, un s´ımbolo llamado X que representara variables de un lenguaje podr´ıa tener dos atributos, uno llamado tipo que podr´ıa tener los valores: real, entero, l´ ogico,. . . y otro llamado valor cuyo valor depender´ıa del tipo mencionado anteriormente. Podr´ıamos representarlo as´ı: X

X.tipo entero

X.valor 534

Las funciones sem´anticas definen las relaciones que se cumplen entre los atributos de los distintos s´ımbolos de la gram´atica. Estas relaciones permiten calcular los valores de unos atributos en funci´on de los valores de otros. Cuando se desea describir las funciones sem´anticas asociadas a una producci´on, ´estas deben aparecen encerradas entre llaves al final o en alg´ un punto intermedio de la producci´on. Si un s´ımbolo aparece varias veces en la misma producci´on (por ejemplo, en las producciones recursivas) se utilizan sub´ındices para distinguir unas instancias de otras. El sub´ındice 0 se reserva para hacer referencia al s´ımbolo repetido cuando ´este aparece en la parte izquierda de la producci´on y los sub´ındices 1, 2, . . . se utilizan en orden para las diferentes apariciones del s´ımbolo en la parte derecha de la producci´on. Por ejemplo: expr ::= expr + expr

{expr0 .valor = expr1 .valor + expr2 .valor}

Esta producci´on indica que una expresi´on aritm´etica puede construirse como la suma de otras dos expresiones m´as simples y, en este caso, la acci´on sem´antica indica que el valor de la expresi´on resultante ser´a la suma de las dos expresiones simples.

6.2.

Atributos heredados y sintetizados

A � �� � x y z

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

Manuales Uex

Una producci´on gramatical puede representarse gr´aficamente como un ´arbol. Por ejemplo, la producci´on A ::= x y z se puede representar as´ı:

99

ELENA JURADO MÁLAGA

100

´ TEMA 6. GRAMATICAS ATRIBUIDAS

atributos heredados se calcula en funci´on de los atributos de los nodos hermanos y/o padre.

6.3.

Gram´ aticas S-atribuidas y L-Atribuidas

En las gram´aticas atribuidas el principal problema radica en la evaluaci´on de los atributos. Gr´aficamente se puede pensar en el ´arbol de derivaci´on que representa la estructura sint´actica de manera que los atributos est´an localizados en los diferentes nodos del ´arbol. As´ı, un recorrido apropiado del ´arbol puede permitir calcular todos lo atributos. Pero si no se imponen ciertas restricciones este proceso puede ser largo y costoso. En funci´on de que los atributos de una gram´atica sean heredados o sintetizados se pueden definir las gram´aticas S o L atribuidas. Dependiendo del tipo de la gram´atica atribuida resultar´a recomendable utilizar un determinado mecanismo para construir y procesar el ´arbol sint´actico.

6.3.1.

Gram´ aticas S-atribuidas

Manuales Uex

Las gram´aticas S-atribuidas son aquellas cuyos s´ımbolos s´olo tienen atributos sintetizados. Con las gram´aticas S-atribuidas es muy eficaz utilizar un reconocedor ascendente (por ejemplo, un reconocedor del tipo LR) ya que al mismo tiempo que se construye el ´arbol sint´actico se pueden ir evaluando los atributos. El programa PCYACC genera un reconocedor sint´actico-sem´antico que realiza esta tarea.

100

Ejemplo 6.2 El siguiente ejemplo de gram´atica S-atribuida se utiliza para generar expresiones aritm´eticas. Por simplicidad, consideraremos que las u ´nicas operaciones que se pueden realizar son la suma y la multiplicaci´ on. Los s´ımbolos expr y num, que representan las expresiones aritm´eticas y los n´ umeros que aparecen en ellas respectivamente, tienen ambos un atributo sintetizado llamado valor que permite calcular el valor de las expresiones aritm´eticas analizadas. Por simplicidad, el s´ımbolo num ser´a considerado como terminal y su valor habr´a sido obtenido en el proceso de an´alisis l´exico previo. Las acciones sem´anticas de estas producciones permitir´an obtener el valor de una expresi´on aritm´etica a partir de los valores de expresiones m´as b´asicas. 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 figura 6.1 muestra el a´rbol de derivaci´on de la expresi´on 9 + 7 * 5. Al mismo tiempo que el ´arbol se construye de manera ascendente se calculan los atributos

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES ´ 6.3. GRAMATICAS S-ATRIBUIDAS Y L-ATRIBUIDAS

101

expr.valor 44

expr expr.valor 9

expr

num

num.valor num 9

35

expr expr

9

expr.valor

expr

7

num

num.valor 7

7

+

expr.valor

expr.valor

*

5 num.valor

5

5

Figura 6.1: Gram´atica S-atribuida

sintetizados de todos los s´ımbolos. Finalmente se obtiene el valor de la expresi´on completa.

6.3.2.

Gram´ aticas L-atribuidas

Las gram´aticas L-atribuidas tienen atributos sintetizados y heredados, pero a los atributos heredados se les imponen algunas restricciones con objeto de facilitar el dise˜ no de un algoritmo que permita evaluar todos los atributos de la gram´atica. Los atributos heredados s´olo pueden depender de los atributos heredados del nodo padre o de cualquier atributo de sus nodos hermanos, siempre que esos nodos hermanos aparezcan a su izquierda en la producci´on. Es decir, si tenemos una producci´on A ::= x1 x2 . . . xn Los atributos heredados de xi solo pueden calcularse en funci´on de : 1. los atributos heredados de A 2. cualquier atributo (heredado o sintetizado) de x1 . . . xi−1

A

::=

x y

z

el s´ımbolo A tiene un atributo sintetizado(a1 ) y otro heredado (a2 ) el s´ımbolo x tiene s´olo un atributo heredado (x1 )

Manuales Uex

Ejemplo 6.3 Veamos con un ejemplo abstracto c´omo especificar claramente un fragmento de gram´atica L-atribuida. Supongamos que tenemos la producci´on

101

ELENA JURADO MÁLAGA

102

´ 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 producci´on, lo haremos de la siguiente forma: A.a1 ↑ a2 ↓ ::= x.x1 ↓

y.y1 ↑ y2 ↓

z.z1 ↑

donde el s´ımbolo ↓ indica que el atributo es heredado y el s´ımbolo ↑ indica que es sintetizado. Si adem´as se quisieran representar las acciones sem´anticas, ´estas deber´ıan aparecer encerradas entre llaves y colocadas en el punto adecuado de la producci´on, siguiendo las siguientes reglas: 1. Una acci´on sem´antica no podr´a hacer referencia a un atributo sintetizado de un s´ımbolo que se encuentra a la derecha de dicha acci´on. 2. Para calcular un atributo heredado de un s´ımbolo que est´a en la parte derecha de una producci´on, la acci´on debe estar situada inmediatamente antes de ese s´ımbolo. 3. Los atributos sintetizados de un s´ımbolo s´olo se pueden calcular en una producci´on en la que dicho s´ı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 producci´on, por tanto, la acci´on correspondiente se ubicar´a al final de la producci´on. Veamos un ejemplo de c´omo se aplicar´ıan estas reglas en el ejemplo anterior:

Manuales Uex

A ::= {x.x1 ↓ = f (A.a2 ↓)} x {y.y2 ↓= g(x.x1 ↓)} y z {A.a1 ↑= h(y.y2 ↓, z.z1 ↑)}

102

No podemos asociar a esta producci´on acciones sem´anticas que eval´ uen los atributos a2 (por ser heredado se evaluar´a en una producci´on en la que el s´ımbolo A est´e ubicado en la parte derecha), y1 y z1 (por ser atributos sintetizados se deben 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 gram´atica L-atribuida al hacer un recorrido en preorden de cada uno de los nodos que forman el ´arbol sint´actico.

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES ´ 6.3. GRAMATICAS S-ATRIBUIDAS Y L-ATRIBUIDAS

103

Algoritmo 6.1 Visitar (N) Input: N es un nodo de un a´rbol sint´actico 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

Ejemplo 6.4 La siguiente gram´atica L-atribuida permite generar una declaraci´on de variables siguiendo las pautas del lenguaje C. Los s´ımbolos no terminales D, T y L representan los conceptos de declaraci´ on, tipo y lista de identificadores, respectivamente. En este ejemplo, los atributos que tienen los diferentes s´ımbolos gramaticales almacenan informaci´on que representa el tipo de las variables que se van a definir. Adem´as, el s´ımbolo terminal id tiene un atributo sintetizado que permite conocer el nombre de la variable y que habr´a sido calculado en el proceso de an´alisis l´exico. La sem´antica de estas instrucciones de declaraci´on debe asociar a cada variable su tipo correspondiente y adem´as debe almacenar, utilizando el procedimiento a˜ nadir tabla, la informaci´on asociada a cada variable en la tabla de s´ımbolos del compilador. D ::= T {L.tipoh = T.tipo} L T ::= INT T ::= REAL

{T.tipo = 0} {T.tipo = 1}

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

ID

{a˜ nadir tabla(ID.nombre, ID.tipoh)} ID

{a˜ nadir tabla(ID.nombre, ID.tipoh)} 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).

Manuales Uex

L ::= {L1 .tipoh = L0 .tipoh} L, {ID.tipoh = L0 .tipoh}

103

ELENA JURADO MÁLAGA ´ TEMA 6. GRAMATICAS ATRIBUIDAS

104

D L.tipoh T.tipo T

1 0

L L.tipoh

int

3 0 L.tipoh

4 0 id.tipoh

5 0

L id a

,

L

id.tipoh

7 0

0

id.tipoh id 0 9

, id

2

10

c añadir_tabla(c,0)

b

8 añadir_tabla(b,0)

6 añadir_tabla (a,0)

Figura 6.2: Gram´atica L-atribuida

La figura 6.2 muestra el a´rbol de derivaci´on de una declaraci´on de variables como int a, b, c , la numeraci´on indica el orden en el que se realizar´ıan las diferentes acciones sem´anticas de acuerdo al algoritmo 6.1

6.4.

Problemas

Manuales Uex

6.1 Dada la siguiente gram´atica atribuida: Σ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 gram´atica S-atribuida o L-atribuida?

104

Tema 7 M´ aquinas de Turing Contenido 7.1. Introducci´ on. Antecedentes hist´ oricos . . . . . . . . . . . 105 7.2. Definici´ on y ejemplos de M.T.’s . . . . . . . . . . . . . . . 107 7.3. Restricciones a la M.T. . . . . . . . . . . . . . . . . . . . . 110 7.4. Modificaciones de la M.T. . . . . . . . . . . . . . . . . . . 113 7.5. T´ ecnicas para la construcci´ on de M.T. . . . . . . . . . . . 116 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 m´aquina de Turing es un dispositivo te´orico muy simple pero con una gran capacidad computacional, es decir, permite resolver problemas de una gran complejidad. Como veremos en los pr´oximos temas, la m´aquina de Turing es una herramienta formal muy u ´ til para estudiar la teor´ıa de la computabilidad.

Introducci´ on. Antecedentes hist´ oricos

En la d´ecada de los 30, el ingl´es Allan Turing dise˜ n´o el modelo matem´atico de una m´aquina te´orica con un gran poder computacional, llamada M´aquina de Turing (M.T.). En los siguientes p´arrafos analizaremos los motivos cient´ıficos e hist´oricos que llevaron a Turing a dise˜ nar esta m´aquina. A finales del siglo XIX, la reci´en nacida Teor´ıa de Conjuntos hab´ıa causado un gran impacto entre los matem´aticos. Sin embargo, algunos pensadores como Bertrand Russell opinaban que dicha teor´ıa no estaba bien formalizada ya que permit´ıa enunciados tan parad´ojicos como ´este: 105

Manuales Uex

7.1.

105

ELENA JURADO MÁLAGA ´ TEMA 7. MAQUINAS DE TURING

106

Si R es el conjunto de todos los conjuntos que no son miembros de s´ı mismo, ¿R ∈ R? Para evitar este tipo de problemas, Russell y Whitehead desarrollaron un sistema matem´atico de axiomas y reglas de inferencia altamente formalizado, cuyo prop´osito era poder traducir a este esquema cualquier razonamiento matem´atico correcto. Las reglas estaban cuidadosamente seleccionadas para evitar planteamientos que pudieran llevar a conclusiones parad´ojicas. Simult´aneamente, el prestigioso matem´atico alem´an David Hilbert comenz´o la tarea de establecer un esquema mucho m´as completo y manejable. Hilbert pretend´ıa demostrar que el sistema estaba libre de contradicciones. Nunca vacil´o en proclamar su convicci´on de que alg´ un d´ıa con este sistema se podr´ıa resolver cualquier problema matem´atico o demostrar que carece de soluci´on. Aseguraba que exist´ıa un procedimiento por medio del cual era posible afirmar a priori si un problema pod´ıa o no ser resuelto. Llam´o a este problema Entscheidungsproblem (“el problema de la decisi´on”). Sin embargo, un joven austriaco, llamado Kurt G¨ odel, publico en 1931 un art´ıculo titulado “Sobre proposiciones formalmente indecidibles de los fundamentos de las matem´aticas y sistemas relacionales”. En ´el, G¨odel prob´o el Teorema de la incompletitud en el que se afirmaban dos importantes cuestiones: 1. Si la teor´ıa axiom´atica de conjuntos es consistente existen teoremas que no pueden ser probados ni refutados. 2. No existe ning´ un procedimiento constructivo que pruebe que la teor´ıa axiom´atica de conjuntos es consistente. En la demostraci´on de este teorema G¨odel tambi´en propuso un interesante m´etodo para enumerar objetos que originalmente no parecen ser enumerables. Utiliz´o para ello el teorema fundamental de la Aritm´etica o teorema de factorizaci´on u ´nica que afirma que todo entero positivo se puede representar de forma u ´ nica como producto de factores primos. Por ejemplo, 6936 = 23 ·31 ·172 y no hay ninguna otra factorizaci´ on del n´ umero 6936 en n´ umeros primos. Esta idea es muy interesante y puede ser utilizada para catalogar el conjunto de las M.T.’s como veremos en el siguiente tema. Veamos su aplicaci´on para enumerar, por ejemplo, las expresiones aritm´eticas. En primer lugar es necesario enumerar todos los elementos que pueden formar parte de una expresi´on aritm´etica ( operaciones y d´ıgitos): + * ÷ 0 1 2 3 4 5 6 7 8 9

Manuales Uex

1

106

2

3

4

5

6

7

8

9

10

11

12

13

14

De esta manera, una expresi´on como 3*5-2 podr´ıa representarse mediante la tupla (8-3-10-2-7) que puede asociarse con el n´ umero 28 · 33 · 510 · 72 · 117 . Debido a la unicidad de la factorizaci´on en n´ umeros primos podemos reconstruir la expresi´ on aritm´etica a partir de su c´odigo (n´ umero de orden) asociado.

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES ´ Y EJEMPLOS DE M.T.’S 7.2. DEFINICION

107

Para los cient´ıficos mencionados anteriormente era fundamental el concepto de algoritmo o proceso efectivo, consider´andolo como un m´etodo para resolver un problema gen´erico en un n´ umero finito de pasos mediante operaciones conocidas y realizables. Desde este punto de vista, Turing dise˜ n´o su m´aquina como un dispositivo capaz de realizar un algoritmo. Apoy´o las teor´ıas de G¨odel al demostrar que algunos problemas 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 tecnol´ogicas de una computadora como la velocidad de procesamiento o la capacidad de la memoria. Por esta raz´on, se la considera como un s´ımbolo invariante de la inform´atica. En esta misma ´epoca, Emil Post, as´ı como Church y Kleene, realizaron estudios similares a los de Turing.

7.2.

Definici´ on y ejemplos de M.T.’s

La M.T. es un modelo matem´atico para representar a una m´aquina te´orica. A pesar de su simplicidad la M.T. tiene el mismo poder computacional que una computadora de prop´osito general. La M.T. es interesante, sobre todo, por el conjunto de lenguajes que permite reconocer y tambi´en generar (lenguajes recursivamente enumerables) y por el conjunto de funciones que puede computar (funciones calculables). El modelo b´asico de M.T. est´a formado por un aut´omata finito, con un dispositivo de lectura/escritura que controla una cinta de longitud infinita. La cinta est´a dividida en celdas en las que se almacena un u ´ nico s´ımbolo o un espacio en blanco. Aunque la longitud de la cinta es infinita, en cada momento s´olo un n´ umero finito de celdas contienen s´ımbolos diferentes al espacio en blanco, que pertenecen a un alfabeto tambi´en finito. El dispositivo de lectura/escritura puede explorar(leer) el contenido de una celda y grabar(escribir) un nuevo s´ımbolo sobre ella, seguidamente se desplaza en una posici´on hacia la izquierda o hacia la derecha. Por tanto, la M.T. dependiendo del s´ımbolo le´ıdo y del estado actual del aut´omata, realiza las siguientes operaciones: 1. Cambia de estado.

3. Desplaza la cabeza de lectura/escritura a la izquierda o a la derecha en una posici´on. Con el siguiente esquema se representa una M.T. que se encuentra en un estado llamado p y cuya cabeza de lectura/escritura se˜ nala a una celda que contiene al s´ımbolo a

Manuales Uex

2. Escribe un s´ımbolo en la celda analizada.

107

ELENA JURADO MÁLAGA ´ TEMA 7. MAQUINAS DE TURING

108 a ↑p

Definici´ on 7.1 (M´ aquina de Turing) Formalmente la M.T. se define como una tupla: MT = {Q, Σ, Γ, f, q0 , b, F } Q es el conjunto finito 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 finales f : Q × Γ −→ Q × Γ × {I, D} Inicialmente, en la cinta hay una colecci´on finita de s´ı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. Definici´ on 7.2 (Descripci´ on Instant´ anea de una M.T.) Llamaremos Descripci´on Instant´anea(D.I.) de la M.T. a α1 qα2 donde q es el estado actual de la m´aquina y α1 α2 ∈ Γ∗ es el contenido de la cinta. La cabeza de lectura/escritura analiza en ese momento el primer s´ımbolo de α2 . Dentro de la cadena α1 α2 podemos encontrar el car´acter b, pero el primer car´acter de α1 es el car´acter diferente de b m´as a la izquierda de la cinta y el u ´ltimo car´acter de α2 es el car´acter diferente de b m´as a la derecha de la cinta. Teniendo en cuenta el concepto de D.I. los movimientos de la M.T. pueden definirse de la siguiente forma:

Manuales Uex

Sea una M.T. cuya D.I. es x1 . . . xi−1 qxi . . . xn

108

Si f (q, xi ) = (p, y, I) entonces la nueva D.I. es x1 . . . xi−2 pxi−1 yxi+1 . . . xn Podemos representar la transici´ on de la forma: x1 . . . xi−1 qxi . . . xn −→ x1 . . . xi−2 pxi−1 yxi+1 . . . xn

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES ´ Y EJEMPLOS DE M.T.’S 7.2. DEFINICION

109

Una representaci´on m´as gr´afica ser´ıa la siguiente: x1 . . . xi−1 xi . . . xn −→ x1 . . . xi−1 y xi+1 . . . xn ↑q ↑p ∗ para indicar que hemos pasado de una situaci´on Se puede utilizar el s´ımbolo −→ a otra en uno o m´as pasos. Definici´ on 7.3 (Lenguaje aceptado por una M.T.) Est´a formado por la cadenas definidas sobre el alfabeto Σ que hacen que la M.T. llegue a un estado final, partiendo de una situaci´ on inicial en que la cadena est´a en la cinta de entrada, q0 es el estado inicial y la cabeza de lectura/escritura apunta a la celda ocupada por el primer car´acter de dicha cadena. ∗ L(MT ) = {w ∈ Σ∗ / q0 w −→ α1 pα2

donde p ∈ F α1 , α2 ∈ Γ∗ }

Ejemplo 7.1 (Complemento binario) Esta M.T. obtiene el complemento binario de un n´ umero binario almacenado en la cinta. Q = {q0 , q1 } F = {q1 } Σ = {0, 1} Γ = {0, 1, b} La funci´on de transici´on se define en la siguiente tabla:

q0

0 q0 1D

1 q0 0D

b q1 bI

Ejemplo 7.2 (Paridad) Esta M.T. calcula la paridad del n´ umero de 1’s que hay en la cadena binaria de entrada. Al final del proceso, se a˜ nade a la derecha de la cadena un 0 para indicar que hay un n´ umero par de 1’s y un 1 para indicar que el n´ umero de 1’s es impar. Q = {q0 , q1 , q2 } F = {q2 } Σ = {0, 1} Γ = {0, 1, b} La funci´on de transici´on se define en la siguiente tabla: 0 q0 0D q1 0D

1 q1 1D q0 1D

b q2 0I q2 1I

Ejemplo 7.3 (Duplicar) Esta M.T. recibe una cadena formada por 1’s en la cinta de entrada y duplica su tama˜ no. El proceso comienza en el extremo derecho de la cadena. Para llevar a cabo este trabajo, cada vez que encuentra un 1 lo marca sustituy´endolo por un 0 y se desplaza hasta el final de la cadena donde a˜ nade otro 0 (que representa a un 1 marcado). Al final del proceso, en el estado q2 se cambian todos los 0’s por 1’s para reconstruir la informaci´on. Q = {q0 , q1 , q2 , q3 } F = {q3 } Σ = {1} Γ = {0, 1, b} La funci´on de transici´on se define en la siguiente tabla:

Manuales Uex

q0 q1

109

ELENA JURADO MÁLAGA ´ TEMA 7. MAQUINAS DE TURING

110

q0 q1 q2

1 q1 0D q1 1D

0 q0 0I q1 0D q2 1D

b q2 bD q0 0I q3 bI

Ejemplo 7.4 (Imagen especular) Esta M.T. construye la imagen especular de un n´ umero binario. Es decir, si recibe la cadena de entrada 100 al acabar el proceso la informaci´on que hay en la cinta es 100001. Esta m´aquina es similar a la anterior con la diferencia de que, en este caso, hay que duplicar dos tipos de s´ımbolos (0 y 1) en lugar de uno. Tambi´en en este caso los d´ıgitos se procesar´an de derecha a izquierda. Los 0’s y 1’s son reemplazados por A’s y B’s respectivamente cada vez que se procesan (duplican). Al final del proceso, en el estado q3 se reconstruye la cadena cambiando las A’s y B’s por 0’s y 1’s. Q = {q0 , q1 , q2 , q3 , q4 } F = {q4 } Σ = {0, 1} Γ = {0, 1, A, B, b} La funci´on de transici´on se define en la siguiente tabla: 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 (Par´ entesis anidados) Esta M.T. reconoce cadenas de par´entesis anidados. Las parejas de par´entesis que se van procesado se marcan convirti´endolos en *. En este caso se dispone de dos estado finales f1 y f2 que indican respectivamente si la cadena inicial es o no correcta, adem´as, a pesar de ser algo redundante se escribe en la cinta la letra ’S’ o ’N’ (si o no). Al final del proceso no se reconstruye la informaci´on inicial que, por tanto, se pierde. Esta m´aquina puede reconocer cadenas como ´estas: ((())) o (()()) pero no reconocer´ıa (()))(. Q = {q0 , q1 , q2 , q3 , f1 , f2 } F = {f1 , f2 } Σ = {(, )} Γ = {(, ), ∗, S, N, b} La funci´on de transici´on se define en la siguiente tabla:

Manuales Uex

q0 q1 q2 q3

110

7.3.

( 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 final, comprueba que no quedan ( se llega a q3 si hay m´as ( que )

Restricciones a la M.T.

La M.T. que se ha definido en la secci´on anterior es la m´as gen´erica posible. Sin embargo, veremos a continuaci´on que se le pueden imponer restricciones a la definici´on sin que esto afecte a la potencia computacional de la m´aquina.

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES

7.3. RESTRICCIONES A LA M.T.

111

Las restricciones se aplicar´an sucesivamente a: 1. el alfabeto, 2. la estructura de la cinta, y 3. la capacidad de la m´aquina para realizar diferentes operaciones (escribir, desplazarse o cambiar de estado) en una sola transici´on.

7.3.1.

M.T. con alfabeto binario

Cualquier M.T. es equivalente (esto significa que realiza la misma tarea) a una M.T. con un alfabeto binario Γ = {0, 1, b}. Para conseguirlo, ser´a necesario codificar en binario los caracteres del alfabeto original. Cada transici´on original se desglosar´a en varias transiciones de la m´aquina con alfabeto binario con el consiguiente incremento de estados intermedios, como se indica en el siguiente ejemplo: Sea Z una M.T. definida sobre el alfabeto Σ = {x, y, z, w}. Supongamos que Z � es la M.T. definida sobre un alfabeto binario, equivalente a Z, que pretendemos construir. Codificamos 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 m´aquina Z � esta transici´on se desglosar´ıa en las siguientes: 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 tama˜ no m ser´a necesario buscar n ∈ N tal que 2n−1 < m ≤ 2n de manera que todos los s´ımbolos del alfabeto de Z podr´an ser codificados mediante una cadena binaria de longitud n. El proceso que deber´a llevar a cabo Z � ser´a el siguiente:

2. Una vez reconocido el s´ımbolo, Z � deber´a retroceder como m´aximo n posiciones con el fin de poder modificar la cadena de longitud n que acaba de analizar. 3. Finalmente la cabeza de lectura/escritura deber´a desplazarse hasta llegar a la posici´on adecuada.

Manuales Uex

1. Analizar los n caracteres que representan a un s´ımbolo del alfabeto original. En el peor de los casos ser´an necesarias n transiciones y 2n + 2n−1 + . . . + 20 nuevos estados.

111

ELENA JURADO MÁLAGA

112

7.3.2.

´ TEMA 7. MAQUINAS DE TURING

M.T. con la cinta limitada en un sentido

Dada una M.T. con una cinta infinita en ambos sentidos, siempre existe una m´aquina equivalente cuya cinta est´a limitada por un extremo pero es infinita por el otro. Sea Z una M.T. con una cinta infinita en ambos sentidos. Se pueden numerar las casillas de la siguiente forma: -2 -1 1 2 Es posible construir una M.T. equivalente Z � cuya cinta tendr´a la siguiente estructura: ∗ 0 1 -1 2 -2 En Z � existe una nueva casilla, numerada con el 0, que contiene un s´ımbolo nuevo (∗). Adem´as de a˜ nadir esta nueva casilla, se ha redistribuido la informaci´ on de Z, de manera que cada casilla de Z � contiene la misma informaci´on que su correspondiente casilla de Z (la que tiene la misma numeraci´on). Veamos con un ejemplo el funcionamiento de Z � . Supongamos que f (p, x) = (q, y, D) es una de las transiciones de Z y supongamos que x est´a almacenado en la casilla n(n > 0), despu´es de realizar el cambio de s´ımbolo hay que desplazarse a la casilla n + 1 (que ahora est´a situada dos posiciones a la derecha de n). En la m´aquina Z � est´a transici´on se desglosar´ıa en las siguientes: f � (p, x) = (pD , y, D) f � (pD , ?) = (q, ?, D) ? es un comod´ın que representa a cualquier s´ımbolo El comportamiento de Z � ser´ıa 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 transici´on anterior se desglosar´ıa en: f � (p, x) = (p�D , y, I) f � (p�D , ?) = (q, ?, I) Si la posici´on ocupada por x fuera la -1, habr´ıa que a˜ nadir una transici´on al pasar por la posici´on 0. f � (q, ∗) = (q, ∗, D) En general, la nueva m´aquina tiene un n´ umero de estados 6 veces mayor que Z 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 ).

Manuales Uex

7.3.3.

112

M.T. con restricciones en cuanto a las operaciones que realiza simult´ aneamente

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

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES

7.4. MODIFICACIONES DE LA M.T.

113

Veamos, con diferentes ejemplos, como, aumentando el n´ umero de estados, se puede restringir el n´ umero de operaciones que se realizar´an simult´aneamente. Imposibilidad para escribir y cambiar de estado simult´ aneamente La transici´on f (p, x) = (q, y, D) se convierte en: f � (p, x) = (pxD , x, P ) f � (pxD , x) = (pxD , y, P ) f � (pxD , y) = (q, y, D) Imposibilidad para escribir y desplazarse simult´ aneamente La transici´on f (p, x) = (q, y, D) se convierte en: f � (p, x) = (pD , y, P ) f � (pD , y) = (q, y, D) De forma an´aloga, dada una M.T. es posible construir otra equivalente a ella que ejecute una sola operaci´on en cada transici´on.

7.4.

Modificaciones de la M.T.

Una de las razones de la gran aceptaci´on de la M.T. como modelo general de computaci´on es que el modelo est´andar definido al comienzo del tema es equivalente a otras versiones de M.T. que, sin aumentar el poder computacional del dispositivo, permiten resolver con m´as facilidad determinados problemas.

7.4.1.

Almacenamiento de informaci´ on en el control finito

Es posible utilizar el estado de control (perteneciente a un conjunto finito) para almacenar una cantidad finita de informaci´on. Para ello cada estado se representa como un par ordenado donde el primer elemento representa realmente al estado y el segundo a la informaci´on que se pretende almacenar. Veamos su utilidad con un ejemplo en el que se define 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 definidas 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} 0 [q1 , 0]0D [q1 , 1]0D

1 [q1 , 1]1D [q1 , 0]1D

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

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

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

Manuales Uex

[q0 , b] [q1 , 0] [q1 , 1]

113

ELENA JURADO MÁLAGA ´ TEMA 7. MAQUINAS DE TURING

114

7.4.2.

Pistas m´ ultiples

En este caso se considera que la cinta est´a dividida en un n´ umero k de pistas, de 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 s´olo hay un cambio en la representaci´on de los s´ımbolos de la M.T. En este sentido, es un caso an´alogo al anterior. Esta variaci´on de la M.T., concretamente con tres pistas, puede resultar muy u ´ til para resolver operaciones aritm´eticas con dos datos. Cada dato se almacena en una pista y el resultado se almacena en la tercera (que inicialmente est´a vac´ıa). Por ejemplo, una M.T. que sume n´ umeros binarios comenzar´ıa con la siguiente informaci´on en la cinta: b b b

1 1 b

1 1 b

0 1 b

b b b

0 1 1

b b b

y finalmente la cinta quedar´ıa as´ı:

b

b b 1

1 1 1

1 1 0

Ejemplos de transiciones para esta m´aquina:    0 0 f (q0 ,  1 ) = (q0 ,  1  , I) b 1 

Manuales Uex

7.4.3.

114

   0 0 f (q0 ,  0 ) = (q0 ,  0  , I) b 0 

S´ımbolos de chequeo

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 sustituy´endolos por otros diferentes, sin embargo esta misma idea puede llevarse a cabo de una forma m´as intuitiva y sencilla utilizando en la cinta una segunda pista en la que s´olo se almacenan espacios en blanco y otro s´ımbolo (por ejemplo, ∗) que s´olo aparece debajo del s´ımbolo de la primera pista (la original) que ha sido procesado. Esto no es m´as que un caso particular de una M.T. con pistas m´ ultiples. Veamos en el siguiente ejemplo como se utilizar´ıan estos s´ımbolos de chequeo para resolver el problema planteado en el ejemplo 3 en el que la M.T. duplicaba el n´umero de 1’s que hab´ıa en la cinta inicialmente. Ejemplo 7.6 (Duplicar - segunda versi´ on) Q = {q0 , q1 , q2 } F = {q2 } Σ = {1} Γ = {0, 1, b}

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES

7.4. MODIFICACIONES DE LA M.T.

115

El proceso comienza en el extremo derecho de la cinta y la funci´on de transici´on se define en la siguiente tabla: � 1 �b� 1 D q1 ∗ �

q0 q1

7.4.4.

� 1 �∗ � 1 I q0 ∗ � � 1 D q1 ∗ �

� b �b� b D q2 �b � 1 I q0 ∗ �

M´ aquinas multicinta

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 dem´as. Para comprobar que este tipo de m´aquinas no aumenta el poder computacional de la M.T. est´andar se puede construir una m´aquina equivalente a ella utilizando varias pistas y s´ımbolos de chequeo. Supongamos que la m´aquina Z dispone de tres cintas y una situaci´on concreta puede ser representada como se indica en el siguiente esquema: Ai ↑p

Bj ↑q

Ai ∗ Ck ∗

Bj ∗

Manuales Uex

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

115

ELENA JURADO MÁLAGA ´ 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 n´ umero finito de posibilidades entre las que elegir para realizar el siguiente movimiento. Cada elecci´on consiste en un nuevo estado, un s´ımbolo a grabar y una direcci´on de movimiento de la cabeza. Por ejemplo: f (q, a) = {(p1 , a, D), (p2 , b, I), (p3, a, I), . . .} Como ocurr´ıa con los Aut´omatas Finitos, el No Determinismo no a˜ nade m´as potencia a la M.T., ni siquiera la combinaci´on del No Determinismo con cualquiera de las modificaciones previamente planteadas aumenta el poder computacional de la M.T.

Manuales Uex

7.5.

116

T´ ecnicas para la construcci´ on de M.T.

De la misma forma que al programar, al dise˜ nar M.T.’s tambi´en es posible utilizar t´ecnicas de dise˜ no modular que simplifican la tarea de su construcci´on. De hecho, una M.T. puede simular el comportamiento de cualquier tipo de subrutina, incluyendo procedimientos recursivos con cualquier mecanismo conocido de paso de par´ametros. Para que una M.T. act´ ue como subrutina de otra, la idea general es que su estado final se convierta en un estado de retorno a la m´aquina que la ha llamado. La llamada se efect´ ua, por tanto, a trav´es del estado inicial de la subrutina y el retorno a trav´es de su estado final. Veamos, en primer lugar, como encadenar dos M.T. M1 y M2 de manera que primero trabaje M1 e inmediatamente despu´es lo haga M2 utilizando como entrada la salida de M1 . Para llevar a cabo este encadenamiento basta con realizar una transici´on desde el estado final de M1 hasta el inicial de M2 . Es decir, si p1 y q1 son los estados inicial y final, respectivamente de M1 y p2 y q2 son los estados inicial y final de M2 , hay que incluir la transici´on f (q1 , x) = (p2 , x, P ) ∀x ∈ Γ. Por ejemplo, si deseamos construir una M.T.M que calcule la funci´on f () = 2x2 , podr´ıamos construir M1 que calcule g(x) = x2 y M2 que calcule h(x) = 2x, as´ı M ser´ıa el resultado de encadenar M1 con M2 . En ocasiones s´olo es deseable que trabaje M2 si el proceso de M1 ha terminado a bajo ciertas condiciones (simulaci´on de una sentencia if ). Por ejemplo M1 −→ M2 indica que M2 s´olo trabajar´a en el caso de que al acabar M1 , la cabeza de lect./esc. a,b est´e situada sobre el s´ımbolo a. De la misma forma, M1 −→ M2 indica que M2 s´olo trabajar´a en el caso de que al acabar M1 la cabeza de lec./esc. est´e situada sobre una celda que contiene al s´ımbolo a o al s´ımbolo b. En este segundo caso, habr´ıa que a˜ nadir las siguientes transiciones: f (q1 , a) = (p2 , a, P ) f (q1 , b) = (p2 , b, P )

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES ´ ´ DE M.T. 7.5. TECNICAS PARA LA CONSTRUCCION f (q1 , x) = (f, x, P ) El esquema M1

a�

117

∀x ∈ Γ\{a, b} donde f es un nuevo estado final. M2

indica que si al acabar el proceso, M1 est´a se˜ nalando b� M3 a una celda que contiene el s´ımbolo a, la m´aquina M2 debe continuar el proceso, pero si la casilla contiene el s´ımbolo b, ser´a M3 la m´aquina que continuar´a trabajando. En otro caso el proceso finaliza. Para materializar esta situaci´on habr´ıa que a˜ nadir las 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 final. Ejemplo 7.7 (Multiplicar) Este ejemplo servir´a para ilustrar la utilizaci´on de una M.T. como subrutina de otra. Se construir´a una M.T. que multiplique n´ umeros enteros, que se representan como cadenas de 1’s. Por ejemplo, un 4 se representa como 1111. Se utiliza el 0 como separador entre los datos iniciales. La M.T. se dise˜ nar´a de manera que si la entrada es 1m 01n 0 la salida deber´a ser 1n×m . B´asicamente, la M.T. copiar´a al final de la cadena el segundo bloque de 1’s (1n ) tantas veces como 1’s haya en el primer bloque (1m ), los 1’s de este primer bloque se van borrando (es una forma sencilla de marcarlos). En primer lugar, se dise˜na una M.T., llamada COPIAR que copia al final de la cadena de entrada n 1’s. Es decir, si la situaci´on inicial de la M.T. se describe as´ı 1m 0q1 1n 01i, la situaci´on final ser´a 1m 0q5 1n 01i+n . Los 1’s (del segundo bloque) que se van copiando se marcan cambi´andolos temporalmente por un 2, y adem´as se procesan de izquierda a derecha. La funci´on de transici´on de COPIAR se define en la siguiente tabla, adem´as q1 y q5 son respectivamente los estados inicial y final: 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 a˜nade un 1 se desplaza hacia la izq. buscando un 2 cambia los 2’s por 1’s

A continuaci´on, se dise˜ na la M.T. MULTIPLICAR que utiliza la m´aquina COPIAR a modo de subrutina. La M.T. MULTIPLICAR va borrando los 1’s del primer dato al mismo tiempo que, mediante la M.T. COPIAR, copia n 1’s al final de la cadena. Cuando se han borrado todos los 1’s del primer dato se borran tambi´en los del segundo as´ı como los 0’s que act´ uan de separadores de manera que finalmente en la cinta s´olo queda el resultado de la operaci´ on (1n×m ). En este caso los estados inicial y final son q0 y q12 .

Manuales Uex

q1 q2 q3 q4

117

ELENA JURADO MÁLAGA ´ TEMA 7. MAQUINAS DE TURING

118 0 q0 q5 q6 q7 q8 q9 q10 q11

7.6.

q1 0D q8 0I

q11 bD q12 bD

1 q6 bD q7 1I q6 1D

b

q9 1I q9 1I

q10 bD q0 bD

q11 bD

elimina un 1 del primer dato llama a COPIAR

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

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 m´aquina se la llama M´aquina de Turing Universal, y su forma de trabajar puede compararse con la de un ordenador que se comporta de una u otra forma dependiendo del programa que ejecuta en cada momento. En primer lugar, veremos c´omo se podr´ıa representar toda la informaci´on necesaria para simular el comportamiento de una M.T. llamada M. Es necesario conocer la funci´on de transici´on, el estado inicial, el contenido inicial de la cinta y la posici´on de la cabeza de lectura/escritura. Sin perdida de generalidad supondremos que M trabaja con un alfabeto binario y que necesitamos m bits para codificar cada uno de sus estados. El movimiento de la cabeza se puede codificar con un u ´ nico bit (por ejemplo, 0=Derecha, 1=Izquierda). As´ı cada transici´on f (p, a) = (q, b, D) puede codificarse con 2m + 3 s´ımbolos binarios de la forma xx . . . x� a yy . . . y b0, donde xx . . . x es una codificaci´on binaria del estado p y yy . . . y � �� � �� � m

m

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

Manuales Uex

dd . . . ∗ . . . d < q . . . qd > xx . . . xayy . . . yb0 > xx . . . xayy . . . yb0 > . . .

118

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 informaci´on va cambiando a lo largo del proceso 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 a la derecha del asterisco en el bloque anterior. Esta informaci´on tiene longitud m + 1 y tambi´en cambia a lo largo del proceso. A partir de este punto,

TEORÍA DE AUTÓMATAS 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 funci´on de transici´on. Cada transici´on puede considerarse como un registro formado por dos partes: la primera (xx . . . xa) es una etiqueta que identifica a la transici´on, la segunda (yy . . . yb0) puede ser considerada como el dato de la transici´on. Por lo tanto, esta u ´ltima parte de la cadena (> xx . . . xayy . . . yb0 > . . .) puede ser vista como una colecci´on de registros formados cada uno de ellos por una etiqueta y un dato. Con estas consideraciones, ser´a necesario construir una M.T. localizadora de informaci´ on cuya misi´on sea buscar en esta colecci´on de registros aqu´el que tenga una etiqueta determinada. Es evidente que, conociendo el significado de los datos que hay en la cinta, el segundo bloque de informaci´on (< q . . . qd >) constituye la etiqueta que es necesario buscar. Una vez localizado el registro (transici´on) adecuado ser´a necesario copiar el dato (yy . . . yb) en el segundo bloque de la cinta, y modificar adecuadamente el primer bloque. B´asicamente, la M.T. Universal est´a constituida por una M.T. que localiza informaci´on en la cinta y otra que copia informaci´on de una parte a otra de la cinta.

7.7.

La M.T. como generadora de lenguajes

En los ejemplos de M.T. que hemos visto hasta ahora, ´estas b´asicamente se ocupaban 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´ıa, s´olo se llevan a cabo operaciones de escritura que van llenando la cinta con las palabras del lenguaje. Es necesario utilizar un s´ımbolo, que no pertenece al alfabeto sobre el que est´a definido el lenguaje, y que act´ ua como separador entre 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 informaci´on que habr´ıa en la cinta de salida ser´ıa: b

0



1



0

0



0

1



...

Es evidente que este tipo de M.T.’s s´olo para en el caso de que el lenguaje a generar sea finito, por tanto, la m´aquina descrita en el ejemplo anterior no parar´ıa nunca. Para los lenguajes de tipo 0, que se estudian con m´as detalle en el pr´oximo tema, 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˜ nos, es decir, el tama˜ no de la palabra generada en la posici´on n + 1 es mayor o igual que el de la

Manuales Uex

...

119

ELENA JURADO MÁLAGA ´ TEMA 7. MAQUINAS DE TURING

120 generada en la posici´on n.

7.8.

La tesis de Church-Turing

Podemos decir que una M.T. es un modelo general de computaci´on y esto es equivalente a decir que cualquier procedimiento algor´ıtmico que sea ejecutable (por una persona o una m´aquina) puede ser desarrollado por una M.T. “La noci´on de procedimiento algor´ıtmico que act´ ua sobre una secuencia de s´ımbolos es id´entica al concepto de un proceso que puede ser ejecutado por una M.T.” Esta afirmaci´on la formul´o el l´ogico Alonzo Church a principios de la d´ecada de los 30 y suele denominarse tesis de Church o tesis de Church-Turing. No es una afirmaci´on matem´atica exacta, ya que carecemos de una definici´on precisa para el t´ermino 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 ning´ un tipo de computo que pueda incluirse en la categor´ıa de procedimiento algor´ıtmico y que no pueda ejecutarse en una M.T. 2. Se han propuesto mejoras al dise˜ no de la M.T. original y en todos los casos ha sido posible demostrar que el poder computacional de las M.T.’s no se ve´ıa modificado. 3. Se han propuesto otros modelos te´ oricos de c´omputo, que siempre son equivalentes al de las M.T.’s La tesis de Church-Turing no puede probarse de manera precisa debido justamente a la imprecisi´on del t´ermino proceso algor´ıtmico. Sin embargo, una vez adoptada esta tesis, ya podemos darle un significado preciso al t´ermino: “un algoritmo es un procedimiento que puede ser ejecutado por una M.T.” Esta definici´on nos proporciona 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

Manuales Uex

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

120

7.2 Construir una M.T. con tres pistas que reciba dos n´umeros binarios y que indique cu´al de los dos es mayor. Consideraremos que los datos est´an almacenados en las dos primeras pistas y alineados a la derecha, es decir, los bits menos significativos de ambos est´an situados en la misma columna. En la tercera pista se escribir´a una

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES

7.9. PROBLEMAS

121

G, una P o una I indicando respectivamente que el primer n´ umero es m´as grande, m´as peque˜ no o igual que el segundo. 7.3 Construir una M.T. con tres pistas que sume dos n´umeros binarios. Consideraremos que los datos est´an almacenados en las dos primeras pistas y alineados a la derecha. El resultado se escribir´a en la tercera pista que inicialmente est´a vac´ı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)∗ }

Manuales Uex

L3 = {wcw �/ w, w � ∈ (a + b)∗ w �= w � }

121

Tema 8 Gram´ aticas de tipo 0 y 1 Contenido 8.1. Gram´ aticas de tipo 0 . . . . . . . . . . . . . . . . . . . . . 123 8.2. Lenguajes de tipo 0 . . . . . . . . . . . . . . . . . . . . . . 124 8.3. El problema de la parada . . . . . . . . . . . . . . . . . . . 126 8.4. Lenguajes y gram´ aticas de tipo 1 . . . . . . . . . . . . . . 126

Este cap´ıtulo se dedica al estudio de las gram´aticas menos restrictivas, las de tipo 0 y las de tipo 1. Los aut´omatas que reconocen estas gram´aticas son las M´aquinas de Turing (estudiadas en el cap´ıtulo anterior) y los Aut´omatas Linealmente Acotados respectivamente. La diferencia principal entre ambos aut´omatas est´a en el tama˜ no de la cinta que utilizan. Mientras que la M´aquina de Turing dispone de una cinta te´oricamente infinita, los Aut´omatas Linealmente Acotados utilizan una cinta finita, aunque su longitud pueda ser tan grande como sea necesario en cada caso.

Gram´ aticas de tipo 0

Dentro de la jerarqu´ıa de Chomsky, el grupo m´as amplio de gram´aticas, llamadas gram´aticas de tipo 0 y tambi´en gram´aticas sin restricciones son aquellas cuyas producciones tienen la siguiente forma: u ::= v u ∈ Σ+ v ∈ Σ∗ adem´as u = xAy donde A ∈ ΣN x, y ∈ Σ∗ Es decir, en la parte izquierda de las producciones hay, al menos, un s´ımbolo no terminal. Este conjunto de gram´aticas es equivalente al de gram´aticas con estructura de frase, cuya definici´on es algo m´as restringida. Las producciones de las gram´aticas con estructura de frase son de la forma: 123

Manuales Uex

8.1.

123

ELENA JURADO MÁLAGA ´ TEMA 8. GRAMATICAS DE TIPO 0 Y 1

124

xAy ::= xvy

donde

A ∈ ΣN

x, y, v ∈ Σ∗

En estas gram´aticas es posible que la parte derecha de la producci´on sea m´as corta que la izquierda (cuando v = λ), en este caso se dice que es una producci´on compresora. Una gram´atica compresora es la que tiene alguna regla compresora, en este caso las derivaciones pueden ser decrecientes. El conjunto de los lenguajes generados por las gram´aticas de tipo 0 coincide con el conjunto de los generados por las gram´aticas con estructura de frase y se llaman lenguajes recursivamente enumerables. Estos lenguajes son reconocidos por M´aquinas de Turing. Ejemplo 8.1 La gram´atica de tipo 0 que se describe a continuaci´on genera el lenguai 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 gram´atica no tiene estructura de frase (debido, por ejemplo, a la quinta y s´eptima producciones), sin embargo es posible encontrar una gram´atica con estructura de frase que sea equivalente a ella.

Manuales Uex

8.2.

124

Lenguajes de tipo 0

Como ya sabemos, los lenguajes generados por las gram´aticas de tipo 0 se llaman lenguajes recursivamente enumerables y son los reconocidos por las M´aquinas de Turing. Pero, adem´as, estos lenguajes tambi´en pueden ser generados por M´aquinas de Turing. El nombre de recursivamente enumerables es debido a que sus palabras pueden ser generadas ordenadamente por una M´aquina de Turing. Dicho de otra forma, existe un algoritmo que permite generar sus palabras una tras otra. Evidentemente, si el lenguaje es infinito, la M´aquina de Turing que lo genera no para nunca. 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 M´aquina de Turing que lo reconozca no parar´a cuando reciba como entrada algunas palabras que no pertenecen a L. En este caso, si w ∈ L sabemos que la M.T. parar´a, pero si

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES

8.2. LENGUAJES DE TIPO 0

125

la m´aquina no para, no podemos saber si el motivo es que la palabra no pertenece al lenguaje o es que todav´ıa no ha terminado el proceso de reconocimiento. 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 M´aquinas de Turing que paran siempre, sea cual sea la entrada que reciban. Por supuesto, la parada de la m´aquina debe ir precedida por la aceptaci´on o no de la palabra. En el caso de los lenguajes recursivos siempre es posible dise˜ nar una M´aquina de Turing que genere las palabras del lenguaje seg´ un un orden creciente de tama˜ no. A continuaci´on veremos unos resultados que, entre otras cosas, demuestran que la uni´on es una operaci´on cerrada para estos dos conjuntos de lenguajes. 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 Demostraci´ on. 1. Si L y L son recursivamente enumerables existen dos M´aquinas de Turing M1 y M2 que reconocen respectivamente las palabras de L y L. A partir de M1 y M2 es posible construir una nueva m´aquina M que se limitar´ıa a anotar cu´al de las dos m´aquinas M1 o M2 acepta a la cadena de entrada. Evidentemente M reconoce a L (y tambi´en a L) y adem´as para, sea cual sea la entrada, por lo que L (y tambi´en L) es un lenguaje recursivo. Si L no fuera recursivo, no podr´ıamos construir M, ya que tampoco podr´ıamos construir M2 . M1 resulta insuficiente para construir M, ya que, en el caso de que M1 no pare no es posible saber si la m´aquina ha entrado en un bucle infinito o si necesita m´as tiempo para procesar la cadena.

2. Si L es recursivo la misma M.T. que lo reconoce permite reconocer a L, basta con intercambiar el significado de las salidas. 3. Si L y L son recursivos existen dos M´aquinas de Turing M1 y M2 que reconocen respectivamente las palabras de L y L. A partir de M1 y M2 es posible construir

Manuales Uex

Si L es recursivo es evidente que tambi´en es recursivamente enumerable, adem´as podemos afirmar que L tambi´en es recursivamente enumerable ya que la M.T. que reconoce a L tambi´en permitir´ıa reconocer a L.

125

ELENA JURADO MÁLAGA ´ TEMA 8. GRAMATICAS DE TIPO 0 Y 1

126

una nueva m´aquina M que permita reconocer a las palabras de L1 ∪L2 . Adem´as esta m´aquina parar´ıa siempre. 4. Si L y L son recursivamente enumerables existen dos M´aquinas de Turing M1 y M2 que reconocen respectivamente las palabras de L y L. A partir de M1 y M2 es posible construir una nueva m´aquina M que permita reconocer a las palabras de L1 ∪ L2 . No es posible asegurar que M parar´a cuando reciba como entrada una palabra que no pertenezca a L1 ∪ L2 , ya que en ese caso es posible que no paren ni M1 ni M2 . �

8.3.

El problema de la parada

Dada una M´aquina de Turing con un dato en la cinta de entrada, no existe ning´ un algoritmo que permita conocer a priori si la m´aquina se detendr´a o no. Este problema es, por ese motivo, indecidible. Este problema puede enunciarse de otra forma. Teniendo en cuenta que el conjunto de las M´aquinas de Turing puede enumerarse, es posible asociar a cada m´aquina un n´ umero natural. ¿Es posible construir una M´aquina de Turing H que tome como datos de entrada al par (n, x) donde n representa a la m´aquina pn y x a un dato para esa m´aquina, y devuelva 1 o 0 dependiendo de si la m´aquina pn para o no teniendo a x como dato? La respuesta a esta pregunta es negativa, no es posible construir dicha m´aquina. Para demostrarlo utilizaremos la t´ecnica de reducci´ on al absurdo. Supongamos que E es un lenguaje recursivamente enumerable pero no recursivo (sabemos que existen). Sea M = pr la M´aquina de Turing que reconoce a E, esta m´aquina no para cuando recibe como entrada algunas de las palabras que no pertenecen a E. Por hip´otesis H deber´ıa comportarse de la siguiente forma: 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)

Manuales Uex

De esta manera H permitir´ıa reconocer las palabras del lenguaje E y adem´as parar´ıa siempre, pero entonces E ser´ıa un lenguaje recursivo, lo cual es falso por hip´otesis. Por lo que podemos concluir que es imposible construir H.

126

8.4.

Lenguajes y gram´ aticas de tipo 1

Las gram´aticas de tipo 1 de la jerarqu´ıa de Chomsky, tambi´en llamadas gram´aticas dependientes (o sensibles) al contexto son aquellas cuyas producciones tienen la forma:

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES ´ 8.4. LENGUAJES Y GRAMATICAS DE TIPO 1

xAy ::= xvy

donde

A ∈ ΣN

127

x, y ∈ Σ∗

v ∈ Σ+

Manuales Uex

Es decir, en cada derivaci´on, un s´ımbolo no terminal A se sustituye por una cadena v (no nula), siempre que ´este se encuentre en un determinado contexto. Se puede incluir la producci´on S ::= λ, necesaria cuando λ pertenece al lenguaje. Es evidente que el conjunto de las gram´aticas de tipo 1 est´a incluido en el conjunto de las gram´aticas con estructura de frase y que no admiten producciones compresoras. Los lenguajes de tipo 1 pueden ser reconocidos por Aut´omatas Linealmente Acotados. Estos aut´omatas constituyen un caso particular de las M´aquinas de Turing en el que la cinta est´a acotada por ambos lados. Para ello, se definen dos s´ımbolos de la cinta especiales (por ejemplo: < y >) que delimitan el principio y el final de la zona u ´til de la cinta que puede ser manipulada. La cabeza de lectura/escritura no podr´a desplazarse m´as a la izquierda del s´ımbolo que indica el comienzo de dicha zona u ´til ni m´as a la derecha del s´ımbolo que indica el final. Por tanto, los Aut´omatas Linealmente Acotados disponen de una cinta finita pero con un tama˜ no que puede ser tan grande como sea necesario para el proceso.

127

128

´ TEMA 8. GRAMATICAS DE TIPO 0 Y 1

Tema 9 Computabilidad y M´ aquinas de 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 definici´on de m´aquina de Turing podremos plantear una definici´ on formal para este concepto. Tambi´en estudiaremos el concepto de recursividad y su relaci´on con el de calculabilidad.

Funciones calculables

La Teor´ıa de la Computabilidad parte de la idea inicial de hacer precisa la noci´on intuitiva de funci´on calculable, es decir, una funci´on que pueda ser calculada autom´aticamente mediante un algoritmo. Dada una funci´on f : Nr −→ N , a veces es posible construir una M´aquina de Turing Zf que se comporte como dicha funci´on. Es decir, si Zf inicia su funcionamiento con la siguiente informaci´on en la cinta 11 . . . . 1� 0 . . . 0 11 . . . 1�, donde cada ristra de unos representa a un n´ umero � ��. . 1� 0 �11 �� � �� n1

n2

nr

natural, la m´aquina debe detenerse dejando en la cinta un n´ umero α de unos, siendo f (n1 , n2 , . . . , nr ) = α. Es posible que para una tupla concreta la m´aquina no se detenga, en ese caso la funci´on no estar´ıa definida para esos valores. 129

Manuales Uex

9.1.

129

ELENA JURADO MÁLAGA ´ TEMA 9. COMPUTABILIDAD Y MAQUINAS DE TURING

130

Definici´ on 9.1 (Funci´ on parcialmente calculable) Se dice que una funci´on f : D ⊂ Nr −→ N es parcialmente calculable si existe una M´aquina de Turing tal que para cada tupla t ∈ D, la m´aquina calcula f (t) Definici´ on 9.2 (Funci´ on calculable) Se dice que una funci´on es calculable si es parcialmente calculable y est´a definida 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 definiciones anteriores pueden ampliarse de forma natural a funciones definidas sobre otros conjuntos, por ejemplo, definidas 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 ⊆ Σ∗ , definimos su funci´on caracter´ıstica de la siguiente forma: fL : Σ∗ −→ N w

−→ fL (w) =



1 0

si w ∈ L si w ∈ /L

La funci´on caracter´ıstica de un lenguaje determina si una palabra pertenece o no pertenece a dicho lenguaje. Tambi´en es posible definir una funci´on que s´olo indique si una palabra pertenece a un lenguaje, dicha funci´on no estar´ıa definida en todo el dominio y se comportar´ıa de la siguiente forma: fL� : Σ∗ −→ N w −→ fL� (w) = 1 si w ∈ L

Manuales Uex

Considerando estas definiciones, podemos afirmar que:

130

Si L es un lenguaje recursivo, su funci´on caracter´ıstica es calculable. Si L es un lenguaje recursivamente enumerable, entonces es el dominio de una funci´on parcialmente calculable (fL� ).

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES

9.2. FUNCIONES RECURSIVAS

131

Ejemplo 9.2 (Funci´ on no calculable) En este ejemplo no s´olo presentaremos una funci´on no calculable sino tambi´en un lenguaje que no es recursivo y otro que ni siquiera es recursivamente enumerable. El conjunto de todas las M´aquinas de Turing asociadas a funciones definidas de N en N es infinito pero numerable, basta tener en cuenta que una M.T. cualquiera puede describirse como una cadena finita de s´ımbolos (tal y como se explic´o en la definici´on de la M´aquina de Turing Universal) as´ı como el m´etodo que G¨odel propuso para enumerar objetos que inicialmente no parecen ser enumerables (p´agina 106). Por tanto, podemos describir dicho conjunto de M.T.’s de la siguiente forma: MT = {p0 , p1 , . . . , pn , . . .}

A partir de dicha lista de m´aquinas, podr´ıamos definir la siguiente funci´on: 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 M´aquina de Turing que realiza el mismo trabajo que f . Consideremos que pr sea esta m´aquina. 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 m´aquina pr

9.2.

Funciones recursivas

La recursi´on consiste en definir un concepto en t´erminos de si mismo. Esta idea puede aplicarse a las definiciones de funciones, de conjuntos y, en particular, de lenguajes.

Manuales Uex

En cualquiera de los dos casos, la situaci´on que se produce es absurda ya que f y pr no tienen el mismo comportamiento, por lo tanto, la suposici´on inicial es falsa y f no es una funci´on calculable. El conjunto L1 = {n ∈ N/ pn no para si recibe como dato a n} no es recursivamente enumerable y adem´as, el conjunto L2 = L1 es recursivamente enumerable pero no es recursivo. Veamos, a continuaci´on, como justificar estas afirmaciones. En la secci´on 8.3 qued´o demostrado que L1 no es un lenguaje recursivamente enumerable, 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 M´aquina de Turing Universal permite saber si un n´ umero pertenece 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).

131

ELENA JURADO MÁLAGA ´ TEMA 9. COMPUTABILIDAD Y MAQUINAS DE TURING

132

A continuaci´on veremos una primera definici´on de funci´on recursiva. Definici´ on 9.3 (Funci´ on recursiva) Una funci´on f : Nn −→ N se considera recursiva si tiene los siguientes elementos: Definiciones b´asicas que establecen de manera axiom´atica el valor que toma la funci´on para determinados valores del conjunto origen. Por ejemplo, f act(0) = 1. Una o m´as reglas recursivas que permiten calcular nuevos valores de la funci´on a partir de otros valores conocidos. Por ejemplo, f act(n) = n × f act(n − 1),

n≥1

Aplicar las definiciones b´asicas y las recursivas un n´ umero finito de veces debe ser suficiente para calcular cualquier valor de la funci´on. A pesar de que esta definici´on es muy intuitiva no es lo suficientemente estricta como para definir los casos m´as complejos de recursividad. Por este motivo, se introducir´an en las siguientes secciones, los conceptos de funci´on recursiva primitiva y funci´on µ-recursiva. Diremos que una funci´on recursiva es total si est´a definida para todos los valores del conjunto origen y parcial si lo est´a s´olo para un subconjunto propio del conjunto origen. Para definir un conjunto de manera recursiva se especifican ciertos objetos del conjunto y luego se describen uno o m´as m´etodos generales que permiten obtener nuevos elementos a partir de los existentes. Por ejemplo, podemos definir recursivamente el lenguaje Σ∗ as´ı: λ ∈ Σ∗ Para cada w ∈ Σ∗ y cada a ∈ Σ tenemos que aw ∈ Σ∗

9.2.1.

Funciones recursivas primitivas

Es posible definir las funciones recursivas utilizando s´olo funciones b´asicas y ciertas reglas que permiten mezclar funciones para construir otras m´as complejas. Las funciones consideradas b´asicas (Kleene) son las siguientes:

Manuales Uex

Funci´ on constante 0 Su valor es independiente del argumento.

132

C(x) = 0, ∀x ∈ N Funci´ on sucesor A cada n´ umero natural le hace corresponder su sucesor siguiendo 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 definido formalmente, por eso no puede ser utilizada en esta definici´on.

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES

9.2. FUNCIONES RECURSIVAS

133

Funciones de proyecci´ on Reciben n argumentos y devuelven el argumento i-esimo, es decir la proyecci´on sobre la dimensi´on i. Pin (x1 , . . . , xn ) = xi A continuaci´on veremos dos reglas que nos permitir´an construir funciones m´as complejas a partir de las b´asicas. Definici´ on 9.4 (Regla de composici´ on) Dadas las siguientes funciones: α1 , . . . , αm , β definidas como αi : Nn −→ N

β : Nm −→ N

Se define la composici´on de estas m + 1 funciones como φ : Nn −→ N tal que, φ(x1 , . . . , xn ) = β(α1 (x1 , . . . , xn ), . . . , αm (x1 , . . . , xn )) Definici´ on 9.5 (Regla de recursi´ on primitiva) Dadas dos funciones: α, β definidas como α : Nn −→ N β : Nn+2 −→ N Se puede definir a partir de ellas, una nueva funci´on φ : Nn+1 −→ N tal que, φ(0, x1 , . . . , xn ) = α(x1 , . . . , xn ) φ(y + 1, x1 , . . . , xn ) = β(y, φ(y, x1, . . . , xn ), x1 , . . . , xn ) En el caso particular de que n = 0, φ se define as´ı: φ(0) = k φ(y + 1) = β(y, φ(y)) Definici´ on 9.6 Decimos que una funci´on es recursiva primitiva si se puede definir a partir de las funciones b´asicas mediante cero o m´as aplicaciones de las reglas de composici´on y de recursi´on primitiva. Aunque el n´ umero de funciones recursivas primitivas es muy amplio, existen algunas funciones recursivas que no son primitivas. Un ejemplo es la funci´on de Ackermann, que se define de la siguiente forma: A(0, x) = x + 1 A(n + 1, x + 1) = A(n, A(n + 1, x)) Por este motivo debemos incluir otra regla para la generaci´on de funciones recursivas que nos permitir´a ampliar su n´ umero, de esta manera llegamos a la definici´ on de funci´on µ-recursiva.

Manuales Uex

A(n + 1, 0) = A(n, 1)

133

ELENA JURADO MÁLAGA ´ TEMA 9. COMPUTABILIDAD Y MAQUINAS DE TURING

134

9.2.2.

Funciones µ-recursivas

Para ampliar el n´ umero de funciones que podemos generar a partir de las funciones recursivas primitivas, a˜ nadiremos una nueva regla de composici´on: la minimizaci´on. Definici´ on 9.7 (Regla de minimizaci´ on) Dada la funci´on: α : Nn+1 −→ N se define la funci´on de minimizaci´on φ : Nn −→ N tal que, φ(x1 , . . . , xn ) = min{y/α(x1 , . . . , xn , y) = 0 ∧ ∀z < y, φ(x1, . . . , xn , y)est´a definida} En otras palabras, φ hace corresponder a cada entrada x el menor entero que cumple que α(x, y) = 0. Definici´ on 9.8 (Funci´ on µ-recursiva) Decimos que una funci´on es µ-recursiva, o simplemente recursiva, si se puede definir a partir de las funciones b´asicas mediante cero o m´as aplicaciones sucesivas de las reglas de composici´on, recursi´on primitiva y minimizaci´on. El concepto de recursividad est´a ´ıntimamente unido al de computabilidad, ya que toda funci´on computable es µ-recursiva. Adem´as, el conjunto de las m´aquinas de Turing es equivalente al de las funciones µ-recursivas. Es decir un problema se puede resolver mediante m´aquinas de Turing si y s´olo si se puede plantear utilizando funciones recursivas.

9.3.

Problemas

9.1 Define recursivamente las siguientes funciones: 1. La suma de dos n´ umeros enteros 2. La multiplicaci´on de dos n´ umeros enteros 9.2 Define recursivamente los siguientes lenguajes: 1. L1 = {ww − 1/w ∈ (0 + 1)∗ }

Manuales Uex

2. L2 = {0n 1n /n ≥ 0}

134

3. Dado el alfabeto Σ = {i, (, ), +, −}, considera el lenguaje formado por expresiones aritm´eticas que pueden o no tener par´entesis. Por ejemplo: (i + i),

i + i,

(i + i) − (i + i), etc.

9.3 Demuestra que las siguientes funciones son recursivas primitivas:

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES

9.3. PROBLEMAS

135

1. La funci´on constante K(x)= k 2. La funci´on predecesor, P (x) =



x−1 x>1 0 x=0

3. La funci´on suma 4. La funci´on producto 5. La funci´on sustracci´on propia, sp(x, y) =



x−y x>y 0 x≤y

6. La funci´on sustracci´on absoluta, sa(x, y) = |x − y| 7. Las funciones m´aximo y m´ınimo 8. La funci´on signo, 1 x>0 0 x=0

Manuales Uex

sg(x) =



135

Tema 10 Introducci´ on a la Complejidad Computacional Contenido 10.1. Complejidad y M´ aquinas de Turing . . . . . . . . . . . . 137 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˜ no. Sin embargo, no todos los problemas computables son factibles en la realidad por requerir a veces demasiados recursos, ya sean de espacio de memoria o de tiempo. La teor´ıa de la complejidad algor´ıtmica es la encargada de definir los criterios b´asicos para saber si un problema computable es factible, dicho de otro modo, si existe un algoritmo eficiente para su resoluci´on y en este caso cu´al es su grado de eficiencia.

Complejidad y M´ aquinas de Turing

Hasta este momento hemos analizado si los problemas son solubles o insolubles, es decir, si pueden o no ser resueltos mediante una m´aquina de Turing (un algoritmo). 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 secci´on introduciremos una terminolog´ıa que nos permitir´a analizar preguntas como ¿cu´anto tiempo tardaremos en resolver un problema? 137

Manuales Uex

10.1.

137

ELENA JURADO MÁLAGA

138

´ A LA COMPLEJIDAD COMPUTACIONAL TEMA 10. INTRODUCCION

A priori, establecer un criterio universal para poder saber cu´an eficiente es un algoritmo no es sencillo porque un mismo problema puede resolverse sobre diferentes tipos de m´aquinas, con diferentes grados de eficiencia. La eficiencia de un algoritmo est´a en funci´on del tiempo y de la cantidad de memoria que se necesite para ejecutar el programa, y esto a su vez depende del hardware utilizado. Sin embargo, la M´aquina de Turing permite que nos liberemos de la mayor parte de estas ligaduras materiales. Recordemos que al estudiar la M´aquina de Turing no se impuso ning´ un l´ımite de espacio ni de tiempo, es decir, la M´aquina de Turing no padece limitaciones en cuanto a la longitud de la cinta utilizada ni en cuanto al n´ umero de movimientos que realiza (tiempo de ejecuci´on). Por esta raz´on utilizaremos la M´aquina de Turing para medir la complejidad de un algoritmo.

10.2.

Medidas de complejidad algor´ıtmica

La complejidad de una computaci´on se mide por la cantidad de espacio y de tiempo que consume. Las computaciones eficientes tienen unas exigencias de recursos peque˜ nas (este calificativo debe ser considerado de una manera relativa). Los recursos que necesita una computaci´on que acepta cadenas de alg´ un lenguaje, suelen depender del tama˜ no (longitud) de la cadena de entrada. En los siguientes p´arrafos consideraremos, en primer lugar, los recursos espaciales y despu´es los temporales. Si M es una m´aquina de Turing, denotaremos por L(M) al lenguaje que reconoce dicha m´aquina. Definici´ on 10.1 (Complejidad espacial) La m´aquina M con k pistas tiene una complejidad espacial S(n), si para cualquier entrada de longitud n, consulta como m´aximo S(n) casillas. Tambi´en podemos decir que M es una M´aquina de Turing espacialmente acotada por S(n), o que L(M) es un lenguaje con complejidad espacial S(n). Se cumple siempre que S(n) ≥ 1

Manuales Uex

Teorema 10.1 Si una M´aquina de Turing con k pistas y cota espacial S(n) acepta al lenguaje L, entonces existe una M´aquina de Turing con una sola pista y cota espacial S(n) que tambi´en lo acepta.

138

Es decir, el n´ umero de pistas de trabajo utilizadas para aceptar un lenguaje no afecta a la complejidad espacial de L. Definici´ on 10.2 (Clases de complejidad espacial) La familia de los lenguajes aceptados por M´aquinas de Turing deterministas con complejidad espacial S(n) se llama ESPACIOD(S(n)). La familia de los lenguajes

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES 10.2. MEDIDAS DE COMPLEJIDAD ALGOR´ITMICA

139

aceptados por M´aquinas de Turing no deterministas con esa misma complejidad espacial 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 M´aquina de Turing, el tiempo de computaci´on tambi´en lo es. Consideraremos que la complejidad temporal se mide por el n´ umero de movimientos que hace la m´ aquina. Definici´ on 10.3 (Complejidad temporal) Supongamos que M es una m´aquina de Turing que realiza como m´aximo T(n) movimientos sobre una cadena de longitud n, entonces se dice que M tiene una complejidad temporal T(n) o que es una m´aquina con una cota temporal T(n). Tambi´en se dice 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´ umero m´ınimo de movimientos necesarios para leer todos los s´ımbolos que inicialmente hay en la cinta) Definici´ on 10.4 (Clases de complejidad temporal) La familia de los lenguajes aceptados por M´aquinas de Turing deterministas con complejidad temporal T(n), es TIEMPOD(T(n)). La familia de los lenguajes aceptados por M´aquinas de Turing no deterministas con complejidad temporal T(n) es TIEMPON(T(n)). Estas clases se conocen como clases de complejidad temporal.

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

Manuales Uex

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:

139

ELENA JURADO MÁLAGA

140

´ A LA COMPLEJIDAD COMPUTACIONAL TEMA 10. INTRODUCCION

Teorema 10.4 Si L ∈ TIEMPOD(f(n)) entonces, L ∈ ESPACIOD(f(n)) Demostraci´ on. Supongamos que M es la M´aquina de Turing que reconoce a L y que realiza, como m´aximo, f (n) movimientos sobre la cadena de longitud n. Es evidente que puede inspeccionar un m´aximo de 1 + f (n) celdas, por tanto, L ∈ ESPACIOD(f(n)+1) ⇒ L ∈ ESPACIOD(f(n)). � Las funciones S(n) y T(n) que hemos utilizado no tienen porque ser una funci´on exacta, sino s´olo un indicador de la forma de variaci´on del espacio o del tiempo ocupado, en funci´on de la longitud de la entrada de datos. Habitualmente nos interesa poder comparar estas funciones con otras (habitualmente m´ as simples) de manera que las tasas de crecimiento sean an´alogas. Veamos a continuaci´on la notaci´on que se utiliza para comparar tasas de crecimiento. Definici´ on 10.5 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)

Manuales Uex

f = θ(g) si f = O(g) y g = O(f )

140

La expresi´on f = O(g) quiere decir que para valores suficientemente grandes de x, la funci´on f (x) es menor o igual a una funci´on proporcional a g. La constante de 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´a en u ´ ltima instancia menor que g(x), pero no sabemos cu´an grande tiene que ser x para que esto ocurra. Por ejemplo, si pretendemos estudiar la eficiencia de un algoritmo ejecutado por una M´aquina de Turing M, no existe una gran diferencia, a efectos pr´acticos, entre que su tiempo de ejecuci´on T(n) sea 14n2 + 25n − 4 o que sea 3n2 , ya que en ambos casos podemos decir que su tasa de crecimiento no es mayor que la de n2 , es decir, T = O(n2 ). Diremos que la m´aquina es de complejidad temporal n2 , o (n2 )-limitada en el tiempo. Las funciones anteriores tienden (cuando n → ∞) a las as´ıntotas 14n2 y 3n2 respectivamente, que son funciones del tipo cn2 . As´ı pues estamos hablando de complejidad en t´erminos asint´oticos.

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES

10.3. PROBLEMAS P, NP Y NP-COMPLETOS

141

Cuando queremos hacer referencia al crecimiento de los recursos necesarios para la ejecuci´on de un determinado algoritmo utilizaremos la notaci´on O(f(n)), que representa su comportamiento asint´otico. As´ı un tiempo de ejecuci´on 14n2 + 25n − 4, 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 polin´omicos, o de complejidad polin´omica. Los algoritmos que se comportan como 2n (en general cn ) son algoritmos exponenciales, o de complejidad exponencial. Otro aspecto diferente y muy importante dentro de la Teor´ıa de la Complejidad es el que se refiere, 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 m´ınimo una cierta cantidad de recursos, a la que se llama cota inferior.

10.3.

Problemas P, NP y NP-completos

Definici´ on 10.6 (Clases P y NP) La clase P de lenguajes esta compuesta por todos los lenguajes que acepta alguna M´aquina de Turing determinista que tiene una cota temporal polin´ omica. La clase NP se compone por todos los lenguajes que acepta alguna M´aquina de Turing no determinista con una cota temporal polin´omica. 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

Manuales Uex

Diremos que un algoritmo es eficiente si existe una M´aquina de Turing determinista que lo ejecute con una complejidad temporal polin´omica. A la clase de los algoritmos (o de los problemas que estos algoritmos resuelven) eficientes se la denomina clase P . Existen algoritmos no deterministas que no siguen un flujo fijo, sino que act´ uan en funci´on de una serie de decisiones tomadas en tiempo real. De entre los algoritmos no deterministas existe un amplio conjunto de ellos que pueden considerarse eficientes, pero es indemostrable que est´en en P, debido precisamente a que no son deterministas. 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 tambi´en servir´a para resolver el problema. Por esta raz´on resulta equivalente considerar que P y NP son clases de problemas o clases de lenguajes.

141

ELENA JURADO MÁLAGA

142

´ A LA COMPLEJIDAD COMPUTACIONAL TEMA 10. INTRODUCCION

los puntos?. Un algoritmo determinista para resolver el problema es muy costoso, sin embargo dada una posible soluci´on, resulta muy sencillo comprobar que es v´alida. 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 soluci´on. Es evidente que P ⊂ NP, pero para poder demostrar que la igualdad se cumple habr´ıa que demostrar que todo problema NP es tambi´en P, es decir, habr´ıa que encontrar una forma de transformar una M´aquina de Turing no determinista con cota temporal polin´omica en una M´aquina de Turing determinista con cota temporal tambi´en polin´omica. Por otro lado, tampoco se ha podido demostrar la desigualdad entre los dos conjuntos, para ello habr´ıa que encontrar un lenguaje que pertenezca a NP y que no pertenezca a P. Dentro de la clase NP hay un cierto n´ umero de problemas que pueden catalogarse entre los m´as duros, en el siguiente sentido: si se encontrase un algoritmo de tiempo polin´omico para cualquiera de ellos habr´ıa un algoritmo de tiempo polin´omico para todo problema en NP. Se dice que cualquier problema de esta categor´ıa es NPcompleto. Definici´ on 10.7 Se dice que un lenguaje L1 es reducible en tiempo polin´omico a un lenguaje L2 si hay una funci´on f computable en tiempo polin´omico para la cual f(u) ∈ L2 sii u ∈ L1 . Se utiliza la notaci´on


Manuales Uex

SAT Dada una expresi´on l´ogica, por ejemplo: p ∧ (q ∨ ¬p), hay que determinar si es posible satisfacerla, es decir, si es posible encontrar valores para los predicados p y q que hagan que la expresi´on tenga un valor verdadero.

142

CV - cobertura de v´ ertices Dado un grafo G con un conjunto de v´ertices V y un conjunto de arcos E, y dado un n´ umero k, se trata de averiguar si existe un subconjunto V’ de V, con no m´as de k elementos, tal que para todo arco de E alguno de los nodos unidos por este arco pertenece a V’.

Ap´ endice A Generadores autom´ aticos de analizadores l´ exicos y sint´ acticos Contenido A.1. Generador de analizadores l´ exicos . . . . . . . . . . . . . 143 A.2. Generador de analizadores sint´ acticos . . . . . . . . . . . 149

A.1.

Generador de analizadores l´ exicos

Existen diferentes programas que, con un comportamiento similar, permiten generar autom´aticamente analizadores l´exicos. Entre los m´as utilizados est´ an PCLEX, LEX y FLEX, estos dos u ´ ltimos son utilizados en entorno UNIX/LINUX. Todos ellos 143

Manuales Uex

Existen herramientas que generan analizadores l´exicos a partir de la definici´on de una serie de expresiones regulares. Estos analizadores llevan a cabo el procesamiento secuencial de una colecci´on de caracteres de manera que al encontrar una cadena que encaja con una de las expresiones definidas realiza las acciones que se hayan indicado previamente. Internamente, los analizadores l´exicos se comportan como Aut´omatas Finitos que reconocen expresiones regulares. Los analizadores l´exicos constituyen una parte fundamental de cualquier compilador pero tambi´en pueden ser utilizados con otros objetivos, por ejemplo, para modificar la estructura de un fichero de texto. An´alogamente, existen herramientas que generan analizadores sint´acticos a partir de la definici´on de una gram´atica independiente del contexto. Concretamente, generan un reconocedor ascendente del tipo LR(1). La utilizaci´on conjunta de ambas herramientas simplificar´a el proceso de dise˜ no y construcci´on de traductores para un determinado lenguaje formal. Esta ser´a una de sus principales aplicaciones en el a´mbito de esta asignatura.

143

ELENA JURADO MÁLAGA

144

´ ´ AUTOMATICA ´ APENDICE A. GENERACION DE ANALIZADORES

traducen la descripci´on de un analizador l´exico, realizada en un metalenguaje al que 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 prop´osito espec´ıfico, dise˜ nado para representar expresiones regulares. Adem´as, el c´odigo puede extenderse con secciones escritas en C o en el lenguaje de programaci´on correspondiente.

A.1.1.

C´ omo utilizar PCLEX

PCLEX se ejecuta en l´ınea de comandos, de la siguiente forma: PCLEX [opciones] nombre fichero

Manuales Uex

nombre fichero es el nombre del fichero que contiene la especificaci´on del analizador l´exico en Lex. Por claridad, se recomienda que el nombre de estos ficheros tenga extensi´on .l. Por defecto se generar´a un fichero con el mismo nombre y con extensi´on .c. Por ejemplo, si el fichero de entrada se llama ejemplo.l, el de salida se llamar´a ejemplo.c. Se pueden utilizar las siguientes opciones a la hora de ejecutar PCLEX: -c el fichero de salida tiene el nombre yylex.c -C<nom fichero> el fichero de salida tiene el nombre que indica <nom fichero> -h muestra una pantalla de ayuda -i construye un analizador insensible a la diferencia may´ usculas/min´ usculas -n suprime las directivas “#line” en el fichero de salida -p<nom fichero> utiliza <nom fichero> como fichero esqueleto para construir el fichero de salida, en lugar de utilizar el fichero 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 dem´as programas anteriormente mencionados se utilizan de forma similar aunque el significado de las opciones puede variar.

144

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 tendr´ıa el siguiente aspecto:

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES ´ A.1. GENERADOR DE ANALIZADORES LEXICOS

145

zona de definiciones %% zona de reglas %% procedimientos del programador Zona de definiciones En esta parte del programa se pueden definir expresiones regulares que se utilizar´an posteriormente. Tambi´en se pueden incluir todas las definiciones en C que sean necesarias. Las definiciones en C, deber´an ir encerradas entre los delimitadores %{ y %}. Por ejemplo: %{ #include "stdlib.h" int x,y; %} Las definiciones de expresiones regulares, tendr´an el siguiente formato: nombre expresi´ on regular A partir de este momento cada vez que deseemos utilizar esa expresi´on podemos hacerlo escribiendo su nombre entre llaves. En el siguiente ejemplo, se define una expresi´on regular llamada digito, que representa a un d´ıgito cualquiera y otra, llamada entero, que representa a una colecci´on de d´ıgitos, o sea a un n´ umero entero y positivo: digito [0 − 9] entero {digito}+ Zona de reglas Cada regla est´a formada por una expresi´on regular seguida por una serie de acciones (codificadas en C) que ser´an las que el analizador l´exico ejecute cuando encuentre una cadena de caracteres que encaje con la expresi´on regular. Por ejemplo: ab* {printf("hola");}

void main() { yylex(); } yylex es el procedimiento que act´ ua como analizador l´exico y cuyo c´odigo C es generado a partir de las especificaciones que aparecen en la zona de reglas. El

Manuales Uex

Procedimientos del programador En esta parte del programa se incluye el programa C que el usuario haya dise˜ nado. En el caso m´as sencillo, en el que s´olo se desee generar un analizador l´exico, el programa principal deber´a incluir al menos una llamada al procedimiento yylex. Es decir:

145

ELENA JURADO MÁLAGA ´ ´ AUTOMATICA ´ APENDICE A. GENERACION DE ANALIZADORES

146

programa principal puede ser mucho m´as complejo e incluir todos los procedimientos que se deseen.

A.1.3.

C´ omo representar una expresi´ on regular

Para describir las expresiones regulares que pueden aparecer en la zona de definiciones o en la zona de reglas, hay que seguir las siguientes normas: La concatenaci´on entre s´ımbolos se representa escribi´endolos uno junto a otro sin utilizar ning´ un s´ımbolo especial. Por ejemplo: int char while representar´ıan palabras reservadas de C. El punto (.) es un comod´ın y representa a cualquier car´acter (s´olo a uno) del c´odigo ASCII salvo a la marca fin de l´ınea (representada por \n). Por ejemplo: a.

representa a la letra a seguida por cualquier otro car´acter.

Podemos utilizar los corchetes para representar la uni´on entre varios s´ımbolos y el gui´on para representar un rango de valores: [a-z] [Ff][Oo][Rr]

representa a cualquier letra min´ uscula representa a la palabra for escrita utilizando letras may´ usculas o min´ usculas (ser´ıa la manera de representar palabras reservadas en un lenguaje como Pascal)

Las repeticiones de s´ımbolos, o de conjuntos de s´ımbolos, se pueden representar utilizando diferentes operadores:

Manuales Uex

operador ∗ + {n} {n,m} ?

146

no de repeticiones 0, 1, . . . 1, 2, . . . n n, . . .,m 0,1

ejemplo ab* ab+ ab{3} ab{3,5} ab?

cadenas v´ alidas a, ab, abb, . . . ab, abb, . . . abbb abbb, abbbb, abbbbb a, ab

La barra vertical (|) representa la uni´on entre expresiones regulares. Por ejemplo: ab|cd

representa a la cadena ab o a la cadena cd

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES ´ A.1. GENERADOR DE ANALIZADORES LEXICOS

147

Marcas de contexto Si utilizamos ˆ al comienzo de una expresi´on, ´esta s´olo se tendr´a en cuenta en el caso de que la cadena analizada est´e al comienzo de una l´ınea. Si utilizamos $ al final de una expresi´on, ´esta s´olo se tendr´a en cuenta en el caso de que la cadena analizada est´e al final de una l´ınea. Si utilizamos / entre dos expresiones, s´olo se tendr´a en cuenta la primera de ellas 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 final 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 continuaci´on, de mayor a menor prioridad: () [] *+?{} ee | ˆ$

A.1.4.

par´entesis uni´on entre s´ımbolos repeticiones concatenaci´on uni´on de expr. regulares indicadores de contexto

Variables y procedimientos predefinidos

yylex() es el procedimiento principal a partir de las expresiones regulares definidas, act´ ua como un analizador l´exico. 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 ficheros de entrada y de salida del analizador l´exico.

{fprintf(yyout," %s",yytext);} REJECT hace que el scanner analice por segunda vez la misma cadena. En este segundo an´alisis, la regla que contiene a REJECT no ser´a tenida en cuenta.

Manuales Uex

ECHO es una acci´on predefinida que escribe la cadena analizada en el fichero de salida, por tanto, es equivalente a la instrucci´on

147

ELENA JURADO MÁLAGA ´ ´ AUTOMATICA ´ APENDICE A. GENERACION DE ANALIZADORES

148

A.1.5.

Condiciones de comienzo

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

Manuales Uex

A.1.6.

148

Acciones

Cuando el analizador l´exico encuentra una cadena de caracteres que encaja con alguna de las expresiones regulares definidas, ejecuta las acciones asociadas a esta expresi´on. Est´as acciones pueden ser las predefinidas ECHO o REJECT, o cualquier instrucci´on escrita en C. A continuaci´on se describen algunas situaciones especiales: Si los caracteres de la entrada pueden encajar con diferentes expresiones regulares, se elegir´a aquella que valide la cadena m´as larga.

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES ´ A.2. GENERADOR DE ANALIZADORES SINTACTICOS ab ab+

149

acci´ on1 acci´ on2

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

acci´ on1 acci´ on2

Se ejecutar´a la acci´ on1 simplemente porque est´a escrita en primer lugar. La acci´on que se ejecuta por defecto cuando un car´acter (o cadena de caracteres) no encaja con ninguna de las expresiones definidas, consiste en escribir dicho car´acter en el fichero de salida (yyout); salvo que se haya utilizado la opci´on -s al ejecutar PCLEX. Si detr´as de una expresi´on regular s´olo escribimos el s´ımbolo |, la acci´on asociada a esta expresi´on es la misma que la asociada a la siguiente. Los siguiente ejemplos son, por tanto, equivalentes: hola [a-z]+

| acci´ on

hola [a-z]+

acci´ on acci´ on

Si detr´as de una expresi´on regular s´olo escribimos el s´ımbolo ; no hay ninguna acci´on asociada a esta expresi´on, ni siquiera escribir la cadena validada en el fichero de salida, podr´ıa entenderse como no hacer nada.

Generador de analizadores sint´ acticos

Existen programas como YACC (Yet Another Compiler-Compiler), PCYACC o BISON, este u ´ltimo para entornos LINUX, que permiten generar autom´aticamente analizadores sint´acticos de tipo LR(1), a partir de la definici´on de una gram´atica independiente del contexto descrita con una notaci´on similar a la BNF(Backus Normal Form). Concretamente, se genera una funci´on, llamada yyparse, que reconocer´a programas escritos en el lenguaje definido por la gram´atica y detectar´a los errores si los hubiera. La funci´on yyparse(), llama repetidamente al analizador l´exico yylex() que convierte cadenas de caracteres del fichero de entrada en s´ımbolos terminales de la gram´atica (llamados tokens). Utilizando una terminolog´ıa anglosajona, al analizador

Manuales Uex

A.2.

149

ELENA JURADO MÁLAGA ´ ´ AUTOMATICA ´ APENDICE A. GENERACION DE ANALIZADORES

150

l´exico se le denomina scanner y al sint´actico se le denomina parser. La forma convencional por la que el scanner env´ıa al parser informaci´on adicional sobre los tokens es a trav´es de la variable yylval. Por defecto esta variable es de tipo int pero, como veremos, esto se puede cambiar.

A.2.1.

C´ omo utilizar PCYACC

PCYACC se ejecuta en l´ınea de comandos, de la siguiente forma: PCYACC [opciones] nombre fichero nombre fichero es el nombre del fichero que contiene la especificaci´on de la gram´atica, por claridad se recomienda que el nombre de estos ficheros tenga extensi´ on .y. Por defecto se generar´a un fichero con el mismo nombre y con extensi´on .c. Por ejemplo, si el fichero de entrada se llama ejemplo.y, el de salida se llamar´a ejemplo.c. Se pueden utilizar las siguientes opciones a la hora de ejecutar PCYACC:

Manuales Uex

-c -C<nom fichero>

150

el fichero de salida tiene el nombre yytab.c el fichero de salida tiene el nombre que indica <nom fichero> -d se genera un fichero cabecera llamado yytab.h -D<nom fichero> se genera un fichero cabecera con el nombre que indica <nom fichero> -h muestra una pantalla de ayuda -n suprime las directivas “#line” en el fichero de salida -p<nom fichero> utiliza <nom fichero> como fichero esqueleto para construir el fichero de salida, en lugar de utilizar el fichero por defecto (yaccpar.c) -r informa durante la ejecuci´on -s genera vectores internos cuyos elementos son de tipo short int -S el programa se para despu´es de realizar la fase de an´alisis sint´actico -t construye un a´rbol parser y lo almacena en el fichero yy.ast -T<nom fichero> construye un a´rbol parser y lo almacena en el fichero <nom fichero> -v genera un fichero llamado yy.lrt con informaci´on sobre el proceso y la tabla parser -V<nom fichero> genera el fichero de la opci´on anterior pero con el nombre <nom fichero> Otros programas como YACC o BISON se utilizan de forma similar aunque el significado de las opciones pueda variar.

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES ´ A.2. GENERADOR DE ANALIZADORES SINTACTICOS

A.2.2.

151

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 significado que en el caso anterior. 1. En la primera parte, la zona de definiciones, se pueden incluir declaraciones en C, de la misma forma que se hac´ıa con LEX. Adem´as, es necesario realizar algunas definiciones que necesita conocer el parser, para ello se utilizan palabras reservadas (todas comienzan por %). La definici´on del s´ımbolo inicial de la gram´atica se realiza utilizando la palabra reservada %start. Por ejemplo: %start programa La definici´on de los s´ımbolos terminales de la gram´atica se realiza utilizando 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 notaci´on: El s´ımbolo : se utiliza para separar la parte izquierda de una producci´ on 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 colecci´on de producciones con la misma parte izquierda debe acabar con ;. Por ejemplo, las siguientes definiciones son equivalentes: lista var: lista var var lista var: lista var var lista var: var |var ; ; Los s´ımbolos de la gram´atica que no hayan sido declarados como tokens, se considerar´an s´ımbolos no terminales, excepto los caracteres simples, encerrados entre comillas que tambi´en se consideran s´ımbolos terminales. Por ejemplo: ’+’,’*’.

void yyerror(char *s) {

printf(" %s"\n,s);

}

Manuales Uex

3. En la tercera parte del programa, procedimientos del programador es necesario, como m´ınimo llamar al procedimiento yyparse(). Tambi´en es necesario que el programador defina la rutina yyerror. Esta rutina ser´a llamada por el analizador cada vez que encuentre un error sint´actico. Un ejemplo de definici´on de yyerror puede ser:

151

ELENA JURADO MÁLAGA ´ ´ AUTOMATICA ´ APENDICE A. GENERACION DE ANALIZADORES

152

A.2.3.

Gram´ aticas atribuidas

En ocasiones es necesario trabajar con informaci´on adicional sobre determinados s´ımbolos de la gram´atica. Diremos que estos s´ımbolos tienen atributos. Esta informaci´on se almacena en una variable predefinida llamada yylval que es de tipo YYSTYPE. Como hemos comentado anteriormente, por defecto, ese tipo es int, pero en ocasiones puede resultar u ´til cambiar su definici´on. Este cambio en la definici´on de YYSTYPE se realiza en la zona de definiciones y se puede llevar a cabo de diferentes formas. La m´as sencilla consiste en utilizar la palabra reservada %union, de la siguiente forma: %union { int num; char cadena[10]; } Suponiendo que YYSTYPE ha sido definido seg´ un el ejemplo anterior, es necesario especificar que s´ımbolos de la gram´atica van a tener atributos y de que tipo van a ser. Esto se realiza con la palabra reservada %type. Por ejemplo: %type NUMERO expresion %type IDENTIFICADOR En el caso de los s´ımbolos terminales, esto mismo se puede definir con %token. Por ejemplo: %token NUMERO %token IDENTIFICADOR En la parte derecha de una producci´on es posible insertar acciones escritas en C que ser´an ejecutadas cuando el analizador sint´actico llegue a ese punto del an´alisis. Estas acciones deber´an ir encerradas entre llaves. Cuando queramos utilizar los atributos asociados a algunos s´ımbolos de una producci´on, utilizaremos $$, $1, $2, . . . $$ es el atributo del s´ımbolo que aparece en la parte izquierda de la producci´on. $1 es el atributo del primer s´ımbolo de la parte derecha, $2 el del segundo s´ımbolo, etc. Por ejemplo:

Manuales Uex

expr:expr’+’expr

152

A.2.4.

{$$=$1+$2;}

Prioridad y asociatividad de operadores

YACC permite especificar la prioridad y la asociatividad de determinados s´ımbolos de la gram´atica (utilizados normalmente como operadores).

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES ´ A.2. GENERADOR DE ANALIZADORES SINTACTICOS

153

Manuales Uex

Utilizando las palabras reservadas %left, %right, %nonassoc, podemos definir el tipo de asociatividad que tienen los s´ımbolos gramaticales. Adem´as, la prioridad de los s´ımbolos queda impl´ıcita al especificar su asociatividad. Los s´ımbolos que aparecen en la misma l´ınea tienen la misma prioridad entre si, y la prioridad ser´ a m´as alta cuanto m´as tarde(en el texto) haya sido definida la asociatividad. Por ejemplo: %left ’+’, ’-’ %left ’∗’, ’/’ Estas definiciones indican que la suma y la resta tienen la misma prioridad, ambas tienen asociatividad por la izquierda y, adem´as, tienen una prioridad menor que la multiplicaci´on y la divisi´on.

153

154

´ ´ AUTOMATICA ´ APENDICE A. GENERACION DE ANALIZADORES

Bibliograf´ıa [1] Hopcroft J. E. y Motwani R. y Ullman J. D. Teor´ıa de Aut´ omatas, Lenguajes y Computaci´ on. Pearson-Addison Wesley, 2008. [2] Alfonseca E. y Alfonseca M. y Moriy´on R. Teor´ıa de Aut´ omatas y Lenguajes Formales. McGraw-Hill, 2007. [3] Isasi P. y Mart´ınez P. y Borrajo D. Lenguajes, Gram´ aticas y Aut´omatas. Un enfoque pr´actico. Addison Wesley, 2001. [4] Alfonseca M. y Sancho y Orga. Teor´ıa de Lenguajes, Gram´ aticas y Aut´omatas. Ed. Universidad, 1993. [5] Martin J. Lenguajes Formales y Teor´ıa de la Computaci´on. McGraw-Hill, 2003. [6] Brookshear. Teor´ıa de la Computaci´on. Lenguajes Formales, Aut´ omatas y Complejidad. Addison Wesley, 1993. [7] Kelley D. Teor´ıa Aut´ omatas y Lenguajes Formales. Prentice Hall, 1995. [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.

Manuales Uex

[10] Alfonseca y de la Cruz y Ortega y Pulido. Compiladores e Int´erpretes: Teor´ıa y Pr´ actica. Prentice-Hall, 2006.

155

155

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES

´Indice alfab´ etico

Alfabeto, 15 de entrada, 40 de s´ımbolos no terminales, 22 de s´ımbolos terminales, 22 Analizador l´exico, 11, 143 sem´antico, 12 sint´actico, 12, 149 Atributos sem´anticos, 98 heredados, 99 sintetizados, 99 Aut´omata, 6 conexo, 42 equivalente, 45 incompleto, 41 minimizaci´on, 43 de pila, 74 finito determinista, 40 finito no determinista, 47 linealmente acotado, 127 Bombeo lema para gr. de tipo 2, 94 lema para gr. de tipo 3, 65 Chomsky, 7 jerarqu´ıa de, 8, 24 Church-Turing, tesis, 120 Cierre de Kleene, 18 positivo, 19 Compilador, 10

Complejidad espacial, 138 temporal, 139 Concatenaci´on de un lenguaje, 18 de una palabra, 16 Derivaci´on, 20 directa, 20 Descripci´on instant´anea de un aut´omata de pila, 75 de un reconocedor LR(1), 90 de una m´aquina de Turing, 108 Desplazamiento, 88 Ensamblador, 10 Estado muerto, 41 final, 40 inicial, 40 Expresi´on regular, 33 Forma sentencial, 84 Funci´on µ-recursiva, 134 calculable, 130 caracter´ıstica de un lenguaje, 130 de transici´on, 40 parcialmente calculable, 130 recursiva, 134 recursiva primitiva, 133 G¨odel, 6, 106 Gram´atica, 6, 22 bien formada, 29 156

Manuales Uex

´ Arbol de derivaci´on, 21, 77

157

ELENA JURADO MÁLAGA ´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 Homomorfismo, 94 Int´erprete, 10 Inversa de una palabra, 17 Lenguaje, 6, 16 universal, 16 recursivamente enumerable, 124 recursivo, 125 Lex, 143 LR-item, 89

Manuales Uex

M´aquina de Turing, 107 universal, 118 Myhill-Nerode, teorema, 66

158

Palabra, 16 vac´ıa, 16 anulable, 83 Potencia de un lenguaje, 18 de una palabra, 17 Problema de clase NP, 141 de clase P, 141

157 NP-completo, 142 Producci´on, 19 compresora, 20 de redenominaci´on, 28 innecesaria, 27 no generativa, 28 anulable, 83 con prefijos comunes, 81 con recursividad por la izquierda, 81 Reconocedor ascendente, 87 descendente, 80 LL(1), 81 LR(1 ), 87 Reducci´on, 88 Reflexi´on de un lenguaje, 19 de una palabra, 17 S´ımbolo inaccesible, 27 no generativo, 27 director de una producci´on, 85 del LR-item, 89 inicial de una cadena, 83 de una gram´atica, 22 seguidor, 84 Sem´antica, 97 Shannon, 7 Sustituci´on, 94 Tabla de acciones, 88, 89 de s´ımbolos, 13 Turing, 6, 105 Uni´on de lenguajes, 17 Yacc, 149


Related Documents

Teoriaautomatas
January 2021 0

More Documents from "Javier Antonio Dominguez Martinez"