Professional Documents
Culture Documents
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.
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:
Es descrito por:
01/08/2012
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}
01/08/2012
01/08/2012
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
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, +, -}
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
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
d 5 2 2 2 5 7 7
. FDC error error error ACEPTAR error error error error 6 error error error error ACEPTAR
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'
Expresin Regular
A=d.d B=L|(_(L|d)(L|d|_(L|d))* AB
01/08/2012
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