You are on page 1of 10

01/08/2012

Definicin de Lenguajes Regulares Definicin de Expresiones Regulares Solucin de Ejercicio No. 1

Un lenguaje regular es un tipo de lenguaje formal que satisface las siguientes propiedades:

Los lenguajes ms sencillos que se considerarn son los lenguajes regulares, es decir, los que se pueden generar a partir de los lenguajes bsicos, con la aplicacin de las operaciones de unin, concatenacin y * de Kleene un nmero finito de veces.

Puede ser reconocido por:


un autmata finito determinista un autmata finito no determinista un autmata de pila un autmata finito alterno una mquina de Turing de solo lectura

Es generado por:

una gramtica regular una gramtica de prefijos Una expresin regular

Es descrito por:

01/08/2012

Un lenguaje regular sobre un alfabeto dado se define recursivamente como:


El lenguaje vaco es un lenguaje regular El lenguaje cadena vaca {} es un lenguaje regular Para todo smbolo a {a} es un lenguaje regular Si A y B son lenguajes regulares entonces A B (unin), AB (concatenacin) y A* (clausura o estrella de Kleene) son lenguajes regulares Si A es un lenguaje regular entonces (A) es el mismo lenguaje regular No existen ms lenguajes regulares sobre

Todo lenguaje formal finito constituye un lenguaje regular. Otros ejemplos tpicos son todas las cadenas sobre el alfabeto {a, b} que contienen un nmero par de aes o el lenguaje que consiste en varias aes seguidas de varias bes.

Una expresin regular, a menudo llamada tambin patrn, es una expresin que describe un conjunto de cadenas sin enumerar sus elementos. Por ejemplo, el grupo formado por las cadenas Handel, Hndel y Haendel se describe mediante el patrn "H(a||ae)ndel. La mayora de las formalizaciones proporcionan los siguientes constructores: 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.

01/08/2012

Se construyen utilizando los operadores unin, concatenacin y clausura de Kleene (alternativamente la cerradura positiva). Adems cada expresin regular tiene un autmata finito asociado o viceversa.

Alternacin

Una barra vertical separa las alternativas. Por ejemplo, "marrn|castao" es similar a decir marrn o castao.

Cuantificacin

Un cuantificador tras un carcter especifica la frecuencia con la que ste puede ocurrir. Los cuantificadores ms comunes son +, ? y *: + El signo ms indica que el carcter al que sigue debe aparecer al menos una vez. Por ejemplo, "ho+la" describe el conjunto infinito hola, hoola, hooola, hoooola, etctera. ? El signo de interrogacin indica que el carcter al que sigue puede aparecer como mucho una vez. Por ejemplo, "ob?scuro" es similar a decir oscuro y obscuro. * El asterisco indica que el carcter que lo precede puede aparecer cero, una, o ms veces. Por ejemplo, "0*42" es similar a decir 42, 042, 0042, 00042, etctera.

Agrupacin

Los parntesis pueden usarse para definir el mbito y precedencia de los dems operadores. Por ejemplo, "(p|m)adre" es lo mismo que "padre|madre", y "(des)?amor permite decir amor y desamor.

01/08/2012

1. Para los lenguajes dados sobre = {a, b} construir una expresin regular de l y un Autmata Finito que lo acepte:
a) L = {w|w tiene cero o ms pares de as} b) L = {w|w tiene un numero impar de as} c) L = {w|w tiene un numero mltiplo de 3 de as} d) L = {w| toda a en w est entre dos bs} e) L = {w| no hay dos as consecutivas en w} f ) L = {w| w no contiene la subpalabra aa ni bb}

a) Una expresin regular que represente el lenguaje L es b*(ab*ab*)*.

b) Una expresin regular para este lenguaje es: b*ab*(ab*ab*)*.

01/08/2012

c) Una expresin regular para este lenguaje es: b*(ab*ab*a)*.

d) Una expresin regular para este lenguaje es: b* b+(ab+)*.

1. Hallar un autmata finito que acepte el lenguaje dado


a) L = {w| w contiene un nmero impar de as y un nmero par de bs} b) L = {w| w contiene un nmero par de as y un nmero par de bs} c) L = {w| w contiene un nmero impar de as y un nmero impar de bs} d) L = {w| w contiene un ab o ba como subpalabras} e) L = {w| w contiene un ab y ba como subpalabras} f ) L = {w| w contiene un ab ba como subpalabras, pero no ambas}

01/08/2012

a) Un diagrama de transicin del autmata finito es:

b) Cambiando el estado de aceptacin del autmata representado arriba obtenemos el autmata:

c) De nuevo cambiando el estado de aceptacin obtenemos el autmata correspondiente

d) A continuacin un diagrama de transicin de un autmata finito determinista que acepta el lenguaje cuyas palabras contienen las subpalabras ab o ba o ambas:

01/08/2012

Que sea capaz de reconocer expresiones aritmticas vlidas de longitud arbitraria que comprendan enteros positivos separados por signos de suma, resta, multiplicacin y divisin. Solucin: = {d, op}

Estado\Simbolo

d 2 2 4 4

op error 3 error 3

FDC error error error ACEPTAR

1 2 3 4

