|
|
Expressões Regulares e Gramáticas |
||||||||
Expressões Regulares (introdução) |
||||||||
|
Linguagem aceita pelos autômatos finitos. |
|||||||
Concatenação |
||||||||
|
Se x é uma cadeia, então x* = {l , x, xx, xxx, ...} é um fechamento transitivo de concatenação. |
|||||||
|
Exemplos: |
|||||||
|
1- |
(01)* = {l , 01, 0101, 010101, ...} |
||||||
|
2- |
abc*d = {abd, abcd, abccd, abcccd, ...} |
||||||
|
3- |
0*1* = {l , 0, 1, 01, 001, 011, 0011, ...} |
||||||
|
4- |
(0*1*)*1 = 0*1*0*1*...0*1*1 |
||||||
|
5- |
(b*ab*a)*b* = cadeias de a's e b's com número par de a's. |
||||||
Expressões Regulares (definição) |
||||||||
|
Um símbolo qualquer é uma expressão regular. |
|||||||
|
Se x e y são expressões regulares, a sua concatenação xy também é uma expressão regular. |
|||||||
|
Se x é uma expressão regular, x* também é uma expressão regular. |
|||||||
|
A união de duas expressões regulares é uma expressão regular. |
|||||||
|
A expressão obtida por uma quantidade finita de aplicações da expressão regular a à expressão regular b é uma expressão regular. |
|||||||
Gramáticas |
||||||||
|
As gramáticas são produzidas pelo comportamento de autômatos finitos, como mostrado a seguir: |
|||||||
|
|
|||||||
|
Produção: |
|||||||
|
|
S0 ® 1 S1 g(S0,1) = S1 |
||||||
|
|
S0 ® 0 S0 g(S0,0) = S0 |
||||||
|
|
S1 ® 0 S0 g(S1,1) = S0 |
||||||
|
|
S1 ® 1 S1 g(S1,1) = S1 |
||||||
Estados |
||||||||
|
Representação de estados INICIAL (S0), FINAL (S1 ® l ) |
|||||||
|
Exemplo : Pelo autômato finito da figura anterior... |
|||||||
|
|
S0 ® 0 S0 | 1 S1 P(1) |
||||||
|
|
S0 ® 1 S1 | 0 S0 | l |
||||||
|
Dado o autômato finito abaixo: |
|||||||
|
|
|||||||
|
|
S0 ® b S0 | a S1 | l P(2) |
||||||
|
|
S1 ® b S1 | a S0 |
||||||
|
Pode-se dizer que um autômato finito representa um reconhecedor e gramáticas representam geradores de cadeias. |
|||||||
Produções |
||||||||
|
Regras de produção de símbolos através de substituições de símbolos sucessivamente. Com P1 podemos gerar: S0 Ü 0S0 Ü 00S0 Ü 001S1 Ü 0010S0 Ü 00101S1 Ü 001011S1 Ü 001011 |
|||||||
Autômatos Finito como Gerador de Cadeias e Conjunto de Produções como Reconhecedor de Cadeias |
||||||||
|
ê |
Zero ou mais passos de gerações |
||||||
|
S0 ê |
0S0 |
||||||
|
S0 ê |
00S0 |
||||||
|
S0 ê |
001011 |
||||||
|
S0 ê |
00101S1 |
||||||
Gramática (introdução) |
||||||||
|
Conjunto de regras de substituição de cadeias (produções) |
|||||||
|
Símbolo inicial |
|||||||
|
Símbolos auxiliares ou NT |
|||||||
|
Símbolos das cadeias finais geradas (T) |
|||||||
Gramática (definição) |
||||||||
|
Seja G uma gramática definida como G = (VN, VT, S, P); então |
|||||||
|
VN : Alfabeto (conjunto finito) de símbolos NT |
|||||||
|
VT : Alfabeto de símbolos T |
|||||||
|
S Î VN |
|||||||
|
P : Conjunto finito de produções da forma a ® b |
|||||||
|
|
a Î (VN U VT)* - {l } |
||||||
|
|
b Î (VN È VT)* |
||||||
|
Exemplo 1: |
|||||||
|
|
X = {a, b} |
||||||
|
|
X* = {l , a, b, aa, ab, ba, ...} |
||||||
|
|
G1 = ({S0, S1},{1, 0 , l }, S1, { S0 ® 0S0 , S0 ® 1S1 , S1 ® l , S1 ® 0S0 , S1 ® 1S1}) |
||||||
|
Exemplo 2: |
|||||||
|
|
G2 = (VN, VT, S0, P2) |
||||||
|
|
VN = { S0 , S1} ; VT = { a , b, l } |
||||||
|
|
P2 = { S0 ® bS0 , S0 ® aS1 , S0 ® l , S1 ® aS0 , S1 ® bS1 } |
||||||
Geração de Cadeias a partir de Gramáticas |
||||||||
|
Definição: Dada a gramática G = (VN, VT, S, P), dizemos que uma cadeia a g b gera diretamente a d b , com a , b Î (VN È VT)* se g ® d é uma produção de P. Notação: gera diretamente : a g b Ü a d b Obs.: A seta preenchida (Ü ) está sendo usada para representar uma seta com uma bola preenchida em cima. |
|||||||
|
Exemplo: 001S1 Ü 0010S0 |
|||||||
|
a = 001 ; b = l ; g = S1 ; d = 0S0 |
|||||||
|
Definição: Dada uma gramática G = (VN, VT, S, P), dizemos que uma cadeia a gera uma cadeia b se existir uma seqüência de gerações diretas para G, da forma: a = a 1 Ü a 2 Ü ... Ü a n = b , n ³ 1. Notação: a ê b Obs.: A seta não preenchida (ê ) está sendo usada para representa uma seta com um asterisco em cima. |
|||||||
|
Exemplo: Considerando P1 temos 001S1 ê 001011S1 |
|||||||
|
Definição: Dizemos que uma cadeia a Î (VN È VT)* é uma forma sentencial de uma gramática G = (VN, VT, S, P) se S ê a . |
|||||||
|
Exemplo: Para P1 temos as formas sentenciais: S0 , 0S0 , 00S0 , ... , 001011aS1 |
|||||||
|
Definição: A linguagem gerada por uma gramática G = (VN, VT, S, P), denotada L(G), é o conjunto de todas as cadeias que possuem apenas símbolos terminais, e que são geradas a partir de S, ou seja, L(G) = {v Î VT* | S ê v } |
|||||||
|
Exemplo: Linguagem gerada por G1 : L(G) = {1, 01, 11, 001, 011, 101, 111, 0001, ...} |
|||||||
|
Definição (Equivalência de gramáticas): Duas gramáticas são equivalentes se, e somente se, L(G') = L(G''). |
|||||||
Correspondência entre Autômatos Finitos e Gramáticas |
||||||||
Definição: Seja um autômato finito M = (E, e0, F, A, g). Uma gramática G = (VN, VT, S, P) é correspondente ao autômato finito M se: |
||||||||
|
VN = E VT = A È {l } S = e0 P é constituído da seguinte forma: Uma produção N ® tQ para cada transição g(N, t) = Q e N ® l para cada N Î F. |
|||||||
|
||||||||
|
||||||||
Gramáticas (não regulares) mais gerais |
||||||||
Definição: São gramáticas mais poderosas do que as gramáticas equivalentes a autômatos finitos. |
||||||||
Exemplo: Gramáticas com produções da forma: N ® QRt, tNR ® Q, etc. com N, Q, R Î VN e t Î VT |
||||||||
Gramáticas Regulares |
||||||||
Definição: São gramáticas mais restritas e mais próximas das formas de produção correspondentes às transições de autômatos finitos. |
||||||||
Definição: Uma gramática G = (VN, VT, S, P) diz-se regular (GR), ou do tipo 3, se as suas produções são da forma: N ® tM ou N ® t', onde N, M Î VN e t, t' Î VT e t ¹ l . |
||||||||
Exemplo: G3 = (VN, VT, S, P), onde VN = {S, M},VT = {a, b, c} e |
||||||||
S® bS | aM | c M® bS |
ý |
P3 |
||||||
G3 é regular, L(G3) = {c, bc, abc, ababc, ... , ddc, ...} |
||||||||
Qual é o autômato finito correspondente a G3 ? Vamos mudar P3 para P3' de uma gramática G3', tal que L(G3) = L(G3') e G3' corresponde a um autômato finito. |
||||||||
S® bS | aM | cN , M® bS , N ® l |
ý |
P3' |
||||||
O autômato finito correspondente a G3' é : |
||||||||
|
||||||||
|
Teorema: Dada uma gramática regular G, existe um autômato finito M equivalente a ela, isto é, tal que L(G) é igual à linguagem aceita por M, e vice-versa. |
|||||||
Exemplo: |
||||||||
S® aM | aN , M® b , N ® c |
ý |
G4' |
||||||
|
||||||||
Autômato Finito não Determinístico |
||||||||
|
Introdução: g(S, a) = M , g(S, a) = N ; g é aplicação de transição. |
|||||||
Definição: Um autômato finito M = (E, e0, F, A, g) é não determinístico se existirem e1, e2, e3 Î E e a Î A tal que g(e1, a) = e2 e g(e1, a) = e3 , com e2 ¹ e3 ; caso contrário ele é determinístico. |
||||||||
Equivalência entre Autômatos Finitos Determinísticos e não Determinísticos |
||||||||
|
||||||||
Equivalência entre Gramáticas Regulares e Expressões Regulares |
||||||||
Dada uma expressão regular E, existe uma gramática regular G equivalente, isto é, L(G) = E, e vice - versa. |