Capítulo III - Grupo Exabyte

Anuncio
Compiladores e Interpretes
EPCI - UNPRG
EXPRESIONES REGULARES
Son entes formales o estructuras matemáticas utilizadas para es pecificar parámetros de formación de
componentes léxicos.
Las Expresiones Regulares denotan o representan lenguajes.
Fueron desarrollados en los años ’60 por Klene.
Se tienen las siguientes reglas E.R. para la represent ación del lenguaje, definidas sobre
1.
2.
3.
4.
5.
6.
7.
= { a, b }
Sea a una expresión regular denota un lenguaje regular o una cadena.
Sea ab una expresión regular esta denota un lenguaje regular
L(ab) = L(a) L(b) = {a}{b} = {ab}
Sea a b una ex presión regular esta denota un lenguaje regular
L(a b) = L(a) ∪L(b) = {a} ∪{b} = {a,b}
Sea a* una expresión regular esta denota un lenguaje regular
L(a*) = L(a)* = (L(a))* = ({a})* = {a}* = { , a, aa, aaa, ...}
+
Sea a una expresión regular esta denota un lenguaje regular
+
+
+
+
+
L(a ) = L(a) = (L(a)) = ({a}) = {a} = {a, aa, aaa, ...}
Sea una expresión regular esta denota un lenguaje regular
L( ) = { }
En general, sea ‘r’ una E. R. esta denota un L. R. L® siendo ‘r’ una E.R. compuesta poe las E.R.
definidas previament e, se utilizan dichas reglas para obtener el lenguaje asociado a ella (r).
Ejemplo:
Hallar los lenguajes asociados a las siguientes expresiones regulares:
+
1.
2.
3.
4.
5.
(a b*) a bb sobre = { a, b }
+
+
(xy* mn) (mn* mn )xy mn sobre = { xy, mn }
+
(((0* 1*)*) 0 1*) 01 sobre = { 0, 1 }
+
+
((ab cd*) (cd* ab)*) abcd sobre = { ab,cd }
+ +
(((a b)* b ) )* a b*) ab sobre = { a,b }
1.
(a b*) a bb sobre = { a, b }
+
L((a b*) a bb)
+
L(a b*) L(a )L(b)L(b)
+
L(a) L(b*) L(a )L(b)L(b)
+
L(a) L(b)* L(a) L(b)L(b)
+
L(a) (L(b))* (L(a)) L(b)L(b)
+
{a} ∪ ({b})* ({a}) {b}{b}
{a} ∪{ ,b, bb,...} {a,aa, aaa,…} {bb}
{ ,a,b,bb,...} {abb, aabb,…}
{abb,aabb,…babb,…}
2.
(xy* mn) (mn* mn )xy mn sobre = { xy, mn }
+
+
L((xy* mn) (mn* mn )xy mn)
+
+
L(xy* mn) L(mn* mn ) L(xy ) L(mn)
+
+
L(xy*) L(mn) L(mn*) L(mn ) L(xy ) L(mn)
+
(L(xy))* L(mn) (L(mn))* (L(mn)) L(mn)
+
+
({xy}* ∪ {mn}) ({mn}*∪{mn }) {xy } {mn}
{ , xy, xyxy,…} ∪ {mn} { ,mn, mnmn,…} ∪ {mn, mnmn,…} {xy, xyxy,…} {mn}
{ , xy, xyxy,…,mn} { ,mn, mnmn,…} {xymn, xyxymn,…}
{ , xy, xyxy,…,mn} {xymn, xyxymn,…,mnxymn, mnxyxymn,…}
{xymn, xyxymn,…,mnxymn, mnxyxymn,…xyxymn,xyxyxymn,…,xymnxymn, xymnxyxymn,…}
+
Ing. Luis Reyes Lescano
+
+
1
Compiladores e Interpretes
EPCI - UNPRG
+
3.
(((0* 1*)*) 0 1*) 01 sobre = { 0, 1 }
+
L((((0* 1*)*) 0 1*) 01)
+
L((((0* 1*)*) ) L( 0 1*)) L( 0) L(1)
+
(((L(0*) L(1)*)*) L(0) L(1)*) L( 0) L(1)
+
((((L(0))* (L(1))*)*) L(0) L(1)*) L( 0) L(1)
+
+
((({0}*∪{1}*)*) {0} ∪ {1} ) {0} {1}
(({ , 0, 00,…} ∪ { , 1, 11,...})* {0} ∪ {1, 11,...}) {01}
{ , 0, 00,…,1, 11,...}* {0, 1, 11...} {01}
{ , 0, 00,…,1, 11,...} {0, 1, 11...} {01}
{0, 1, 11,...00, 01, 011,...,000, 001,...,10,...} {01}
{001, 101, 1101,..., 0001, 00101, 0011,..., 00001, 00101,...}
4.
((ab cd*) (cd* ab)*) abcd sobre = { ab,cd }
+
+
L(((ab cd*) (cd* ab)*) abcd )
+
+
L(ab cd*) L(cd* ab)* L(ab) L(cd )
+
+
(L(ab cd*)) (L(c d* ab))* L(ab) (L(cd))
+
+
(L(ab) (L(cd))*) ((L(cd))* L(ab))* L(ab) (L(cd))
+
+
({ab} ∪ {cd})*) ({cd}* ∪ {ab})* {ab} {cd}
+
{ , ab, cd, cdcd,...} { , cd, cdcd,…,ab}* {abcd, abcdcd,…}
{ , ab, cd, cdcd,...} { , cd, cdcd,…,ab,…} { abcd, abc dcd,…}
{ , ab, cd, cdcd,...} {abcd, abcdcd,…,cdabcd, cdabcdcd,…, ababcd…}
{abcd, abcdcd,…,cdabc d, cdabcdcd,…,ababcd…}
5.
((((a b)* b ) )* a b*) ab sobre = { a,b }
+ +
L(((((a b)* b ) )* a b*) ab)
+ +
(L(((a b)* b ) )*) L(a b*) L(a) L(b)
+
((L(a b)* L(b) )* L(a) L(b*)) L(a) L(b)
+
(((L(a) L(b))* (L(b)) )* L(a) (L(b))*) L(a) L(b)
+
((({a} ∪ {b})* ∪ {b} )* {a} ∪ {b}*) {a} {b}
+
(({a,b}* ∪ {b} )* {a} ∪ {b}*) {ab}
({ , a, b, ab, ba,…,bb, bbb,…}* { , a, b, bb,…}) {ab}
({ , a, b, ab, ba,…,bb, bbb,…} { , a, b, bb,…}) {ab}
{ ,a, b, ab, ba,…, bb, bbb,…} {ab}
{ab, aab, bab, bbab, abab,…,bbab, bbbab,…}
+
+
+ +
PROPIEDADES ALGEBRAICAS DE LAS EXPRESIONES REGULARES
1.
ASOCIA TIVA
 La concatenación es asociativa:
