Teoria de Lenguajes y Compiladores

download Teoria de Lenguajes y Compiladores

of 38

Transcript of Teoria de Lenguajes y Compiladores

WORK PAPER #

II. PROGRAMA ANALTICO DE LA ASIGNATURA.

UNIDAD 1INTRODUCCION

1.1. Introduccin.-

Teora de Lenguajes es una rama de la informtica que se encarga del diseo, implementacin, anlisis, caracterizacin y clasificacin de lenguajes de programacin . Es un campo multi-disciplinar, dependiendo tanto de (y en algunos casos afectando) matemticas, ingeniera del software, lingstica, e incluso ciencias cognitivas. Es una rama bien reconocida de la informtica, y a fecha un rea activa de investigacin, con resultados publicados en un gran nmero de revistas dedicadas a la PLT, as como en general en publicaciones de informtica e ingeniera. La mayora de los programas de los estudiantes universitarios de informtica requieren trabajar en este tema.

Un compilador.- Es el proceso de traduccin que convierte un programa fuente escrito en un lenguaje de programacin de alto nivel a otro lenguaje de programacin, generando un programa equivalente que la mquina ser capaz de interpretar. Usualmente el segundo lenguaje es lenguaje de mquina, pero tambin puede ser un cdigo intermedio (bytecode), o simplemente texto. Este proceso de traduccin se conoce como compilacin.[] Un compilador.-Es un programa que permite traducir el cdigo fuente de un programa en lenguaje de alto nivel, a otro lenguaje de nivel inferior (tpicamente lenguaje de mquina). De esta manera un programador puede disear un programa en un lenguaje mucho ms cercano a cmo piensa un ser humano, para luego compilarlo a un programa ms manejable por una computadora.

1.2. El Lenguaje de Programacin.-

Un lenguaje de programacin es un conjunto de instrucciones ordenadas1.3. El Lenguaje.-

Llamamos lenguaje sobre el alfabeto V a cualquier subconjunto de V.Especificacin de lenguajes:

Extensin (lenguajes finitos)

L = fa; aa; aaag es un lenguaje sobre el alfabeto V = fag

L = faba; cab; aaabcg es un lenguaje sobre el alfabeto V = fa; b; cg

Comprensin (lenguajes infinitos)

L = fa(bc)njn >= 1g

1.4. Tipos de Traductores.-

Desde los orgenes de la computacin, ha existido un abismo entre la forma en que las personas expresan sus necesidades y la forma en que un ordenador es capaz de interpretar instrucciones. Los traductores han intentado salvar este abismo para facilitarles el trabajo a los humanos, lo que ha llevado a aplicar la teora de autmatas a diferentes campos y reas concretas de la informtica, dando lugar a los distintos tipos de traductores que veremos a continuacin.2.7.1. Traductor de idiomas.-

Traducen de un idioma dado a otro, como por ejemplo del ingls al espaol.

Este tipo de traductores posee multitud de problemas, a saber:

Necesidad de inteligencia artificial y problema de las frases hechas. El problema de la inteligencia artificial es que tiene mucho de artificial y poco de inteligencia, por lo que en la actualidad resulta casi imposible traducir frases con un sentido profundo. Como ancdota, durante la guerra fra, en un intento por realizar traducciones automticas del ruso al ingls y viceversa, se puso a prueba un prototipo introduciendo el texto en ingls: El espritu es fuerte pero la carne es dbil cuya traduccin al ruso se pas de nuevo al ingls para ver si coincida con el original. Cual fue la sorpresa de los desarrolladores cuando lo que se obtuvo fue: El vino est bueno pero la carne est podrida (en ingls spirit significa tanto espritu como alcohol). Otros ejemplos difciles de traducir lo constituyen las frases hechas como: Piel de gallina, por si las moscas, molar mazo, etc.

Difcil formalizacin en la especificacin del significado de las palabras.

Cambio del sentido de las palabras segn el contexto. Ej: por decir aquello, se llev una galleta.

En general, los resultados ms satisfactorios en la traduccin del lenguaje natural se han producido sobre subconjuntos restringidos del lenguaje. Y an ms, sobre subconjuntos en los que hay muy poco margen de ambigedad en la interpretacin de los textos: discursos jurdicos, documentacin tcnica, etc.2.7.2. Compiladores.-

Es aquel traductor que tiene como entrada una sentencia en lenguaje formal y como salida tiene un fichero ejecutable, es decir, realiza una traduccin de un cdigo de alto nivel a cdigo mquina (tambin se entiende por compilador aquel programa que proporciona un fichero objeto en lugar del ejecutable final).2.7.3. Interpretes.-Es como un compilador, solo que la salida es una ejecucin. El programa de entrada se reconoce y ejecuta a la vez. No se produce un resultado fsico (cdigo mquina) sino lgico (una ejecucin). Hay lenguajes que slo pueden ser interpretados, como p.ej. SNOBOL (StriNg Oriented SimBOlyc Language), LISP (LISt Processing), algunas versiones de BASIC (Beginners All-purpose Symbolic Instruction Code), etc. Su principal ventaja es que permiten una fcil depuracin. Entre los inconvenientes podemos citar, en primer lugar, la lentitud de ejecucin, ya que al ejecutar a la vez que se traduce no puede aplicarse un alto grado de optimizacin; por ejemplo, si el programa entra en un bucle y la optimizacin no est muy afinada, las mismas instrucciones se interpretarn y ejecutarn una y otra vez, enlenteciendo la ejecucin del programa. Otro inconveniente es que durante la ejecucin, el intrprete debe residir en memoria, por lo que consumen ms recursos. Adems de que la traduccin optimiza el programa acercndolo a la mquina, los lenguajes interpretados tienen la caracterstica de que permiten construir programas que se pueden modificar a s mismos.

Algunos lenguajes intentan aunar las ventajas de los compiladores y de los intrpretes y evitar sus desventajas; son los lenguajes pseudointerpretados. En estos, el programa fuente pasa por un pseudocompilador que genera un pseudoejecutable. Para ejecutar este pseudoejecutable se le hace pasar por un motor de ejecucin que lo interpreta de manera relativamente eficiente. Esto tiene la ventaja de la portabilidad, ya que el pseudoejecutable es independiente de la mquina en que vaya a ejecutarse, y basta con que en dicha mquina se disponga del motor de ejecucin apropiado para poder interpretar cualquier pseudoejecutable. El ejemplo actual ms conocido lo constituye el lenguaje Java; tambin son pseudointerpretadas algunas versiones de Pascal y de COBOL (Common Bussiness Oriented Language). La figura 1.2 muestra los pasos a seguir en estos lenguajes para obtener una ejecucin.

2.7.4. Procesadores.-

Permiten modificar el programa fuente antes de la verdadera compilacin.

Hacen uso de macroinstrucciones y directivas de compilacin. Por ejemplo, en lenguaje C, el preprocesador sustituye la directiva #include Uno.c por el cdigo completo que contiene el fichero Uno.c, de manera que cuando el compilador comienza su ejecucin se encuentra con el cdigo ya insertado en el programa fuente (la figura 1.3 ilustra esta situacin). Algunas otras directivas de preprocesamiento permiten compilar trozos de cdigo opcionales (lenguajes C y Clipper): #fi, #ifdef, #define, #ifndef, etc.

