Ingeniería en Sistemas Computacionales
ING. Romana Carolina Novelo Can
David Montiel Ramírez
2.1.- Escriba expresiones regulares para los siguientes conjuntos de caracteres o explique las razones por las que no se pueden escribir expresiones regulares: a) Todas las cadenas de letras minúsculas que comiencen y finalicen en a. Letra [a-z]= a Letra*a b) Todas las cadenas de letras minúsculas que o comiencen o finalicen con a (o ambos). Letra [b-z]= a Letra+a c) Todas las cadenas de dígitos que no contengan ceros al principio. Digito=[1,2,3,4,5,6,7,8,9,0]= Digito+ d) Todas las cadenas de dígitos que representen números pares.
Número= *2,4,6,8,14,20,……+= Número e) Todas las cadenas de dígitos tales que todos los números “2” se representen
antes que todos los “9”. Digito=[0-9]= 2 Digito* 9 f) Todas las cadenas de a y b que no contengan tres b consecutivas. Cadena= [a,b]= not bbb Cadena g) Todas las cadenas de a y b que contenga un número impar de a o un número o un número impar de b (o ambos).
Cadena= *a,b+, Impara*aaa.aaaaaa,aaa……aaa,……..+, Imparb[bbb, bbb…bbb,bbb……bbb,……..+= ImparaCadenaImparb. h) Todas las cadenas de a y b que contengan un número par de a y un número par de b. Cadena= [a,b], Para[aa.aaaaaa,aa……aa,……..+, Parb*bb, bb…bb,bb……bb,……..+= Para+Cadena*Parb+ i)
Todas las cadenas de a y b que contengan exactamente tantas a como b.
Cadena=[a,b]= Cadena+ 2.2.- Escriba descripciones en español para los lenguajes generados por las si guientes expresiones regulares. a) (a│b)*a(a│b│ɛ)= (Cadena │ Cadena)* Cadena (Cadena │ Cadena │ Cadena) Cadena =[a,b]
b) (A│B│…│Z(a│b│…│z)*= (Letra │ Letra │…│ Letra (Letra │ Letra │…│ Letra) Letra=[A-Za-z] c) (aa│b)*(a│bb)*= (Letra │ Letra)( Letra │ Letra) Letra=[a,b]= Letra* d) (0│1│…│9│A│B│C│D│E│F)+(x│X)= (Número │ Número │…│ Número │ Letra │ Letra │ Letra │ Letra │ Letra │ Letra)+( Letra │ Letra). Número=[0-9], Letra=[A-Za-z] 2.4.- En la definición de las expresiones regulares describimos la procedencia de las
operaciones pero no su asociatividad. Por ejemplo, no especificamos si a│b│c significa (a│b) │c o a│ (b│c), y lo mismo para la concatenación. ¿A que debió esto? A que al realizar las operaciones se puede tomar cualquier valor para la realización de dicha expresión, ya que es una sola operación a realizar. Estas operaciones se realizan de acuerdo al valor de cada metasímbolo que se utiliza en la expresión. 2.6.- Al describir los tokens de un lenguaje de programación utilizando expresiones
regulares no es necesario tener los metasímbolos Ф (para el conjunto vacío) o ɛ (para la cadena vacía). Expliqué por qué. Porque los metasímbolos no los reconoce el programa, y cuando se utilizan se ponen como string para que la computadora los pueda reconocer. Resuelve 1.- (a│b)*c) = a, c, bc, bbc, bbbc,…..2.- (a+b+c │e+dz)= abc, ed, aabc, eedz, aabbc, eedzdz, ……..3.- (abc)z= z, abcz, abcabcz, abc…….abcz,……..4.- (a│b) │(cd)|d*= {a, b, cd, , d, dd , ddd, dddd,…….Escribe la ER: 5.- L1= {abc,c, cc, abab, abccc, ababc,….}
(ab)c= *abc, ab, c, abab,……. ] 6.- L2={ ,a,b,ab,aab,abb,aaab,……} (a*b*)={ ,a,b,ab,aab,abb,aaab,……} 7.-L3={aba,aa,ab,abaaa,baa,…….} (a*ba* )={ba,ab,aba,baa,abaa,baaa,……..-