abcd = (ab) (cd) = (abc)d = a(bcd)

El (o) es asociativo:
a b c d = (a b) (c d) = (a b c) d = a (b c d)
2.
DIS TRIBUTIVA
 La concatenación distribuye sobre el:
(a b) c = ac bc
(a b) (c d ) = a (c d) b (c d) = ac ad bc bd
= (a b) c (a b) d = ac bc ad bd
3.
IDE NTIDA D
 La es el element o identidad de la concatenación:
Ing. Luis Reyes Lescano
2
Compiladores e Interpretes
a =
4.
EPCI - UNPRG
a=a
IDEMP OTENCIA
...
((a*)*)* * = a*
+ + ...+
((a ) )* = a*
+ +...+
*
((a*) )
=a
+ + +...+
+
((a ) )
=a
+
5. a * a = a
+
a
= a*
6.
NOTA CIONES COMPLEME NTA RIAS
5
L 2 = LL LLL LLLL LLLLL
a? = a
[ 0 _ 9 ] = { 0, 1, 2,...,9 } = 0 1 2 ... 9
[ A _ Z, a _ z ] = { A, B, ... , Z, a, b, ... ,z } = A B ... Z a b ... z
7.
CONMUTA TIVA
 La concatenación no es conmutativa:
ab ba abc cba