Los preprocesadores suelen actuar de manera transparente para el programador, pudiendo incluso considerarse que son una fase preliminar del compilador.

2.7.5. Interpretes de Comando.-

Un intrprete de comandos traduce sentencias simples a invocaciones a programas de una biblioteca. Se utilizan especialmente en los sistemas operativos (la shell de Unix es un intrprete de comandos). Los programas invocados pueden residir en el kernel (ncleo) del sistema o estar almacenados en algn dispositivo externo como rutinas ejecutables que se traen a memoria bajo demanda.

Por ejemplo, si bajo MS-DOS se teclea el comando copy se ejecutar la funcin de copia de ficheros del sistema operativo, que se encuentra residente en memoria.

2.7.6. Ensambladores y microensambladores.-Son los pioneros de los compiladores, ya que en los albores de la informtica, los programas se escriban directamente en cdigo mquina, y el primer paso hacia los lenguajes de alto nivel lo constituyen los ensambladores. En lenguaje ensamblador se establece una relacin biunvoca entre cada instruccin y una palabra mnemotcnica, de manera que el usuario escribe los programas haciendo uso de los mnemotcnicos, y el ensamblador se encarga de traducirlo a cdigo mquina puro. De esta manera, los ensambladores suelen producir directamente cdigo ejecutable en lugar de producir ficheros objeto.

Un ensamblador es un compilador sencillo, en el que el lenguaje fuente tiene una estructura tan sencilla que permite la traduccin de cada sentencia fuente a una nica instruccin en cdigo mquina. Al lenguaje que admite este compilador tambin se le llama lenguaje ensamblador. En definitiva, existe una correspondencia uno a uno entre las instrucciones ensamblador y las instrucciones mquina. Ej:

Instruccin ensamblador: LD HL, #0100

Cdigo mquina generada: 65h.00h.01h

Por otro lado, existen ensambladores avanzados que permiten definir macroinstrucciones que se pueden traducir a varias instrucciones mquina. A estos programas se les llama macroensambladores, y suponen el siguiente paso hacia los lenguajes de alto nivel. Desde un punto de vista formal, un macroensamblador puede entenderse como un ensamblador con un preprocesador previo.2.7.7. Conversores fuente fuente.-

Permiten traducir desde un lenguaje de alto nivel a otro lenguaje de alto nivel, con lo que se consigue una mayor portabilidad en los programas de alto nivel. Por ejemplo, si un ordenador slo dispone de un compilador de Pascal, y queremos ejecutar un programa escrito para otra mquina en COBOL, entonces un conversor de COBOL a Pascal solucionar el problema. No obstante el programa fuente resultado puede requerir retoques manuales debido a diversos motivos:

En situaciones en que el lenguaje destino carece de importantes caractersticas que el lenguaje origen s tiene. Por ejemplo un conversor de Java a C, necesitara modificaciones ya que C no tiene recolector de basura.

En situaciones en que la traduccin no es inteligente y los programas destino son altamente ineficientes.

2.7.8. Compilador cruzado.-

Es un compilador que genera cdigo para ser ejecutado en otra mquina. Se utilizan en la fase de desarrollo de nuevos ordenadores. De esta manera es posible, p.ej., construir el sistema operativo de un nuevo ordenador recurriendo a un lenguaje de alto nivel, e incluso antes de que dicho nuevo ordenador disponga siquiera de un compilador.

Ntese tambin que, para facilitar el desarrollo de software de un nuevo ordenador, uno de los primeros programas que se deben desarrollar para ste es, precisamente, un compilador de algn lenguaje de alto nivel.1.5. Estructura de un Traductor.-Un traductor divide su labor en dos etapas: una que analiza la entrada y genera estructuras intermedias y otra que sintetiza la salida a partir de dichas estructuras.

Bsicamente los objetivos de la etapa de anlisis son:

a) controlar la correccin del programa fuente

b) generar las estructuras necesarias para comenzar la etapa de sntesis.

Para llevar esto a cabo, la etapa de anlisis consta de las siguientes fases:

Anlisis lexicogrfico. Divide el programa fuente en los componentes bsicos del lenguaje a compilar. Cada componente bsico es una subsecuencia de caracteres del programa fuente, y pertenece a una categora gramatical: nmeros, identificadores de usuario (variables, constantes, tipos, nombres de procedimientos,...), palabras reservadas, signos de puntuacin, etc.

Anlisis sintctico. Comprueba que la estructura de los componentes bsicos sea correcta segn las reglas gramaticales del lenguaje que se compila.

Anlisis semntico. Comprueba que el programa fuente respeta las directrices del lenguaje que se compila (todo lo relacionado con el significado): chequeo de tipos, rangos de valores, existencia de variables, etc.

Cualquiera de estas tres fases puede emitir mensajes de error derivados de fallos cometidos por el programador en la redaccin de los textos fuente. Mientras ms errores controle un compilador, menos problemas dar un programa en tiempo de ejecucin. Por ejemplo, el lenguaje C no controla los lmites de un array, lo que provoca que en tiempo de ejecucin puedan producirse comportamientos del programa de difcil explicacin.

La etapa de sntesis construye el programa objeto deseado (equivalente semnticamente al fuente) a partir de las estructuras generadas por la etapa de anlisis.

Para ello se compone de tres fases fundamentales:

Generacin de cdigo intermedio. Genera un cdigo independiente de la mquina muy parecido al ensamblador. No se genera cdigo mquina directamente porque as es ms fcil hacer pseudo-compiladores y adems se facilita la optimizacin de cdigo independientemente del microprocesador.

Generacin del cdigo mquina. Crea un bloque de cdigo mquina ejecutable, as como los bloques necesarios destinados a contener los datos.

Fase de optimizacin. La optimizacin puede realizarse sobre el cdigo intermedio (de forma independiente de las caractersticas concretas del microprocesador), sobre el cdigo mquina, o sobre ambos. Y puede ser una aislada de las dos anteriores, o estar integrada con ellas.

1.6. Algunos Mtodos de Demostracin.-

UNIDAD 2: EL LENGUAJE FORMAL

A menudo queremos reconocer una estructura especfica escondida en una sucesin de smbolos. Por ejemplo, al leer esta frase, la estructuramos automticamente por medio de nuestra comprensin del idioma Espaol. Por supuesto, no cualquier secuencia de smbolos es una frase en Espaol, el idioma Espaol iguala al conjunto de todas las oraciones gramaticalmente correctas en Espaol, y que una oracin consiste en una secuencia e palaras en Espaol. Esta terminologa ha sido llevada a las ciencias de la computacin: el lenguaje de programacin Java puede ser visto como el conjunto de todos los programas correctos en Java, mientras que un programa en java puede ser visto como una secuencia de smbolos de Java, tales como identificadores, palabras reservadas, operadores especficos, etc.Lenguaje es un conjunto, posiblemente infinito de frases y las frases son secuencia de smbolos tomadas de un conjunto finito.