Estado = 1 Leer el siguiente simbolo del flujo de entrada Case simbolo of digito Entrada = 'd' operador Entrada = 'op' marca de fin de cadena Entrada = 'FDC' ninguno de los anteriores Salir a la rutina de error Estado = Tabla[Estado, Entrada] If Estado = 'error' then salir a la rutina de error Until Estado = 'ACEPTAR'

Estado = 1 Leer el siguiente simbolo de la entrada while no_es_fin_de_cadena do case Estado of 1 if simbolo actual es un digito then Estado = 2 else salir a la rutina de error 2 if simbolo actual es un digito then Estado = 2 else if simbolo actual es un operador then Estado = 3 else salir a la rutina de error 3 if simbolo actual es un digito then Estado = 4 else salir a la rutina de error 4 if simbolo actual es un digito then Estado = 4 else if simbolo actual es un operador then Estado = 3 else salir a la rutina de error Leer el siguiente simbolo de la entrada end while If Estado = 4 then print "La cadena analizada es vlida" else print "La cadena analizada es invlida"

Expresin Regular
d.op.d dd*.op.dd*

01/08/2012

Que reconozca cadenas que representan nmeros reales positivos en notacin decimal o exponencial, como 35.7, 2.56E10, 25E4, 23E+8 34.0E-7 Solucin: = {d, ., E, +, -}

Estado = 1 Leer el siguiente simbolo de la entrada

while no_es_fin_de_cadena do
case Estado of 1 if simbolo actual es un digito then Estado = 2 else salir a la rutina de error 2 if simbolo actual es un digito then Estado = 2
Estado\Simbolo

d . E + FDC 1 2 error error error error error 2 2 3 5 error error error 3 4 error error error error error 4 4 error 5 error error ACEPTAR 5 7 error error 6 6 error 6 7 error error error error error 7 7 error error error error ACEPTAR Estado = 1 Leer el siguiente simbolo del flujo de entrada Case simbolo of digito Entrada = 'd' punto Entrada = '.' operador exponencial Entrada = 'E' signo positivo Entrada = '+' signo negativo Entrada = '-' marca de fin de cadena Entrada = 'FDC' ninguno de los anteriores Salir a la rutina de error Estado = Tabla[Estado, Entrada] If Estado = 'error' then salir a la rutina de error Until Estado = 'ACEPTAR'

else if simbolo actual es un punto then Estado = 3 else salir a la rutina de error 3 if simbolo actual es un digito then Estado = 4 else salir a la rutina de error

4 if simbolo actual es un digito then Estado = 4


else if simbolo actual es un operador exponencial then Estado = 5 else salir a la rutina de error 5 if simbolo actual es un digito then Estado = 7 else if simbolo actual es un signo positivo o negativo then Estado = 6 else salir a la rutina de error 6 if simbolo actual es un digito then Estado = 7 else salir a la rutina de error 7 if simbolo actual es un digito then Estado = 7

else salir a la rutina de error


Leer el siguiente simbolo de la entrada end while If Estado = 4 o Estado = 7 then print "La cadena analizada es vlida" else print "La cadena analizada es invlida"

Expresin Regular A=d.d


B=d.d(E(d|(+|-)d) C=dE(d|(+|-)d) ABC

01/08/2012

Que reconozca nombres de variables vlidas (segn condiciones dadas en clase) y nmeros decimales vlidos. Solucin: = {_, L, d, .}

Estado = 1 Leer el siguiente simbolo de la entrada while no_es_fin_de_cadena do case Estado of 1 if simbolo actual es una letra then Estado = 2 else if simbolo actual es un guion bajo then Estado = 3 else if simbolo actual es un digito then Estado = 5 else salir a la rutina de error
Estado\Simbolo

1 2 3 4 5 6 7

L 2 2 2 2 error error error

d 5 2 2 2 5 7 7

_ 3 4 error error error error error

. FDC error error error ACEPTAR error error error error 6 error error error error ACEPTAR

2 if simbolo actual es un digito o una letra then Estado = 2


else if simbolo actual es un guion bajo then Estado = 4 else salir a la rutina de error 3 if simbolo actual es un digito o una letra then Estado = 2 else salir a la rutina de error 4 if simbolo actual es un digito o una letra then Estado = 2 else salir a la rutina de error 5 if simbolo actual es un digito then Estado = 5 else if simbolo actual es un punto then Estado = 6

Estado = 1 Leer el siguiente simbolo del flujo de entrada Case simbolo of digito Entrada = 'd' punto Entrada = '.' guion bajo Entrada = '_' letra Entrada = 'L' marca de fin de cadena Entrada = 'FDC' ninguno de los anteriores Salir a la rutina de error Estado = Tabla[Estado, Entrada] If Estado = 'error' then salir a la rutina de error Until Estado = 'ACEPTAR'

else salir a la rutina de error


6 if simbolo actual es un digito then Estado = 7 else salir a la rutina de error 7 if simbolo actual es un digito then Estado = 7 else salir a la rutina de error Leer el siguiente simbolo de la entrada end while If Estado = 2 o Estado = 7 then print "La cadena analizada es vlida" else print "La cadena analizada es invlida"

Expresin Regular

A=d.d B=L|(_(L|d)(L|d|_(L|d))* AB

01/08/2012

Genere un diagrama segn las condiciones que usted indique.

De lo anterior se le pide que genere las respectivas tablas de transiciones y analizadores lxicos (generados a partir del diagrama y tabla de transiciones respectivamente).

10