El si es conmutativo
a b=b a
a b c=c b a
Ejemplo:
Aplicar las propiedades algebraicas y hallar los lenguajes asociados a las siguientes
expresiones regulares.
+
1. (a b)* (a b c ) ( b* c*)*
+
2. ((a* b) )*? (a? b?)* (a b)
+
4
2
3.
(( [a?]
a*)? b) (a b* c )
4.
([(a b)*]
5.
((a*a
6.
((a* 1* 0? 1?) (0* [1] 2 ) (0*)*? 3)
3
2
+
) ?) (a? a*
Ing. Luis Reyes Lescano
+
b*? (c?)*) (a? b*)
+
a )*?
3
3
Compiladores e Interpretes
EPCI - UNPRG
DEFINICIONES REGULARES
Son denominaciones es pecificas a expresiones regulares con la finalidad de definir un patrón de
formación de un componente léxico.
Notación:
d1
d2
.
.
n .
d
r1
r2
ri : E.R.
di : D.R.
r1 r2 ... rn
d1 d2 ... dn
rn
Ejemplo:
digito
0 1 2 ... 9 o [ 0_9 ]
+
entero
dígito
+
+
real
dígito . dígito
letra
A B C ... Z a b ... z o [A_Z,a_z ]
identificador
(letra | digito | _ )*
Lenguaje asociado
1. digito
L(digito) =
=
=
=
d.r
L (d.r)
L ( 0 1 2 ... 9 )
L(0)|L(1)| … |L(9)
{0} U {1} U… {9}
{0, 1, 2,... ,9}
+
2.
entero
dígito
+
+
+
L (ent ero) = L(digito ) = (L(digito))
= L ( 0 1 2 ... 9 )
+
+
= {L (0) L (1).... L (9)} = {{0} U {1} U... {9}}
+
= {0,1, 2,....,9} = {0,..., 9, 00,..., 99,...}
3.
real
L(real)
4.
letra
L(letra)
+
+
=
=
=
=
=
dígito . dígito
+
+
L(dígito ) L(.) L(dígito )
+
+
L (0 1 2 ... 9) L (.) L (0 1 2 ... 9)
+
+
{{0} U {1} U... {9}} {.} {{0} U {1} U... {9}}
{0,..., 9, 00,..., 99,...} {.} {0,..., 9, 00,..., 99,...}
{0.0, 0.1,…, 9.0,…}
=
=
=
=
A B C ... Z a b ... z o [A_Z, a_z ]
L(A B C ... Z a b ... z)
L(A)| L(B)| L(C)|... |L(z)
{A} U {B} U… U {a} U {b} U… U {z}
{A, B, C,…, Z, a, b, c,…, z}
Desarrollar las D. R. y hallar los lenguajes asociados de:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
operadores aritméticos.
operadores relacionales.
operadores lógicos.
número real.
número de notación cient ífica.
número entero, real y notación cient ífica todo al mismo tiempo.
identificador.
definición de una función de usuario.
sentencia printf.
declaración de variables.
Ing. Luis Reyes Lescano
4
Compiladores e Interpretes
1.
operadores aritméticos
op_arit  + - * /
L(op_arit) = L (+ - * /) = L(+)
= {+}U{-}U{*}U{/}
= {+,-,*, /}
EPCI - UNPRG
L( -)
L(*)
L(/)
2.
operadores relacionales
op_real  > < = <= >= <>
L(op_real) = L(> < = <= >= <>)
= L(>) L(<) L(=) L(<=) L(>=) L(<>)
= {>} U {<} U {=} U {<=} U {>=} U {<>}
= {>, <, =, <=, >=, <>}
3.
operadores lógicos
op_log  && || ~
L(op_log) = L(&& || ~)
= L(&&) L(||) L(~)
= { && } U { || } U {~}
= { &&, ||, ~}
4.
número real
real  digito + . digito+
L(real) = L(digito + . digito +) = L(digito +) L(.) L(digito+)
= (L(digito))+ L(.) (L(digito))+
= (L(0|1|2|… |9))+ L(.) (L(0|1|2|… |9))+
= { {0} U {1} U…U {9} }+ {.} { {0} U {1} U…U {9} }+
+
+
= { 0, 1,… 9 } {.} { 0, 1,… 9 }
= { 0, …, 9, 00,… 99,… } {.} { 0, …, 9, 00,… 99,… }
= { 0.0, 0.1,… 0.9, 00.0,… }
5.
número de notación científica
num_cientf  signo real E signo entero
L(num_cientf) = L(signo real E signo entero)
= L(signo) L(real) L(E) L(signo) L(entero)
= L(+| -| ) L(digito +. digito +) L(E) L(+|-| ) L(digito +)
= L(+| -| ) (L(digito +) L(.) L(digito+)) L(E) L(+|-| ) L(digito+)
= (L(+)|L(-)|L( ))(L(0|1|2|… |9))+L(.)(L(0|1|2|… |9))+)L(E)(L(+)|L(-)|L( ))(L(0|1|2|… |9))+)
+
+
+
= {{+}U{-}U{ }}{{{0}U{1}U…{9}} {.}}{0}U{1}U…{9}} }{E}{{+}U{-}U{ }}{{0}U{1}U…{9}}
+
+
+
= {+, -, }{{0, 1, 2,…,9} {.}{0, 1, 2,…,9} }{E}{{+, -, }{0, 1, 2,…,9} }
= {+, -, }{{0, 1,…9, 00,…99,…}{.}{0, 1,…9, 00,…99,…}}{E}{{+, -, }{0, 1,…9, 00,…99,…}}
= {+, -, }{0.0,… ,0.1, 1.0,…1,…}{E}{+0,… ,+9, +00,… ,-0,… ,-9, -00,… 0,… 9,…}
= {+0.0E+0,… ,+0.0E-0,… ,+0.0E0,… ,.-0.00E,…}
6.
número entero, real y notación científica todo al mismo tiempo
num_entrealnc  (+|-)? digito+ (. digito +)? (E (+|-)? digito + )?
(+|-| ) digito + (. digito+| ) (E (+|-| ) digito +| )
L(num_entrealnc) = L(+|-| ) digito + (. digito+| ) (E (+|-| ) digito+ | )
+
+
+
= L(+| -| ) L(digito ) L(.digito | ) L(E) L(+|-| ) L(digito | )
+
+
= L(+)|L(-)|L( )(L(0|1|2|… |9)) L(.)(L(0|1|2|… |9)) |L( )L(E)(L(+)|L(-)|L( )(L(0|1|2|… |9))+)|L( )
= {+}U{-}U{ }{{0}U{1}U…{9}}+ {{.}{{0}U{1}U…{9}}+U{ }}{E}{+}U{-}U{ }{{0}U{1}U…{9}}+U{ }
= {+, -, }{0, 1, 2,…,9}+ {{.}{0, 1, 2,…,9}+, {{E}{+, -, }{0, 1, 2,…,9}+, }
= {+, -, }{0, 1,…9, 00,…99,…}{{.}{0, 1,…9, 00,…99,…}, }{{E}{+, -, }{0, 1,…9, 00,…99,…},{ }
= {+0,… ,-0,…,0,…}{.0,… ,.00,… ,.,… , }{E+0,… E-0,… E0,…}
= {+0.0E+0,… ,+0.0E-0,… ,+0.0E0,… ,.-0.00E,…}
7.
identificador
identif  letra ( letra | digito | _ )*
L(identif) = L(letra ( letra | digito | _ )*)
= L(letra) L(letra | L(digito) | L(_)*
= L(letra) (L(letra | L(digito) | L(_))*
= L(A B ...) (L(A B ...) | L(0|1|2|… |9) L(_))*
Ing. Luis Reyes Lescano
5
Compiladores e Interpretes
EPCI - UNPRG
= {{A}U{B}U,…} {{{A}U{B}U,…} U {{1}U{2}U…} U {_}}*
= {A, B,…} { , A, B,…,1, 2,…, _, AA….}
= {A, B,…,AA, AB,….,A1,… .A_,…, _,…}
Ing. Luis Reyes Lescano
6
Descargar