As como establecemos que una oracin pertenece o no al idioma Espaol mediante la gramtica Espaola, contamos con un formalismo gramatical para describir lenguajes artificiales.

Una diferencia con las gramticas para lenguajes naturales es que este formalismo gramatical es completamente formal. Esta propiedad nos permite probar matemticamente que una frase pertenece a algn lenguaje, y a menudo tales pruebas pueden ser construidas automticamente por una computadora en un proceso llamado anlisis sintctico. Note que esta es bastante diferente de las gramticas para lenguajes naturales, donde uno puede discrepar fcilmente sobre si algo es correcto en espaol o no. Sin embargo este enfoque completamente formal tambin conlleva una desventaja; la expresividad de la clase de gramticas que vamos a describir en este captulo es bastante limitada, y hay algunos lenguajes que uno podra querer describir pero que no pueden ser descritos dadas las limitaciones del formalismo.

En textos tradicionales de matemticas no es raro encontrar una definicin de secuencia que tiene la siguiente forma:

2.2 El Alfabeto.- Smbolo: Un smbolo es una entidad abstracta que no definiremos, de la misma manera que los conceptos punto y lnea, no se definen en geometra. Las letras y los dgitos son ejemplos de smbolos usados con frecuencia.

Alfabeto.- Un alfabeto es un conjunto finito y no vaco de elementos llamados smbolos o letras.

Algunos ejemplos de alfabeto son:

El alfabeto romano tradicional: {a,b,c,z}

El alfabeto binario: {0,1}

El conjunto de palabras reservadas: {if,then,else}

El conjunto de caracteres t= {a,b,c,d,e,f,i,k,l,m,n,m,o,p,r,s,t,u,w,x}

El conjunto de palabras en espaol {curso, practica, ejercicio, examen} Lenguaje Formal.- Es un conjunto de palabras (frases) de longitud finita formadas a partir de un alfabeto (conjunto de todas las cadenas contribuidas a partir del alfabeto).

Lenguaje.- Es un subconjunto de T*, para algn alfabeto T.

La palabra vaca (esto es, la cadena de longitud cero) es permitida y frecuentemente denotada mediante o . Algunos ejemplos de lenguaje son:

T*, (el conjunto vacio), { } y T son lenguajes sobre el alfabeto T; El conjunto {curso, prctica, ejercicio, examen} es un lenguaje sobre el alfabeto de caracteres t y examen es una frase de este. La secuencia vaca representa la palabra vaca y la anotamos con .Frase.- Es un elemento de un lenguaje.

Palabra.- Una palabra o cadena sobre un alfabeto T es una cadena finita de smbolos del alfabeto.

Especificacin de lenguajes:

La pregunta que surge ahora es como especificar un lenguaje. Puesto que un lenguaje es un conjunto inmediatamente podemos percibir tres enfoques:

Enumerar todos los elementos del conjunto explcitamente

Caracterizar los elementos del conjunto por medio de un predicado

Definir qu elementos pertenecen al conjunto por medio de la induccin

Extensin L = {a; aa; aaa} es un lenguaje sobre el alfabeto V = {a}L = {aba; cab; aaabc} es un lenguaje sobre el alfabeto V = {a; b; c}L= {ab, ba, abab, ababba} es un lenguaje del alfabeto

L= { , (, ), (), (()()), )())), ... } es un lenguaje del alfabetoL= { , 0, 0000, 010, 9980, ...} es un lenguaje del alfabeto

L= { , a, b, c, d, abc, aab, dcba, ... } es un lenguaje del alfabetoCaracterizarLos nmeros naturales pares {n n {0,1,,9}*, n mod 2=0}

PAL, los palndromes, secuencia que se leen igualmente de atrs para adelante que de adelante para atrs, sobre el alfabeto {a,b,c}: {s s {a,b,c}*, s=sR }, donde sR denota la secuencia s invertida.Comprensin

L = {a(bc)n n >= 1}2.3 Cadenas de Caracteres, Palabra o Frase.-En matemticas, una cadena de caracteres, palabra o frase es una secuencia ordenada de longitud arbitraria (aunque finita) de elementos que pertenecen a un cierto alfabeto.

Habitualmente se usan las letras w, x, y,... para referirnos a cadenas. Por ejemplo, si tenemos un alfabeto = {a, b, c}, una cadena podra ser: x = aacbbcba.

En general, una cadena de caracteres es una sucesin de caracteres (letras, nmeros y/o determinados signos).

Se utilizan en programacin, normalmente como un tipo de dato predefinido, para palabras, frases o cualquier otra sucesin de caracteres.

Es muy habitual que se delimiten mediante comillas superiores ("). Para poder mostrar, por ejemplo, una comilla (") dentro de la cadena y no tener problemas con las comillas que la delimitan, se usan secuencias de escape. Esto se aplica a otros caracteres reservados o no imprimibles como el retorno de carro. No obstante, las expresiones para producir estas secuencias de escape dependen del lenguaje de programacin que se est usando.

Una forma comn, en muchos lenguajes, de escapar un carcter es anteponindole un \ (sin comillas), p. e.: \" (sin comillas).2.4 Definicin de (*.-Secuencia:

Sea X un conjunto. El conjunto de secuencias sobre X, llamado X*, se define como sigue:

es una secuencia, llamada secuencia vaca

si xs es una secuencia y x es un elemento de X, entonces x:xs es tambin una secuencia

nada ms es una secuencia sobre X.

Hay dos cosas importantes que remarcar sobre esta definicin del conjunto X*:

Es una instancia de un patrn de definicin muy comn: es definida por induccin, es decir, la definicin del concepto refiere al propio concepto.

Corresponde casi exactamente a la definicin del tipo [x] de listas de elementos de un tipo x en Haskell, excepto para la clausula final ninguna otra cosa en una secuencia de elementos-X2.5 Definicin de Longitud.-Se llama longitud de una palabra x, y se representa por |x|, al nmero de smbolos que la componen.

Sobre L= {a,b,c,d}

||=0

|a|=1

|abc|=3

2.6 Operaciones con Palabras.- Concatenacin: unir dos cadenas de caracteres.

$pareja = "Luis"." y "."Carmen" # en Perl y PHP;

pareja = "Luis" & " y " & "Carmen" # en Visual Basic;

pareja = "Luis" + " y " + "Carmen"; # en C++ con el tipo string.

Multiplicar una cadena: repetir una cadena un nmero de veces

$puntos ="." x 5 # pone 5 puntos en Perl Definicin de Concatenacin.-

Sean dos palabras x e y definidas sobre el alfabeto T. La concatenacin de x e y, denominada xy, es una palabra que contiene todos los smbolos (de derecha a izquierda) de x seguidos de los smbolos de y (de derecha a izquierda).

Sean x=A1A2...An e y=B1B2...Bm con Ai, Bi T:

xy= A1A2...AnB1B2...Bm

_ Ejemplos:

x =abc, y =da, definidos sobre T ={a,b,c,d}

xy=abcda ; |xy|=|x|+|y|=5

Propiedades:Operaciones cerrada: siSi x e y estn definidos sobre L entonces xy esta definido sobre L

Asociativa: si x(yz)=(xy)z

