Escolar Documentos
Profissional Documentos
Cultura Documentos
ExpressoesLinguagensGramaticasRegulares - Apont PDF
ExpressoesLinguagensGramaticasRegulares - Apont PDF
CAPTULO 3
3.1. Introduo
Vimos que uma linguagem regular se for aceite por um DFA ou um NFA. Poderemos assim
representar uma linguagem pelo seu autmato. Se o autmato tiver um elevado nmero de
estados, no possvel, por simples inspeco visual, ver qual a sua linguagem. Interessa por
isso uma forma mais simples de representar uma linguagem regular, que seja de utilizao
expedita, de modo anlogo ao de uma frmula qumica de uma substncia: olhando para ela
extrai-se logo uma grande quantidade de informao sobre a sua natureza.
esse o objectivo das expresses regulares: so formas simples, expeditas, com muita
informao, de representar linguagens regulares.
J vimos que uma linguagem pode ser definida por uma gramtica. Dada uma linguagem
regular, pode interessar conhecer uma gramtica que a gere, e neste caso diz-se gramtica
regular. E sempre possvel encontr-la, com recurso aos autmatos finitos. Autmatos
finitos, gramticas regulares, expresses regulares, so trs formas de representar o mesmo
conjunto: uma certa linguagem regular. Estudaremos neste captulo a forma como essas trs
representaes se relacionam.
Uma expresso regular uma forma de descrever linguagens regulares. So expresses com
smbolos de um dado alfabeto e caracteres operadores sobre as cadeias, isto , so expresses
algbricas. Dado um alfabeto 6, uma expresso regular desenvolvida a partir de
- os smbolos do alfabeto
- os operadores de
unio : ou +
concatenao:
fecho-estrela : *
- de parnteses
Exemplo 3.2.1.
= {O, a, bc, aa, abc, bca, bcbc, aaa, aabc, abcbc, abca, bcbcbc, }
Uma definio por recursividade usa como sabemos um conjunto de primitivas e uma
recurso. Assim tambm para as expresses regulares:
2. Recurso: indica como se obtm expresses regulares a partir umas das outras:
3. Uma cadeia uma expresso regular se e s se ela puder ser derivada a partir das
expresses regulares primitivas e pela aplicao de um nmero finito de vezes das
regras de 2 (princpio da recursividade)
Exemplo 3.2.2
01* = {0, 01, 011, 0111,}, 0 concatenado com um nmero arbitrrio de 1s.
(0+1)* = {0, 1, 00, 01, 10, 11, ..}, i.e., toda e qualquer as cadeias com 0 e 1.
(0+1)*00(0+1)*
esquerda temos (0+1)*, qualquer cadeia de 0s e 1s. direita temos a mesma coisa.
Mas no centro temos o par 00. Quer dizer que esta expresso regular representa qualquer
cadeia que contenha o par 00 precedido por qualquer nmero de 0s e 1s e seguido de
qualquer nmero de 0s e 1s, ou seja,
i.e., todas as cadeias de 0 e 1 contendo 00 em qualquer posio. O par 00 tem que aparecer
uma vez, mas pode aparecer alm disso qualquer nmero de vezes.
Exemplo 3.2.3
Para responder temos que ver se ela se pode obter a partir das expresses regulares
primitivas por uma recurso:
E (a + c + ) expresso regular ?
a , c so er primitivas
a+c uma er
Exemplo 3.2.4.
Exemplo 3.2.5
E no caso (0+1)*011 ?
A primeira parte (0+1)* produz todas as cadeias. A segunda parte, 011, concatena o
sufixo 011 a todas as cadeias da primeira parte. Portanto temos a linguagem de todas as
cadeias em {0,1} que terminam em 011.
Teremos um nmero arbitrrio de 0s (de 0*) seguido de um nmero arbitrrio de 1s (de 1*).
Podemos resumir dizendo que a linguagem de todas as cadeias que no tm um 0 depois
de 1.
Definio 3.2.2. Se r uma expresso regular, L(r) denota a linguagem associada com r.
6. L((r1)) = L(r1)
7. L(r1*) = (L(r1))*
Para se verificar qual a linguagem que corresponde a uma dada expresso regular,
aplicam-se aquelas regras tantas vezes quantas as necessrias.
2- concatenao (),
3- (+) unio
Exemplos 3.2.8:
Em 6 = { a, b, c }
Em 6 = {a, b}
v) Em 6 = {0,1} escrever a expresso regular para a linguagem das cadeias que contm
um nmero mpar de zeros, ou seja,
Nota:
Exerccios:
i) (1+01+001)*(O+0+00)
ii) ((0+1)(0+1))*+((0+1)(0+1)(0+1))*
Resoluo:
i) Uma cadeia da linguagem tem que conter 00 em algum lado. Antes ou depois do par
de zeros pode conter qualquer cadeia arbitrria. Como sabemos uma cadeia arbitrria de zeros
e uns dada por (0+1)*.
A soluo tem por isso trs partes; o par 00 precedido e sucedido por (0+1)* ou seja,
r1 = (1+0)*00(1+0)*
Note-se que o enunciado no impede a existncia de mais pares de zeros para alm do
obrigatrio. Nunca confundir ter um par de zeros com ter um s par de zeros.
ii) Esta linguagem a complementar da anterior. No caso dos autmatos sabemos como
desenhar o autmato do complemento a partir do autmato original: basta trocarmos a misso
dos estados, passando os aceitadores a no aceitadores e os no aceitadores a aceitadores.
Se a linguagem no tem qualquer par de zeros consecutivos, quer dizer que sempre que
aprece um 0 ele deve ser seguido imediatamente por um 1, i.e., o 0 s pode aparecer na
cadeia 01
Faltam tambm as cadeias que s tm 1s; para elas basta adicionar 1*.
Este resultado responde pergunta. Por uma questo de elegncia podemos procurar
simplificar a expresso.
Pensando de outro modo, talvez mais simples, as cadeias sem zeros consecutivos so a
repetio arbitrria das subcadeias 1 e 01, isto , (1+01)*, s quais se pode ou no
adicionar um zero no fim , obtendo-se r3
r3= (1+01)*(0+O)
L+M=M+L
(L + M) + N = L + (M + N)
Se queremos fazer a unio de trs conjuntos, poderemos unir os primeiros dois e depois
unir o resultante com o terceiro; ou podemos unir os dois ltimos, unindo depois o primeiro
com o conjunto resultante.
(LM)N = L(MN)
Mas no comutativa
LMML
A prova imediata.
A concatenao tem alguma analogia com o produto algbrico e a unio com a adio. A
concatenao distributiva esquerda em relao unio:
L (M + N) = LM + LN
(M + N)L = ML + NL
(MN) + L (M + L)(N + L)
L + (MN) (L + M)(L + N)
Para provar que assim , faz-se prova por contradio: supe-se que igual e procura-se
um caso em que no o seja. As propriedades tm que ser gerais, vlidas para todas as
linguagens e todas as cadeias em cada linguagem.
(ab)+c= (a+c)(b+c)
Numa certa lgebra, a identidade o elemento que operado com qualquer outro elemento d
esse elemento, tal como 1 na multiplicao numrica.
+L=L+=L
OL=LO=L
O anulador o elemento que operado com outro elemento d sempre o conjunto vazio.
L = L =
O fecho estrela uma operao muito importante em expresses regulares quando se trata de
linguagens infinitas.
(i) (L*)* = L*
(iii) L* = L+ + O
(iv) * = O
(v) O * = O
Esta ltima merece alguns comentrios, j que as restantes so mais ou menos evidentes.
(a+b)* = (a*b*)*
Poderemos ver que qualquer cadeia gerada pela expresso da direita pode ser gerada
pela expresso da esquerda e vice-versa. Para uma prova mais formal ver Hopcroft p. 118.
L + ML = (L + M)L
tem que se provar que qualquer cadeia gerada pela er da esquerda tambm gerada pela RE
da direita.
Para auxiliar a prova podem-se substituir os smbolos das er por caracteres de um alfabeto,
no caso por exemplo
(a+ba) = (a + b)a
Uma linguagem regular, como vimos no Cap.2, de for aceite por um DFA ou por um NFA
(dado que estes so equivalentes a DFA).
Se pudermos construir um NFA a partir de uma expresso regular r qualquer, ento essa
expresso regular denotar uma linguagem regular L(r). De facto assim . Para o provar,
recorre-se definio recursiva de L(r) e segue-se a definio 3.1 de expresso regular.
r=O
Figura 3.4.2. Aceitador de O
a
iii) NFA aceitador de L3={a} q1
q0
r=a
Figura 3.4.3. Aceitador de a
2 Admitamos que temos uma expresso regular r e que o NFA que aceira L(r)
representado pela Figura 3.4.4 genrica,
M (r)
q0 qf
com o estado inicial q0 e o estado final qF. Note-se que qualquer NFA pode ser representado
com um s estado final.
3 Suponhamos agora que temos dois NFAs M(r1) e M(r2) que aceitam as linguagens
L(r1) e L(r2) definidas pelas expresses regulares r1 e r2. Construam-se os NFA para a
segunda parte da Definio 3.2.2 do modo seguinte:
iv) L(r1+r2)
M (r1)
O O
q0 q
O M (r2)
O
O NFA aceita a unio das linguagens, L1 pela parte de cima e L2 pela de baixo.
v) L(r1r2)
M (r1) M (r2)
O O O
q qf
O NFA aceita uma cadeia que resulte da concatenao de uma cadeia de L1 (que leva o
autmato ao estado aceitador da de M(r1)) com uma cadeia de L2 que lava depois a qf.
vi) L(r1*) O
M (r1)
O O
q qF
O
Figura 3.4.7. Autmato do fecho-estrela de uma expresso regular.
r1*=O+r1+r1r1+r1r1r1+
O O vai pela parte de baixo do NFA directamente para o aceitador, portanto est includo
na linguagem do NFA.
Usando estas mquinas possvel construir um NFA para qualquer expresso regular.
Pode-se por isso enunciar o teorema:
Se r uma expresso regular, existe algum autmato finito no-determinstico que aceita
L(r). Logo L(r) uma linguagem regular.
Exemplo 3.4.1.1
r=1*
Sendo 1 uma expresso regular primitiva, desenha-se o seu autmato. Depois aplica-se-
lhe a regra do fecho estrela.
O
O 1
O
O
Figura 3.4.8 Autmato NFA de 1*
1 0,1
0
DFA q0
Exemplo 3.4.1.2.
r=a+a*b
r=ab+(b+ab)*
possvel depois encontrar uma expresso regular que gere todas essas etiquetas. Para
facilitar esta operao, usam-se os grafos de transio generalizados.
Temos ento o seguinte caminho pata encontrar uma expresso regular para uma dada
linguagem
Uma aresta etiquetada com um nico carcter a interpreta-se como etiquetada pela
expresso regular a.
Uma aresta etiquetada por vrios caracteres a, b, ..., interpreta-se como etiquetada pela
expresso regular a + b + ....
Pode-se assim afirmar que para toda a linguagem regular existe um grafo de transio
generalizado que a aceita. Por outro lado toda a linguagem aceite por um grafo generalizado
uma linguagem regular.
No proceddimento tem que se assegurar que que no se altera a linguagem aceite pelo
NFA e denotada pelo conjunto das etiquetas que se podem gerar desde o estado inicial at ao
estado final.
e
d c
q qj
qi
a b
Para que isso acontea temos que analisar com ateno as etiquetas (expresses
regulares) das arestas das transio possveis entre os estados que ho-de restar. Por exemplo
para ir de qi at qi, um ciclo fechado, vai-se com a at q, com um nmero qualquer de es, ou
qi o qi : ae*d
qi o qj : ae*b
qj o qj : ce*d
qj o qi : ce*b
qi qj
ae*b
Note-se que no estado q entram e saem arestas para ambos os estados adjacentes e para
si prprio. No caso de alguma delas no existir, omite-se o correspondente no grafo
simplificado.
Este procedimento assegura que a linguagem aceite no alterada. Num grafo com mais
estados, mais complicado, o processo completo exige que este procedimento seja feito
sucessivamente para todos os pares (qi, qj) em Q {q} antes de se remover q (i.e., todos os
pares que estejam ligados a q). Por outro lado elimina-se um estado de cada vez, at restarem
apenas dois. As transies generalizadas permitem-nos reduzir qualquer autmato finito a um
outro com apenas dois estados.
Teorema 3.4.2 (3.2). Seja L uma linguagem regular. Ento existe uma expresso regular r tal
que L=L(r).
Demonstrao:
Existe um NFA que aceita L, com um s estado final e tal que o estado inicial q0 no
estado final. Pode-se interpretar como um grafo de transio generalizado
r1 r4
r3
q0 qf
r2
Figura 3.4.14, Qualquer NFA pode ser reduzido a
esta forma.
r=r1*r2(r4 + r3r1*r2)*
r1 r4
r3
qf
r2
Figura 3.4 15. Caso em que o estado inicial aceitador.
a expresso regular
r=(r1*+ (r2r4*r3))*
Exemplo 3.4.2.1
O
q
A A
1 1
1 1
0 0
C 1 C
1
B
B
0 0
Figura 3.4.16. Exemplo 3.4.2.1 Figura 3.4.17. Introduo de um
estado inicial na Fig. 3.4.16
0 11*0
O 11*0
q A B
r4
O
q0 A
r4 = ( 0 + 11*0(11*0)*0 )*
r=O(r4 + )* =r4*= r4
como vimos no Cap. 1. No caso das linguagens regulares teremos gramticas regulares, uma
classe de gramticas lineares.
Uma gramtica G = (V,T,S,P) diz-se linear direita se todas as suas produes so da forma
A o xB,
A o x,
em que
O seu nome deriva do facto de a varivel aparecer direita do smbolo terminal, e por
isso as cadeias vo sendo produzidas da esquerda para a direita. linear por ter apenas uma
varivel, tal como uma equao A=xB, linear em B se x for uma constante.
A o Bx,
A o x,
Uma gramtica diz-se regular se ela ou linear esquerda ou linear direita. Na parte
direita das produes aparece no mximo uma varivel e ela situa-se sempre na posio mais
direita ou sempre na posio mais esquerda do lado direito das produes.
Exemplo 3.5.1.1
P1 : S o abA
P2 : S o a
P : S o abA|a
De cada vez que se aplica P1 introduz-se ab. Aplicando duas vezes, fica (ab)2S depois
para eliminar S tem que se aplicar P2 resultando em (ab)2a. Aplicando trs vezes P1 fica
(ab)3S e depois P2 termina a derivao em (ab)3a.
r=(ab)*a
Exemplo 3.5.1.2
P1 S o Aab
P2 A o Aab | B
P3 Boa
Exemplo 3.5.1.3.
G3 =({S,A,B}, {a,b}, S, P }
P1 SA
P2 A aB
P3 AO
P4 B Ab
Esta tem produes lineares direita (P2) e outras lineares esquerda (P4) (P1 e P3 tanto
so lineares esquerda como direita) por isso linear mas no regular. Uma gramtica
linear se do lado direito de cada produo aparece no mximo uma varivel, seja direita seja
esquerda. Se regular linear, mas nem todas as lineares so regulares.
Exemplo 3.5.1.4.
G4 =({S}, {a,b}, S, P }
P: S aSSa | O
no linear porque do lado direito de uma produo aparecem duas variveis (no caso duas
vezes S ).
Uma linguagem gerada por uma gramtica linear direita regular. Para o provar, constri-se
um NFA que imite as derivaes da gramtica linear direita. Se se conseguir, suficiente
para provar que a linguagem regular.
Numa gramtica linear direita, qualquer forma sentencial tem uma e uma s varivel
que o smbolo mais direita. Uma passo numa derivao resultante de uma produo resulta
em
ab...cD ab...cdE
Um NFA pode imitar esta produo se tiver um estado D e um estado E e entre os dois
uma aresta etiquetada por d :
D d
E
Teorema 3.5.1.(3.3) Uma gramtica linear direita produz uma linguagem regular
Seja G = (V,T,S,P) uma gramtica linear direita. Ento L(G) uma linguagem regular.
Para o demonstrar constri-se um NFA que imite as produes da gramtica como visto
acima.
Sejam
P: V0 v1Vi
Vi v2Vj
Vn vl
V0 v1Vi
v1v2Vj
....
*
v1v2...vkVn
v1v2...vkvl = w
O NFA a ser construdo imita cada derivao consumindo um v de cada vez. V0, Vi, Vj,
..., Vn so estados do autmato, mas existem outros entre eles quando os vs so cadeias com
mais de um carcter. Alm disso preciso acrescentar o estado final.
Vi o a1a2a3...amVj
ento o NFA ter um caminho ligando Vi a Vj, ou seja G (Vi, Vj) existe e ser definida por
G*(Vi, a1a2a3...am) = Vj
Vi a1 a2 am Vj
Vi o a1a2a3...am
G*(Vi, a1a2a3...am) = Vf
Vi a1 a2 am Vf
Se uma cadeia wL(G) ento ela foi gerada por um conjunto de produes definidas
acima. No NFA existe, por construo, um caminho etiquetado w que vai de V0 at Vf ou seja,
w aceite pelo NFA.
Se uma cadeia w aceite pelo NFA, ento, pelo modo como este foi construdo, para
aceitar w o autmato tem que passar por uma sequncia de estados V0, Vi,... at Vf usando
caminhos etiquetados v1, v2, ...., ou seja, w tem necessariamente a forma
w= v1v2...vkvl
*
V0 v1Vi v1v2Vj v1v2...vkVn v1v2...vkvl = w
q.e.d.
Exemplo 3.5.2.1
com P: So aA | aB ,
Ao bB | b ,
Bo aA | bB .
Para se construir o NFA corresondente, cria-se um estado por cada varivel mais um
estado final, resultando em 4 estados S,A,B,F. Depois as transies entre cada dois estados
extraem-se das produes: a etiqueta o smbolo terminal da produo repectiva. As
produes que permitem completar a derivao, as que tm no lado direito apenas caracteres
b
S a A
F
a
a
b
Para provar que toda a linguagem regular pode ser gerada por uma gramtica linear direita
Teorema 3.5.2.(3.4) Se L uma linguagem regular no alfabeto 6, ento existe uma gramtica
linear direita G=(V,6, S,P) tal que L=L(G).
Demonstrao:
Q= {q0 ,q1,...qn }
Vamos fazer a prova do teorema construindo uma gramtica linear direita a partir do
DFA. Para isso
S = q0
qi o ajqk cria-se uma produo por cada transio entre dois estados
Por outro lado, se uma cadeia w pertence a L, ento ela pode ser derivada pela gramtica
G. A demonstrao mais detalhada ser vista por exemplo em Linz p. 94.
qi o ajqk cria-se uma produo por cada transio entre dois estados
Exemplo 3.5.3.1
a a a
q0 q1 q2 qf
Transies em M Produes em G
G (q2,b)={q2} q2 o bq2
qf F qf o O
Exemplo 3.5.3.2.
aab*a+aa
a b
a a a
q1 q2 q3 q4
ab*a b
a a
q5 q6 q7
Reduz-se a um NFA com um s estado inicial e um s estado final criando um estado inicial
global e um estado final global com as necessrias transies O-
a b
a a a
q1 q2 q3 q4 O
O b
qf
q O
O a a
q5 q6 q7
Transies em M Produes em G
G (q6,a)={q7} q6 o aq7
G (q7, O)={qf} q7 o qf
qf F qf o O
Nos pargrafos anteriores vimos a equivalncia entre linguagens regulares, autmatos finitos
e gramticas lineares direita. Que se passa com as gramticas lineares esquerda ?
Tal como para as gramticas lineares direita, tambm para as gramticas lineares
esquerda se pode enunciar o teorema de equivalncia:
Vimos neste captulo que dada uma expresso regular, poderemos construir um autmato
finito NFA ou DFA, e vice-versa. Vimos tambm que dado um DFA ou um NFA podemos a
partir deles extrair uma gramtica regular; e dada uma gramtica regular poderemos construir
um autmato finito equivalente. Temos assim diversas equivalncias possveis (note-se que
qualquer relao de equivalncia uma relao transitiva). Estas equivalncias esto
esquematizadas na figura seguinte.
Teorema Teorema
3.1 3.2
DFA ou NFA
Teorema
Teorema
3.4
3.3
Bibliografia:
An Introduction to Formal Languages and Automata, Peter Linz, 3rd Ed., Jones and Bartelett
Computer Science, 2001.
Models of Computation and Formal Languages, R. Gregory Taylor, Oxford University Press,
1998.
Introduction to Automata Theory, Languages and Computation, 2nd Ed., John Hopcroft,
Rajeev Motwani, Jeffrey Ullman, Addison Wesley, 2001.
Elements for the Theory of Computation, Harry Lewis and Christos Papadimitriou, 2nd Ed.,
Prentice Hall, 1998.
Introduction to the Theory of Computation, Michael Sipser, PWS Publishing Co, 1997.