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