Elemento Nulo:

x = x=x

Conmutatividad: noxyyx

Definicin de Potencia de Cadenas.-

Sea i un numero natural, y x una palabra. La potencia i-esima de x, denominada xi, es la operacin que consiste en concatenarla consigo misma i veces.

Ejemplos:x=abc x1=abc

x2=abcabc

x3=abcabcabc

Propiedades:i,j >0xi+1=xxi=xix

xixj=xi+j

Se define x0= (palabra vacia)

Si i=0 x0+1=x1=x=x=xx0=x=x0x

Si i,j=0 xixj=x0x0=

EMBED Equation.3 ==x0=x0+0

Nota

EMBED Equation.3 =; x=x;

EMBED Equation.3 x=x

|xi|=i.|x|

Definicin Palabra Inversa.-

Sea x=A1A2An con Ai L una palabra sobre el alfabeto L. se llama palabra refleja o inversa de x, y se representa por x-1 a la palabra AnAn-1..A1. Si x= entonces x-1=

Ejemplos

x=abc x-1=cba

Propiedades:

|x-1|=|x|

2.7 Operaciones con Lenguajes.- Definicin Lenguaje Universal.-

Sea V un alfabeto. El lenguaje universal de V es el conjunto formado por todas las palabras que se pueden formar con las letras de V. Representamos dicho lenguaje con L(V).

Ejemplos:

V1= {a} L(V1)={ ,a,aa,aaa,..}

El lenguaje vacio pertenece a todos los lenguajes universales de todos los alfabetos posibles.

Definicin Lenguaje.-

Sea un alfabeto V. Un lenguaje L sobre V es cualquier subconjunto de lenguaje universal L(V)

Ejemplo:

L1= {a}L(L1)={ ,a,aa,aaa,..}

L1= {a} L(L1)L2= { } L(L1) (L2=)

L3= L1 L(L1)

L4= W(L1)L(L1)

L 5= {} L(L1) (Nota: V 5 V 2 )

L 6= {,a,aaa,aaaaa} L(L1)

L 7= {,a,aaa,aaaaa,} L(L1)

Hay lenguajes finitos, infinitos y vacios

2.8 Operaciones con Lenguajes Formales.-

Definicin Unin de Lenguajes.-

Sea el alfabeto V y dos lenguajes L1L(V) y L2L(V). La unin de L1 y L2, L1U L2, es un lenguaje que se define de la siguiente forma:

L 1U L 2={x|x L 1 o x L 2}.

Propiedades: Operacin cerrada:L 1 U W(V), L 2 U W(V) L 1 U L 2 U W(V)

Asociativa: (L 1 U L 2) U L 3= L 1 U (L 2 U L 3)

Elemento neutro: N U L 1, N U L 1 = L 1 Que es N?

Conmutativa: L 1 U L 2 = L 2 U L 1

Idempotencia:L U L = L

Se define x0= (palabra vaca)

Concatenacin.-

Sean dos lenguajes L 1, L 2. La concatenacin de L 1 y L 2, representado por L 1.L 2 (a veces por L 1. L 2), es un lenguaje que se define de la siguiente forma:

L 1 L 2={xy | x L 1 , y L 2}.Ejemplos: V={a,b,c}

L1 ={ab, ac, cb}; L2={b, bba} L1L2={abb,abbba,acb,acbba,cbb,cbbba}

L1 ={a, aa, aaa, ...}; L2={l, b, bb, bbb, ...} L1 L2=?

Qu pasa si L1 o L2 es ?Propiedades:Cerrada:L1W(V), L2W(V) L1L2W(V)

Asociativa: (L1L2)L3 = L1(L2L3)

No es conmutativa:(L1, L2: L1L2=L2L1)

Elemento neutro({}): L1: L1{}={ }L1=L1

No es idempotente: (L: LL=L)

Potencia.-

La potencia i-sima de un lenguaje L consiste en el lenguaje resultante de concatenar el lenguaje consigo mismo i veces.

Li = LLL...L (i veces)

Ejemplos:

L1 = {,ab, ac}

L1 2={,ab,ac,abab,abac,acab,acac}

L13={,ab,ac,abab,abac,acab,acac,ababab,ababac,abacab,abacac,acabab,acabac,acacab,acacac}

L2 = {a, aa, aaa, ...}

L22=?

L23=?Propiedades:Cerrada:

L W(V) Li W(V)

Li+1 = LiL = LLi (i>0)

LiLj = Li+j (i,j>0)

Qu pasa si i, j = 0?

Se define L0 = { }

L0+1 = L1 = L = {}L=L0L

L0L0= { }{} ={}=L0 = L0+0

Clausura Positiva.-

La clausura positiva de un lenguaje L se define por: L+=

Ejemplos:

L ={a,aa,aaa,aaaa,...} = {an | n>1}

L2={ aa,aaa,aaaa,...} = {anam | n,m>1} = {an | n>2}

L3={ aaa,aaaa,...} = {anam | n>1, m>2} = {an | n>3}

L+= Ui=1 Li ={a,aa,aaa,aaaa,...} = L

V ={a,b}, L es un lenguaje sobre V, ya que LW(V)

Ui=1 L i ={a,b,aa,ab,ba,bb,aaa,...} = W(V) - {}

Nota: Si L, entonces L+. Clausura, iteracin o cierre.-

La clausura de un lenguaje L se define por:

L*= Ui=1 Li Nota:L: L*, ya que {}=L0. Propiedades de la clausura:

Cerrada: LW() L+W() , L*W() L*=L0( Ui=1 Li )= L0L+={}L+ L+=LL*= L*L

Reflexin.-

Sea L un lenguaje. Se llama lenguaje inverso (lenguaje reflejo) de L, y se representa por L-1 al lenguaje:

L-1= {x-1|xL}.

Ejemplos:

L = {ana,julio,jesus,norma} L-1={ana, oiluj,susej,amron}

L = {a,aa,aaa,...} L-1?

Propiedades de la reflexin:

Cerrada: LW() L-1W() Interaccin.-

Sean dos lenguajes L1 y L2. La interseccin de L1 y L2, L1L2, es el lenguaje que se define por: L1L2={x|xL1 y xL2}.Propiedades:Cerrada:L1W() , L2W() L1L2W()

Asociativa: (L1L2) L3=L1(L2L3)

Conmutativa:L1L2= L2L1

Idempotencia:LL=L

L=

Complemento.-

Sea L un lenguaje sobre el alfabeto . El complemento de L, denotado con L (o con c(L)) es el siguiente lenguaje:

L ={x|xW() y xL}Propiedades:Cerrada: L W(V) L W(V) W(V) =0 L =L

Diferencia.-

Sean dos lenguajes L1 y L2. La diferencia de L1 y L2, L1- L2 (o

L1\L2) es el lenguaje que se define por:

L1- L2={x|xL1 y xL2}.Propiedades:Cerrada:L1W() , L2W() L1-L2W()

No es Asociativa: (L1, L2: (L1-L2)-L3=L1-(L2-L3))

No es conmutativa:(L1, L2: L1-L2=L2-L1)

No es idempotente:L: L-L=

A-=A

Leyes de De Morgan:

L1L2= L1L2 L1L2= L1L2 Leyes de complemento:

LL=

LL=W()

Distributividad:

L1(L2 L3)= (L1L2)( L1L3)

L1(L2 L3)= (L1L2) ( L1L3)

L1 -L2=L1L 2= L1L2UNIDAD 3EXPRESIONES REGULARES, AUTMATAS DE ESTADOS FINITOS Y GRAMATICAS REGULARES3.1. Expresiones Regulares

3.1.1 Que es una Expresin Regular?

Las expresiones regulares constituyen un mecanismo bastante potente para realizar manipulaciones de cadenas de texto.

Las expresiones regulares son de gran utilidad en editores de texto y aplicaciones para buscar y manipular textos.

Una expresin regular es una forma de representar a los lenguajes regulares (finitos o infinitos) y se construye utilizando caracteres del alfabeto sobre el cual se define el lenguaje.

Las expresiones regulares tambin permiten especificar lenguajes regulares. En la actualidad existe gran soporte para el uso de expresiones regulares (Perl, PHP, bibliotecas Java, bibliotecas .NET, Shell Unix, etc.).

3.1.2 Smbolos de una Expresin Regular.-

* denota desde cero a n repeticiones

+ denota desde una a n repeticiones

{n} denota n repeticiones

{m; n} denota de m a n repeticiones

? denota elemento opcional

() para agrupaciones

3.1.3 Reglas de Formacin de una Expresin Regular.-Sea V un alfabeto. Una expresin regular sobre V se define recursivamente con las siguientes reglas (inductivas):

a) es una expresin regular

b) es una expresin regular

c) si V, entonces es una expresin regular

1. si y son expresiones regulares, entonces tambin

a) . es una expresin regular (obviamos del punto muchas veces)

b) (+ ) es una expresin regular

2. si es una expresin regular, entonces tambin

a. () es una expresin regular

()* es una expresin regularEjemplos:

Sea V = {a, b, c}. Posibles expresiones regulares son:

((a.b)* + b.c.(a)*) ((a.a.a + b.c) + (c.b)* (b)*)

00 es una expresin regular que representa {00}, la expresin (0+1)* denota todas las cadenas de 0 y 1s as que (0+1)*00(0+1)* denota todas las cadenas de 0s y 1s con al menos dos ceros consecutivos.

Con eso hemos definido una sintaxis de expresiones regulares, pero cul ser su semntica?

Para cada expresin regular definimos un lenguaje correspondiente (basado en las reglas).

3.1.4 Operaciones con Expresiones RegularesSi es una expresin regular, entonces {} es el conjunto descrito por la expresin regular . Tambin se puede decir que denota el lenguaje de la cadena . Las expresiones regulares describen los lenguajes regulares, luego sus operaciones correspondern a las indicadas para los lenguajes regulares.

a) Unin alternativa: Si y son expresiones regulares, | es una expresin regular tal que: {|}= {} U {}. Es decir que puede aparecer o indistintamente.b) Concatenacin: Si y son expresiones regulares, es una expresin regular tal que: {}= {} {}. c) Cierre u operacin estrella: Si es una expresin regular, entonces* es una expresin regular que denota: {}*. Es decir que denota las cadenas:

EMBED Equation.3

EMBED Equation.3

EMBED Equation.3

EMBED Equation.3

EMBED Equation.3

EMBED Equation.3

d) Cierre Positivo: Si es una expresin regular, entonces+ es una expresin regular que denota: {}+. Es decir que denota las cadenas:

EMBED Equation.3

EMBED Equation.3

EMBED Equation.3

EMBED Equation.3

EMBED Equation.3

EMBED Equation.3

3.1.5 Procedencia de las Operaciones.-

Se permite el uso de parntesis para indicar la precedencia de las operaciones, pero cuando no se utilizan parntesis para evaluar una expresin, hay que tener en cuenta el siguiente orden de precedencia.

1. Uso de parntesis.

2. Operacin cierre y cierre positivo.

3. Operacin concatenacin.

4. Alternativa.3.1.6 Teorema:

Dos expresiones regulares son iguales, si designan el mismo conjunto regular.

3.1.7 Propiedades:

A partir del teorema anterior se puede enunciar las siguientes propiedades:

Asociatividad: () = ()

Distrivutividad:| = (|) Elemento neutro: = Propiedades del operador cierre

(|)* = (*|*)* = (**)*

(|)* = (*|) = *

*| = *

* =

Ejemplos simples

La expresin regular a.b (o simplemente ab) se lee a concatenado con b y representa al lenguaje L = {ab} La expresin regular dada por a + ab se lee a unin ab, es decir, a o ab y representa al lenguaje L = {a, ab} El lenguaje de todas las palabras definidas sobre el alfabeto {a, b} que comienzan con a se puede representar mediante la expresin regular a(a + b) *Otros Ejemplos:

1. Sea el alfabeto {a,b} y la expresin regular aa*bb*, indicar el lenguaje que denota y algunas cadenas de dicho lenguaje.ab

aab

aaab

abb

abbbb

aaaabbbbbb2. Dada la expresin regular {a|b}*, el lenguaje que denota es el que se puede formar con todas las cadenas compuestas por a y b incluida la cadena vaca:aaa

bbb

aba

abaaaa

abaaabbaa3. Descripcin del lenguaje de las cadenas que empiezan por a, continan con bs y cs y terminan en d

R.- a(b|c)*d4. Descripcin del lenguaje de las cadenas formadas por trozos de cadena que pueden empezar (o no) por una a y continan con un nmero que tenga al menos un dgito; adems terminan siempre en asterisco *

R.- (a?[0-9]+)*\*5. El lenguaje que describe es L= {las cadenas que comienzan con una a y continan con varias o ninguna a y siguen con una b y continan con varias o ninguna b}6. Sea el alfabeto {0,1}, la expresin regular 1(01)*, indicar el lenguaje que denota y algunas cadenas de dicho lenguaje.7. Sea el alfabeto {0,1}, la expresin regular (0|1)+, indicar el lenguaje que denota y algunas cadenas de dicho lenguaje.8. Sea el alfabeto {0,1, 2}, la expresin regular (0|1|2)+, denota el conjunto de nmeros en base 3, indicar el lenguaje que denota y algunas cadenas de dicho lenguaje.9. Sea el alfabeto {1, 2,3}, la expresin regular esta dado por (1|2)*3 definir las cadenas que componen10. L1 = { (ab)n / n > 1}11. L2 = {anbm /n > 4 y m > 3}12. Todas las palabras que empiezan con a y terminen con o13. Todas las palabras que empiecen con a, tengan una s y terminen con o14. Todas las palabras que tengan entre 5 y 8 letras3.2 El lenguaje L() definido por una expresin regular se define:1.

a) L() =

b) L() = { }

c) si V, entonces L() = { }

2. si y son expresiones regulares, entonces

a) L(.) = L().L()

b) L(( + )) = L() U L()

3. si es una expresin regular

a) L(()) = L()

b) L(()*) = (L())*

Ejemplos: sobre V = {0, 1}:

El lenguaje que contiene una sub-cadena 11:

((0 + 1))*,1,1.((0 + 1))*

Todas las cadenas que alternan 0 y 1:

(((0,1)* + (0,1)*,0) + ((1,0)* + (1,0)*,1))

O tambin con la expresin

(1 + ).(0,1)*.(0 + )3.1.8 Equivalencia entre Expresiones Regulares

Dos expresiones regulares r y s son equivalentes si describen el mismo lenguaje, es decir, L(s)= L(r). A partir de la definicin de equivalencia podemos comprobar las siguientes propiedades:PropiedadDefinicin

Asociativa (+)r+(s+t)=(r+s)+t

Conmutativa (+)r+s=s+r

Elemento neutro (+)+r=r+ =r

Asociativa (.)r.(s.t)=(r.s).t

Elemento neutro (.) .r=r. =r

Distributiva a + (.)r.(s+t)=(r.s)+(r.t)

(s+t).r=(s.r)+(t.r)

Equivalencia entre expresiones regulares:

* =

r = r =

* =

r* r* = r*

r r* = r* r

(r*)* = r*3.1.9 Que genera una Expresin Regular?Es de sealar que las expresiones regulares nos permiten comparar un texto con un patrn de bsqueda, para ver si el texto contiene el patrn especificado. Una expresin regular r tambin contendr caracteres del alfabeto, pero esos caracteres tendrn un significado diferente: en una expresin regular todos los smbolos indican patronesLas Expresiones Regulares son patrones que permiten buscar coincidencias con combinaciones de caracteres dentro de cadenas de texto. Estos patrones pueden utilizarse con los mtodos exec y text del objeto RegExp, y con los mtodos match, replace, search y split del objeto String.

Las expresiones regulares se introducen para describir los lenguajes regulares, entonces los lenguajes regulares son metalenguajes. Es decir las expresiones regulares son un metalenguaje para describir los lenguajes regulares.

3.2. AUTOMATAS DE ESTADOS FINITOS.-

La palabra autmata evoca algo que pretende imitar las funciones propias de los seres vivos, especialmente relacionados con el movimiento, por ejemplo, el tpico robot antropomorfo, en el campo de los traductores, compiladores, procesadores e intrpretes, lo fundamental no es la simulacin del movimiento, sino la simulacin de procesos para tratar informacin. La informacin se codifica en cadena de smbolos, y un autmata es un dispositivo que manipula cadenas de smbolos que se le presentan a su entrada, produciendo otras tiras o cadenas de smbolos a su salida.

El autmata recibe los smbolos de entrada, uno detrs de otro, es decir secuencialmente, el smbolo de salida que en un instante determinado produce un autmata, no solo depende del ltimo smbolo recibido a la entrada, sino de toda la secuencia o cadena que ha recibido hasta ese instante.Todo lo anterior conduce a definir un concepto fundamental, estado de un autmata, es toda la informacin necesaria, en un momento dado para deducir, dado un smbolo de entrada en ese momento, cul ser el smbolo de salida. Es decir conocer el estado de un autmata es conocer toda la historia de smbolos de entrada, as como el estado inicial, estado en el que se encontraba el autmata al recibir el primero de los smbolos de entrada.El autmata tendr un determinado nmero de estados (pudiendo ser infinitos) y se encontrara en uno u otro segn sea la historia de smbolos que le han llegado.

Se define configuracin de un autmata a su situacin en su instante, se define movimiento de un autmata como el trnsito entre dos configuraciones. Si un autmata se encuentra en un estado determinado, recibe un smbolo determinado, producir un smbolo de salida y efectuara un cambio o transicin a otro estado.El campo de estudio de los traductores, procesadores e intrpretes son los lenguajes y las gramticas que los generan. Los elementos del lenguaje son sentencias, palabras, etc. Formados a partir de un alfabeto o vocabulario que no es otra cosa que un conjunto finito de smbolos, establecidas las reglas gramaticales, una cadena de smbolos pertenecer al correspondiente lenguaje si tal cadena se ha formado obedeciendo esas reglas. Entonces un autmata reconocedor de ese lenguaje, funciona de tal forma que cuando reciba a su entrada una determinada cadena de smbolos indica si dicha cadena pertenece o no al lenguaje. Tambin se mostrara como existe un tipo de autmata para reconocer cada uno de los tipos de lenguajes generados por las correspondientes gramticas.3.2.1 Qu es un Autmata de Estados Finitos?

Un autmata finito o maquina de estado finito es un modelo matemtico de un sistema que recibe una cadena constituida por smbolos de un alfabeto y determina si esa cadena pertenece al lenguaje que el autmata reconoce.Un autmata finito es capaz de reconocer un conjunto regular, es decir, un conjunto de cadenas denotado por cualquier expresin regular. Recordemos que una expresin regular denota a un lenguaje regular.3.2.2 Definicin.-

Un autmata es una mquina terica que lee instrucciones en forma de smbolos y cambia de estado segn stas.

Un autmata finito es un reconocedor para un lenguaje, su programacin no es una tarea compleja, su entrada es una cadena x y responde si si x es una sentencia del lenguaje, no de otra manera.

3.2.3 Representacin.-

Un autmata es una representacin grfica (grafo dirigido) que muestra el proceso de reconocimiento de una cadena de entrada. La simbologa utilizada es simple:

Un crculo representa un estado n, donde n es un nmero natural o bien una letra, generalmente.

Un arco representa la lectura de un smbolo a en la entrada. Transicin entre estados.

Estado de inicio s. s es generalmente 0 (cero).

Estado de aceptacin f. a,b

abreas de aplicacin de la teora de autmatas: Comunicaciones, Teora de Control, Circuitos secuenciales, Reconocimiento de Patrones, Compiladores.Los autmatas finitos se clasifican en:a) Determinsticos. b) No Determinsticos

I. Autmatas Finitos Deterministicos:Un autmata finito determinista (AFD) es una quntupla

M = (V,Q,, q0, F)

Donde:

V =es un alfabeto (sabemos V)

Q =es un conjunto finito no vaco de estados, es decir, 0 < |Q| < .

=es una funcin de transicin:

: Q V Q; (q,) = p

Es decir, si el autmata se encuentra en el estado q y lee el smbolo va al estado p.

q0 =Q es el estado inicial.

F = Q es el conjunto de estados finales.

Podemos pensar de un autmata como un dispositivo que lee desde una cinta con smbolos y que realiza cambios de estados internamente:

Un autmata finito deterministico es aquel que tiene a lo sumo una transaccin desde cada estado con cualquier entrada y tiene por lo menos un estado de aceptacin.

Adems, un autmata finito deterministico AFD debe cumplir con las siguientes caractersticas:a) Ningn estado tiene una transicin con , es decir no hay transiciones con entrada .b) Para cada estado q y cada smbolo de entrada a, existe a lo ms un arco etiquetado por a saliendo de q.

Representacin.-Un autmata finito determinista se puede representar mediante: Diagramas de transicin, es decir mediante grafos dirigidos. ab

ab

AFD1Dibujamos los autmatas como grafos dirigidos, los estados representan los nodos del grafo y dibujamos una arista atribuida con un smbolo entre dos nodos si existe una transicin correspondiente. Es decir el estado inicial est marcado por una flecha y los estados finales estn marcados con doble crculo. Tablas de transicin. Estados Smbolos de entrada

AB

q0q1q0

q1q1q2

q2q2

Ejemplo: Sea el AFD1 = ({a,b}, { q0,q1, q2}, f, q0, {q2}) donde f estdefinida por:f(q0,a) = q1 f(q1,b) = q2

f(q1,a) = q1 f(q2,b) = q2

Ejemplo:

1. Un AFD que acepta la cadena de 0s y 1s donde el nmero de ceros y unos es par.

2. Verificar si el siguiente grafo reconoce la palabra: abbaaba Formalmente w {a,b}* R.-

b

a a

b

3. (a|b)*abb R.- b

b b a

a bb

a a a

4. Letra ( Letra | Dig | Sub ) *R.- Letra Inicio Letra

Dig

Sub5. Generar el grafo para el siguiente predicado: { W {a,b}* / |W| a 2 }, la palabra contenga par de asR.-

ba

a6. Generar el grafo para el siguiente predicado: { W {a,b}* /

W1, W1=aba}, toda la combinacin de a y b y que contenga la palabra abaR.- a b a

a ba

b b7. Generar un AFD para cadenas que pertenecen al alfabeto {I,0} y terminan con I08. Generar un AFD para cadenas que pertenecen al alfabeto {a,b} y que la palabra contienen exactamente 3 bs.

R.-

a a a a

b bb

9. Generar un AFD para {a,b}, y acepta la palabra que contiene como longitud=6.

R.-

b b b bbb

a a a a a a

10. Determinar el lenguaje reconocido por los siguientes autmatas de estados finitos deterministas.

R (a).-R (b).-

b.11. Dado A = { a, b}, muestre que una cadena de entrada es aceptada por el autmata de estado finito dado por la siguiente grfica:

S y slo s la cadena termina en a. Cul es la tabla de transicin de estados?

12. Muestre que una cadena de entrada, dado A = { a, b} es aceptada por el autmata de estado finito dado por la siguiente grfica:

S y slo s la cadena termina en bb. Cul es la tabla de transicin de estados?

13. Trace la grfica de un autmata de estado finito que acepte cadenas del conjunto A = { a, b} que posean:

a. Al menos dos a.b. Exactamente dos a.

c. Contiene n letras a, donde n es un nmero mltiplo de 3.

a) Equivalencia entre Expresiones Regulares y Autmatas Finitos.-Se muestran equivalencias entre expresiones regulares simples y autmatas finitos expresados mediante el diagrama.

Ejemplo:

Expresin Regular: a

a

Expresin Regular: a*

a

Expresin Regular: a+

a

a

Expresin Regular: (a|b)

a

b

Expresin Regular: (a|b)*

a

b

Expresin Regular: (ac|b)*

b

a

c

Expresin Regular: (acd|b)*

b

a c

c

Expresin Regular: a+b+ a b

a b

Expresin Regular: a(b*|a*)ba* ==== a(b*b|a*b)a* a a

a b

b II. Autmatas Finitos No Deterministicos:Un autmata finito no determinista (AFND) es un autmata finito que, a diferencia de los autmatas finitos deterministas (AFD), posee al menos un estado q Q, tal que para un smbolo a del alfabeto, existe ms de una transicin (q, a) posible.

En un AFND puede darse cualquiera de estos dos casos:

Que existan transiciones del tipo (q, a)=q1 y (q, a)=q2, siendo q1 q2;

Que existan transiciones del tipo (q, ), siendo q un estado no-final, o bien un estado final pero con transiciones hacia otros estados.

Cuando se cumple el segundo caso, se dice que el autmata es un autmata finito no determinista con transiciones vacas o transiciones (abreviado AFND-). Estas transiciones permiten al autmata cambiar de estado sin procesar ningn smbolo de entrada. Considrese una modificacin al modelo del autmata finito para permitirle ninguna, una o ms transiciones de un estado sobre el mismo smbolo de entrada.

Un autmata finito no-determinista (AFND) es una quntupla

M = (, Q,,q0 , F) es un alfabeto. Q es un conjunto finito no vacio de estados, es decir: 04 11S11 ==>2 110S011 ==>3 1101011 esta cadena es binaria palindrome

2. rbol de Derivacin.-ES un rbol formado a partir de la derivacin de una gramtica. Sirve para estudiar la ambigedad (ms de un rbol de derivacin y por tanto de interpretaciones)

Caractersticas:

- Cada nodo interior es variable.

- Cada nodo hoja es Terminal o - Si existe una produccin A a X1X2 . Xk, ver rbol de derivacin siguiente:

Ejemplo:

Por ejemplo, en la GLC anterior (binario palindromo), donde

G = ({S},{0,1},P,S), y P = { S | 0 | 1 | 1S1 | 0S0 }

La derivacin anterior de la cadena 1101011, se obtiene el siguiente rbol de derivacin:

La derivacin:

S ==>4 1S1 ==>4 11S11 ==>2 110S011 ==>3 1101011

5.2.5 Lenguaje de la Gramtica.-

Hemos visto como obtener una gramtica a partir de un lenguaje dado.

Si G es una GLC, G = (V, T, P, S) entonces

L (G) = { w esta en T* | S * w }

El lenguaje generado por una GLC G es el conjunto de cadenas formadas por smbolos terminales que tienen derivaciones desde el smbolo inicial S de la gramtica.5.2.6 Arboles de Derivacin.-

Para cualquier derivacin parcial, es decir una derivacin que contiene no terminales en su lado derecho, puede haber varias producciones de la gramtica que pueden usarse para extender la derivacin parcial y por lo tanto, se puede tener diferentes derivaciones para la misma frase:

Solo difieren el orden en el cual se eligen los pasos de derivacin. Todas estas derivaciones se consideran equivalentes.

Se han elegido diferentes pasos de derivacin. Se considera que tales derivaciones son diferentes.

Ejemplo:

SSSSsS

S S

s S S

s s

lenguaje sss

S

S S

S S s

s s

lenguaje sss

Pueden existir varios rboles de derivacin 5.2.7 Simplificacin de Gramticas Libres de Contexto

1- Eliminar producciones 2- Eliminar producciones unitarias3- Eliminar los smbolos intiles

1- Eliminar producciones ( A a )

Primero se revisa si el lenguaje contiene a la cadena vaca :

Si no est en L no necesitamos producciones, por tanto aplicamos el algoritmo.

Si en L, entonces generamos una GLC para L {} y despus al final hacer que:

G = ( V U {S}, T, P, S) y V I S = y P= P U (S a S |)Existe un algoritmo para detectar smbolos nulificables

A es nulificable si A

Si A en P entonces A es nulificable

Si A en P y todos los smbolos de son nulificables A es nulificableEjemplo: Dada la GLC G = ({S,A,B,C,D},{a,b},P,S), eliminar sus producciones S ABCBD

A CD

B Cb

C a | D bD | S ABCBD | BCBD | ABCB | ABBD | ABB | BBD | BCB | BB

A CD | C | D

B Cb | b

C a

D bD | b

2) Eliminar producciones unitarias (A a B )

Son producciones de la forma A a B, donde A y B en V

Definicin de derivable de A:

Si A B es una produccin, entonces B es derivable de A.

Si C es derivable de A, C B es una produccin y B A, entonces B es derivable de A.PRECONDICION = { La GLC G = (V, T, P, S) no contiene -producciones }

1. P1= P

2. Para todos A en V = { B | B es derivable de A }

3. Para cada par (A, B) tal que B es derivable de A y cada produccin no unitaria B ,

aadir la produccin A a P1 sino esta presente ya en P1.

4. Eliminar todas las producciones unitarias de P1.

FIN

Ejemplo: Tomamos el resultado del ejercicio anterior

1- P1= P = S ABCBD | BCBD | ABCB | ABBD | ABB | BBD | BCB | BB

A CD | C | D

B Cb | b

C a

D bD | b

2- S= A= {C, D}

Prof. Hilda Contreras Teora de la Computacin (Pregrado) 9

B= C= D= 3- Pares (A, C), Como C a y A C entonces A a

(A, D), Como D bD y D b y A D entonces A bD y A b

A a A C

4- P = P1 U A bD y A b - A D

Resultando la siguiente GLC:

S ABCBD | BCBD | ABCB | ABBD | ABB | BBD | BCB | BB

A CD | a | bD | b

B Cb | b

C a

D bD | b

3- Eliminar smbolos intiles

Los smbolos tiles (smbolos generadores de terminales y alcanzables desde S).

Sea G = (V, T, P, S), X es un smbolo til si S

Xw para y en (V U T)* y en w T*

ALGORITMO para eliminar variables no generadoras

VV: Variables Viejas

VN: Variables Nuevas

INICIO

VV = VN = { A | A w en P y w en T* }

MIENTRAS VN VV HACER

VV = VN

VN = VV U { A | A en P y en (VV U T)* }

FINMIENTRAS

V = VN

P = { A | A en V y en (V U T)* }

FIN

Se eliminan todas las producciones en donde intervienen 1 o ms de los smbolos no generadores de terminales. Las V = VN son solo variables generadoras.

Ejemplo: Elimine las variables no generadoras de la siguiente GLC G = ({S,A},{a},P,S), con las producciones P:

S AB | a

A a

(0)

VV = , T = {a}

VN = {A, S}

(1)

VV = {A, S}

VN = {A, S} U {A, S} = {A, S}

Parada (VV = VN) {A, S} = {A, S}

V= {A, S}

P= S a

A a

Decimos que X es generador si X * w (con sucesivas derivaciones puede derivar una cadena de terminales) para alguna cadena terminal w. Todo smbolo terminal es generador, ya que w puede ser ese mismo smbolo terminal, que se deriva en cero pasos5.2.8 Ejercicios1. L = {0 n 1 n , n 1}

S 01 | 0S1

2. L = {0 n 1 n , n 0}

S | 01 | 0S1

3. L = {0 n 1 m , n m}

S 0 | 0S | 0S1Ejercicios para casa:

Dar una gramtica libre de contexto para el conjunto de frases sobre el alfabeto X donde:

1. X={a}

2. Dar una gramtica para palndromes sobre el alfabeto {a,b}

3. Dar una gramtica para el lenguaje

L={s sR| s {a,b}*}

Este lenguaje es conocido como lenguaje de palndromes espejo.

4. Una secuencia de paridad es una secuencia que consiste de ceros y unos que tiene una cantidad par de unos. Dar una gramtica para secuencias de paridad.

5. Dar una gramtica para el lenguaje

L={ w | w {a,b}* nr(a,w) = nr(b,w)}

UNIDAD 6: EL LENGUAJE LIBRE DE CONTEXTO

6.1 El lenguaje Libre de Contexto.-6.2 Formas Normales.-6.3 Equivalencia entre un Autmata de Pila y una Gramtica Libre de Contexto

6.4 Como demostrar que un Lenguaje es Libre de Contexto?

6.5 Jerarqua de Chomsky

UNIDAD 7LAS MAQUINAS DE TURING7.1 Qu es una Mquina de Turing?La mquina de Turing es un modelo computacional creado por Alan Turing con el cual l

afirmaba que se poda realizar cualquier cmputo.

La mquina de Turing, como modelo matemtico, consta de un cabezal lector/escritor y una cinta infinita en la que el cabezal lee el contenido, borra el contenido anterior y escribe un nuevo valor.

Las operaciones que se pueden realizar en esta mquina se limitan a:

avanzar el cabezal lector/escritor para la derecha;

avanzar el cabezal lector/escritor para la izquierda.

7.2 Definicin

7.3 Representacin Grfica de una Mquina de Turing

7.4 Tipos de Maquinas de Turing

7.5 Funciones con Varios Parmetros

7.6 Tesis de Church

7.7 Extensiones de una Mquina de Turing

III. BIBLIOGRAFA.

BUITRAGO, BENJAMIN H. Computabilidad y Lenguajes Formales, 2000

HOPCROFT JHON y ULLMAN JEFFREY, Introduction to Automata Theory, Languages and Commputation, 1992 LEWIS, PAPADIMITRIOU , Elements of the Theory of Computation, 1996

MOLE , ARBIB, KFOURY, An Introduction to Formal Language Theory, 1992

AHO ALFRED, SETHI RAVI y ULLMAN JEFFERY, Compiladores Principios, tcnicas y herramientas. 1990 GRIES, DAVID Construccin de Compiladores. 1990 SNCHEZ, GONZALO, Compiladores e Interpretes. 1992 WATT, DAVID. Programming Language, 1991Programa fuente

Programa Objeto

Compilador

Mensaje Error

n

0

F

q2

q1

q0

q2

q1

q0

Q3

Q0

Q1

Q4

Q3

Q0

Q2

Q1

Q0

Q1

Q0

Q3

Q4

Q2

Q0

Q3

Q4

Q2

Q0

Q4

Q3

Q3

Q4

Q3

Q2

Q0

Q1

Q0

Q4

Q1

Q0

Q1

Q0

Q0

Q0

Q1

Q1

Q1

Q0

Q0

Q1

Q1

Q0

Q1

Q1

Q2

Q0

Q1

Q0

Q2

Q1

Q0

Q2

Q1

Q0

Q2

Q1

q

p

p

PAGE 1

_1410714262.unknown

_1411150175.unknown

_1411150874.unknown

_1413620125.unknown

_1425712189.unknown

_1425712220.unknown

_1425713044.unknown

_1426314249.unknown

_1425712383.unknown

_1413620175.unknown

_1413624445.unknown

_1411152206.unknown

_1411156307.unknown

_1411150903.unknown

_1411150295.unknown

_1411149896.unknown

_1409299400.unknown

_1409300462.unknown

_1409300702.unknown

_1409299511.unknown

_1409299026.unknown

_1409299246.unknown

_1408304575.unknown

_1409296204.unknown

_1407437020.unknown

_1407158197.unknown

_1407161998.unknown

_1407157866.unknown

_1407158106.unknown

_1405972046.unknown