Você está na página 1de 38

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

CAPTULO 3

EXPRESSES REGULARES, LINGUAGENS REGULARES E


GRAMTICAS REGULARES

3.1 Introduo

117

3.2 Expresses Regulares

117

3.3 Regras algbricas para expresses regulares

126

3.4 Relao entre expresses regulares e linguagens regulares

130

3.5 Gramticas regulares

140

3.6 Sntese das equivalncias

151

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

115

Teoria da Computao

LEI/DEI/FCTUC/2009/@ADC

Cap. 3 Expresses regulares, linguagens e gramticas

Documento de trabalho

116

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

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.
Mas se assim , e se a uma expresso regular corresponde sempre uma linguagem
regular, para uma expresso regular h-de haver um autmato finito que represente a mesma
linguagem, dado que toda a linguagem regular tem o seu DFA ou NFA.
H portanto uma estreita relao entre expresses regulares e linguagens regulares.
Estud-la-emos neste captulo.
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.

3.2. Expresses regulares


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

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

117

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

unio : ou +

concatenao:

fecho-estrela : *

de parnteses

Exemplo 3.2.1.
Consideremos o alfabeto 6={a, b, c, ..., z}.
Nele a linguagem finita L = {a} definida pela expresso regular : a
A linguagem L = {a, b, c }, definida pela expresso regular: abc ou a+b+c. O
operador unio em conjuntos corresponde ao operador adio nas expresses regulares.
Muitas linguagens so infinitas e no se podem por isso escrever por enumerao
explcita. A linguagem definida pela expresso regular (a+bc)* uma linguagem infinita
devido ao fecho-estrela. Por definio de *, teremos
L= {(a+bc)0 (a+bc)1 (a+bc)2 (a+bc)3

= {O, a+b.c, (a+bc)(a+b.c), (a+bc)(a+b.c)(a+b.c), }


= {O, a, bc, aa, abc, bca, bcbc, aaa, aabc, abcbc, abca, bcbcbc, }
No alfabeto 6 = {a, b, c} a linguagem (a + b)* composta pelas cadeias cadeias O, a,
b, aa, bb, ab, ba, aaa, abbaa, bbbaabab, .Qualquer cadeia que contenha s as e bs pode
ser obtida desta expresso regular. Como obter ababaa ? Fica o desafio ao leitor.
No mesmo alfabeto a linguagem a*b* composta pelas cadeias an bm , n,mt 0 ou seja

O, a,b, aab, aabb, abb, bbb, aabbbb,...


Finalmente, ainda no mesmo alfabeto, a linguagem (c+) contm apenas a cadeia c.
As expresses regulares so formas sintticas de exprimirmos as operaes sobre
cadeias que estudmos no Cap. 1. So como que expresses algbricas num dado alfabeto. No
entanto poderemos defini-las formalmente.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

118

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

3.2.1. Definio formal, recursiva, de expresso regular


Uma definio por recursividade usa como sabemos um conjunto de primitivas e uma
recurso. Assim tambm para as expresses regulares:
Definio 3.2.1. Seja um 6 um dado alfabeto. Ento:
1. As expresses regulares primitivas so compostas por zero ou um carcter:

, O e a 6 (para a6 ) so todas expresses regulares primitivas


2. Recurso: indica como se obtm expresses regulares a partir umas das outras:
Se r1 e r2 so expresses regulares, tambm o sero
2.1 r1+r2,

(soma de duas expresses regulares)

2.2 r1r2,

(concatenao de duas expresses regulares)

2.3 r1* , r2*

(fecho-estrela de uma expresso regular)

2.4 (r1), (r2)

(parntese de uma expresso)

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
Seja o alfabeto 6={0,1}
A expresso regular seguinte define a linguagem indicada
01* = {0, 01, 011, 0111,}, 0 concatenado com um nmero arbitrrio de 1s.
Se concatenarmos toda e qualquer cadeia desta linguagem com 01 obtm-se
(01*)(01) = {001, 0101, 01101, 011101, ..}
Por outro lado

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

119

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

(0+1)* = {0, 1, 00, 01, 10, 11, ..}, i.e., toda e qualquer as cadeias com 0 e 1.
Analisemos agora a expresso regular
(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,
{00, 1001, 00110, 10100, 010101000111000..},
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
No alfabeto 6 = {a,b,c}, ser (a+bc)*(c+) uma expresso regular ?
Para responder temos que ver se ela se pode obter a partir das expresses regulares
primitivas por uma recurso:
Os smbolos a,b,c, so expresses regulares primitivas.
b.c uma expresso regular (er) , do item 2.2. da definio,
a+b.c uma er, do item 2.1 da definio,
(a+b.c) uma er, do item 2.4 da definio,
(a+b.c)* uma er, do item 2.3 da definio,
(c+) uma er, dos itens 2.1 e 2.4 da definio,
(a+bc)*(c+) uma er do item 2.2 da definio.

q.e.d

E (a + c + ) expresso regular ?
a , c so er primitivas

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

120

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

a+c uma er
a+c+ no er, logo (a+c+) no expresso regular.
Exemplo 3.2.4.
Seja a expresso regular (1+10)*. Que linguagem define ?
Pela definio de fecho-estrela teremos sucessivamente:
(1+10)*= (1+10)0 (1+10) (1+10)2 (1+10)3
= O(1+10) (1+10) (1+10) (1+10) (1+10) (1+10)
= {O,1+10, (1+10) (1+10) , (1+10) (1+10) (1+10) , }
= {O,1+10, 11,110,101,1010, (11+110+101+1010)(1+10), }
= {O,1+10, 11,110,101,1010, 111,1110,1101,11010, 1011,10110,10101,101010,}
Qual a caracterstica comum a todas estas cadeias?
Elas comeam todas por 1 e podem ter um nmero arbitrrio de 1s seguidos. Os 0s so
introduzidos pela parcela 10 quando esta potenciada. Mas sendo potenciada, introduz 10,
1010, 101010, , ou seja, quando introduz um zero mete sempre 1 antes, e por isso no
possvel introduzir dois zeros seguidos. O facto de ambas as parcelas da soma se iniciarem
por 1 faz com que todas as suas concatenaes possveis se iniciem por 1. Poderemos concluir
que a linguagem composta por todas as cadeias em {0,1} que se iniciam por 1 e no tm
qualquer par de zeros.
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.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

121

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

Exemplo 3.2.6. Para 0*1*:


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.
Exemplo 3.2.7. Seja agora 00*11*.
Esta obteve-se da anterior colocando um 0 obrigatrio no incio, e um 1 obrigatrio no meio.
Portanto tem pelo menos um 0 e um 1.Alm disso no aparece qualquer 0 depois de 1.A
linguagem portanto composta por todas as cadeias com pelo menos um 0 e um 1, e
nenhum 0 depois de 1.
3.2.2. Linguagem associada a uma expresso regular
Definio 3.2.2. Se r uma expresso regular, L(r) denota a linguagem associada com r.
Esta linguagem definida pelas regras seguintes:
1. r= uma expresso regular , o conjunto vazio
2. r=O uma expresso regular, o conjunto {O} com um elemento
3. Para todo o a6, r=a uma expresso regular denotando {a}
Se r1 e r2 so expresses regulares, ento
4. L(r1+r2) = L(r1) L(r2) , unio de duas linguagens
5. L(r1r2) = L(r1) L(r2) , concatenao de L(r1) com L(r2)
6. L((r1)) = L(r1)
7. L(r1*) = (L(r1))*

As regras 4 a 7 usam-se para reduzir recursivamente uma linguagem L a expresses mais


simples.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

122

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

As regras 1 a 3 so as condies terminais para esta recurso.


Para se verificar qual a linguagem que corresponde a uma dada expresso regular,
aplicam-se aquelas regras tantas vezes quantas as necessrias.
A precedncia dos operadores a seguinte
1- fecho- estrela (*),
2- concatenao (),
3- (+) unio
Exemplos 3.2.8:
i) Seja o alfabeto 6={x}.
A linguagem de xx* ser L(xx*) ={x, xx, xxx,...}= L(x+).
ii) E L(x(xx)*) ={x, xxx, xxxxx,..} =L(xmpar).
Em 6 = { a, b, c }
iii) A linguagem de (a+c)b* ser
L((a+c)b*) = L(a+c)L(b*) (regra5)= (L(a) L(c)) (L(b))* (regra 4 e regra 7) =
= { a, c } { O, b, bb, bbb, } (regra 3) =
={ a, c, ab, cb, abb, cbb, abbb,..}
iv) L(c+) = { c } (regra 4 e regra 3)
Em 6 =

{a, b}

iv) L((a+b).(a+b).(a+b)) = L(a+b) L(a+b) L(a+b) (regra 4)


= {a,b} {a,b} {a,b} (regra 3)
= {aaa, aba, abb, baa, bba,..}

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

123

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

v) Em 6 = {0,1} escrever a expresso regular para a linguagem das cadeias que contm
um nmero mpar de zeros, ou seja,
L ={w : w contm um nmero mpar de zeros }
Nota:
(a+b)*= (a+b)*+(a+b)*

(a unio de um conjunto consigo prprio d o prprio conjunto)

(a+b)* = (a+b)*(a+b)*

(a concatenao de qualquer cadeia de as e bs com qualquer


outra cadeia de as e bs d sempre uma cadeia de as e bs;
por outro lado OO=O).

(a+b)* = a(a+b)*+b(a+b)*+O (a unio de todas as cadeias comeadas por a com todos as


cadeias comeadas por b e com a cadeia vazia d o conjunto
de todas as cadeias com as e bs mais O.
Exerccios:
1. Qual a linguagem representada pela expresso regular:
i) (1+01+001)*(O+0+00)
ii) ((0+1)(0+1))*+((0+1)(0+1)(0+1))*
2. Exemplos de linguagens complementares
Seja 6 = {0,1}.Encontrar uma expresso regular para as linguagens:
i) L(r) = {w 6* : w tem pelo menos um par de zeros consecutivos }
ii) L (r) = {w 6* : w no tem qualquer par de zeros consecutivos }
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,
LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

124

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

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.
Com expresses regulares no h nenhuma tcnica assim expedita de encontrar o
complemento. Tem que se pensar na questo desde a base.
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
Antes ou depois de 01 pode aparecer um nmero arbitrrio de 1s, produzindo a cadeia
1....1011.....1. Portanto a linguagem contm (1...1011...1)*, ou, equivalentemente, (1*011*)*.
Note-se que ao fecharmos (fecho-estrela) a expresso estamos a replic-la um nmero
arbitrrio de vezes, permitindo assim gerar cadeias com um nmero arbitrrio de zeros. Mas
cada zero aparece acompanhado esquerda e direita por um nmero qualquer de 1s. Notese que obrigamos todas estas cadeias a terminar em 1, o que limitativo.
No esto ainda includas as cadeias que terminam em 0. Poderemos obt-las da
expresso anterior concatenando-lhe um zero no fim, obtendo-se (1*011*)*0 .
Faltam tambm as cadeias que s tm 1s; para elas basta adicionar 1*.
Finalmente juntam-se as cadeias que s tm 1s excepto o ltimo que 0, 1*0.
Teremos a unio destes subconjuntos todos, pelo operador + em expresses regulares:
(1*011*)* + (1*011*)*0 + 1* + 1*0
Este resultado responde pergunta. Por uma questo de elegncia podemos procurar
simplificar a expresso.
Pondo em evidncia os factores comuns s parcelas obtm-se a

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

125

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

r2= (1*011*)* (O+0) + 1* (O+0)


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)
equivalente anterior, mas ainda mais elegante.
Para uma dada linguagem existe um nmero ilimitado de expresses regulares
equivalentes. Importa no entanto obter uma que seja simples.
No existe nada na forma de r1 e r2 ou r1 e r3 que sugira que definem linguagens
complementares. Este facto indica uma das limitaes das expresses regulares.

3.3.Regras algbricas para expresses regulares


As expresses regulares so expresses algbricas sobre as quais se podem fazer algumas
operaes (unio, concatenao, fecho estrela). Essas operaes devem obedecer a um certo
nmero de regras. Podemos agrup-las em regras comutativas, regras associativas, regras
distributivas, identidades e anuladores, regras de fecho.
Duas expresses regulares so equivalentes se elas denotam a mesma linguagem.
Quando se simplifica uma expresso regular, obtm-se sucessivamente expresses regulares
equivalentes.
3.3.1 Regras comutativas e associativas
Sejam L, M e N expresses regulares.
A unio de duas expresses regulares comutativa
L+M=M+L
A demonstrao desta propriedade faz-se atendendo natureza da operao em causa.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

126

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

De facto a unio de duas linguagens o conjunto das cadeias de ambas, postas no


mesmo saco, por qualquer ordem. Podemos colocar primeiro as de L e depois as de M, ou
ao contrrio, que o conjunto resultante da unio no se altera. Portanto a unio comutativa.
A unio de linguagens associativa
(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.
A concatenao de expresses regulares associativa
(LM)N = L(MN)
A concatenao de trs cadeias pode fazer-se indiferentemente de dois modos:
concatenar as duas primeiras e depois a terceira direita; ou concatenar as duas ltimas e
depois a primeira esquerda.
Mas no comutativa
LMML
A prova imediata.
3.3.2 Regras distributivas
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
Por exemplo aba(bba+abb)=ababba+abaabb. Atendendo ao significado de +, unio,
temos que concatenar o prefixo aba com cada uma das cadeias dentro do parntese. O
resultado a unio dessas concatenaes.
E tambm distributiva direita

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

127

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

(M + N)L = ML + NL
Prova semelhante, agora com um sufixo em vez de prefixo.
A unio no distributiva em relao concatenao nem direita nem esquerda
(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)
Ora (a+c)(b+c)=ab+ac+cb+cc por definio de unio e de concatenao. Mas isto
diferente de (ab)+c, o que suficiente para a prova por contradio.
3.3.3 Identidades e anuladores (zeros)
Numa certa lgebra, a identidade o elemento que operado com qualquer outro elemento d
esse elemento, tal como 1 na multiplicao numrica.
O conjunto vazio, , a identidade para a unio porque

+L=L+=L
J para a concatenao, a identidade a cadeia vazia porque

OL=LO=L
O anulador o elemento que operado com outro elemento d sempre o conjunto vazio.
No caso da concatenao o conjunto vazio

L = L =
Para a unio no existe anulador. E para a interseco?

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

128

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

3.3.4. Regras do fecho-estrela


O fecho estrela uma operao muito importante em expresses regulares quando se trata de
linguagens infinitas.
Ele goza de algumas propriedades cuja demonstrao fica ao cuidado do leitor.
(i) (L*)* = L*
(ii) L+ = LL* = L*L
(iii) L* = L+ + O
(iv) * = O
(v) O * = O
(vi) ( L+M )* = (L* M*)*
Esta ltima merece alguns comentrios, j que as restantes so mais ou menos evidentes.
Vejamos um exemplo de duas cadeias:
(a+b)* = (a*b*)*
esquerda temos qualquer cadeia com qualquer nmero de as e bs e por qualquer
ordem. Qualquer destas cadeias tambm pode ser obtida pela parte direita. Se comea por bs,
faz-se primeiro a0b*, depois a*b0 para os as, novamente a0b* para bs e assim
sucessivamente. Repare-se que o fecho externo permite faz-lo tantas vezes quantas as
necessrias.
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.
3.3.5. Outras regras algbricas
Para provar uma regra algbrica qualquer, por exemplo
L + ML = (L + M)L

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

129

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

tem que se provar que qualquer cadeia gerada pela er da esquerda tambm gerada pela RE
da direita.
Para provar que falsa, basta dar um contra exemplo.
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
que facilmente se v ser falso ( e portanto aquela propriedade falsa).

3.4. Relao entre expresses regulares e linguagens regulares


As expresses regulares so como vimos uma forma de especificar linguagens regulares.
Assim sendo para toda a linguagem regular existe uma expresso regular e, vice-versa, para
toda a expresso regular existe uma linguagem regular.
Faamos a prova em duas etapas.
3.4.1 De uma expresso regular a um NFA: expresses regulares definem linguagens
regulares
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.
1 Definem-se NFA para as expresses regulares primitivas ) os trs primeiros
elementos da definio 3.1)
i) NFA aceitador de L1= :
r=

LEI/DEI/FCTUC/2009/@ADC

q0

q1

Figura 3.4.1. Aceitador do conjunto vazio

Documento de trabalho

130

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

No havendo possibilidade de alcanar o estado aceitador, e linguagem o vazio.

ii) NFA aceitador de L2={O}

q0

r=O

q1

Figura 3.4.2. Aceitador de O

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

Figura 3.4.4 Um antmato M genrico

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)

q0

M (r2)

Figura 3.4.5. Autmato da soma de expresse regulares

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

131

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

O NFA aceita a unio das linguagens, L1 pela parte de cima e L2 pela de baixo.
v) L(r1r2)

M (r1)
q

M (r2)

qf

Figura 3.4.6. Autmato da concatenao de duas expresses regulares

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*)

M (r1)
q

qF

O
Figura 3.4.7. Autmato do fecho-estrela de uma expresso regular.

Este NFA j no to evidente. Repare-se que


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.
O r1 vai atravs da mquina desde q0 at qf.
J r1r1 parte de q0 , vai at qf e volta para q0 pela parte de cima, com O.
As outras potncias de r1 do tantas voltas quantas as necessrias at ao estado final.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

132

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

Usando estas mquinas possvel construir um NFA para qualquer expresso regular.
Pode-se por isso enunciar o teorema:
Teorema 3.4.1. L(r) uma linguagem regular
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-selhe a regra do fecho estrela.

O
O

O
Figura 3.4.8 Autmato NFA de 1*

Agora pode-se demonstrar que este NFA equivalente a


1

Figura 3.4.10. Autmato


equivalente de 1*

q0

Calculando o DFA equivalente obtm-se, em 6={0,1}


0,1

DFA

0
q0
Figura 3.4.11. DFA de 1*

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

133

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

Exemplo 3.4.1.2.
r=a+a*b
Desenham-se os NFA de a e de b, expresses regulares primitivas. A partir do de a
desenha-se o de a* que se concatena com o de b. Finalmente coloca-se um outro de a em
paralelo com o de a*b.
r=ab+(b+ab)*
Desenha-se o de a que se concatena com o de b. Desenha-se novamente o de b que se
paraleliza com o de ab. Agora aplica-se o fecho estrela ao conjunto obtido. Desenha-se depois
um outro de a e um outro de b que se concatenam, colocando-se o conjunto em paralelo com
o anterior.
3.4.2. De um NFA a uma expresso regular: expresses regulares para linguagens
regulares
A toda a linguagem regular se pode associar um NFA e portanto um grafo de transies.
Partindo do estado q0, procuram-se todos os caminhos possveis at ao estado final e as suas
etiquetas.
possvel depois encontrar uma expresso regular que gere todas essas etiquetas. Para
facilitar esta operao, usam-se os grafos de transio generalizados.
Grafos de transio generalizados so grafos de transio em que as arestas podem ser
etiquetadas por expresses regulares (e no s por caracteres). No Cap. 2 chammos-lhe G*. A
etiqueta de um caminho desde o estado inicial at ao estado final a concatenao das
etiquetas das arestas do caminho, i.e., a concatenao de expresses regulares e portanto
uma expresso regular. As cadeias expressas por essa expresso regular so um subconjunto
da linguagem aceite pelo grafo de transio generalizado; a linguagem total ser a unio de
todos os subconjuntos gerados deste modo.
Temos ento o seguinte caminho pata encontrar uma expresso regular para uma dada
linguagem
NFA o grafos de transio generalizados o expresses regulares

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

134

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

O grafo de um NFA pode considerar-se um grafo generalizado desde que se interpretem


apropriadamente as suas etiquetas.
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.
A equivalncia entre grafos generalizados define-se em termos da linguagem aceite.
Consideremos o exemplo da figura 3.4.12 de um grafo generalizado com estados
Q= {q, qi, qj, ... }, em que q no nem um estado inicial nem um estado final.
Pode-se obter um grafo generalizado equivalente, com menos um estado, eliminando o
estado q.
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
c

d
q

qi

qj

Figura 3.4.12. Grafo genrico de trs estados. O do


meio pode ser eliminado.

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
LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

135

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

seja e*, mantm-se em q e depois com d regressa a q; concatenando d ae*d. Para ir de qi at


qj passa-se em q e a pode ler-se um nmero arbitrrio de es, seguindo depois para qj com b.
E de modo anlogo para as outras transies. Resumindo,
qi o qi : ae*d
qi o qj : ae*b
qj o qj : ce*d
qj o qi : ce*b
Obtm-se assim o grafo de transio generalizado sem o estado q, Fig. 3.4.13.

ae*d

ce*b

ce*d

qi

qj

ae*b
Figura 3.4.13. Grafo resultante da eliminao do
estado intermdio da Fig. 3.4.12.

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.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

136

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

Pode provar-se que a construo seguida produz um grafo generalizado equivalente ao


inicial.
Pode agora, e em consequncia, enunciar-se o teorema seguinte.
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
Aplica-se-lhe o procedimento anterior de eliminar sucessivamente vrtices q, at que se
fique apenas com o estado inicial e o estado final, obtendo-se o grafo da Figura 3.4.14
seguinte, em que r1, r2, r3, r4 so expresses regulares.
r1

r4

r3

q0

qf

r2
Figura 3.4.14, Qualquer NFA pode ser reduzido a
esta forma.

A expresso regular que denota a linguagem aceite pelo grafo


r=r1*r2(r4 + r3r1*r2)*
De facto, para se ir de q0 a qf , pode-se ir por r1 (um nmero arbitrrio de vezes),
seguido de r2 ,

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

137

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

- seguido de r4 ou, voltando para trs, de r3 seguido de r1* seguido de r2 , e esta


volta um nmero arbitrrio de vezes.
No caso de se obter um grafo em que o estado inicial tambm estado final,
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
Calcular a expresso regular do autmato da Fig. 3.4.16.
Antes de aplicar a construo subjacente ao teorema 3.2, necessrio introduzir uma
pequena alterao no autmato para que o estado inicial no seja o aceitador. Basta para isso
introduzir um estado adicional q que passa a ser o inicial e do qual se transita para A atravs
de O. Resulta um NFA equivalente.

A
1

1
0

0
Figura 3.4.16. Exemplo 3.4.2.1

LEI/DEI/FCTUC/2009/@ADC

A
1

1
0

Figura 3.4.17. Introduo de um


estado inicial na Fig. 3.4.16

Documento de trabalho

138

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

Elimine-se o estado C. O caminho de A para B, passando por C 11*0. De B para B


passando por C 11*0. De B para A passando por C no h. Teremos por isso
11*0

0
O

11*0

0
Figura 3.4.17. Eliminao do estado C.

Elimine-se agora B. Basta calcular o caminho de A para A passando por B, que


11*0(11*0)*0. Ainda de A para A temos 0 que se soma ao anterior. Logo os caminhos totais
de A para A so 0+11*0(11*0)*0 um nmero arbitrrio de vezes, ou seja (0+11*0(11*0)*0)*.
Logo teremos o autmato
r4

O
A

q0

r4 = ( 0 + 11*0(11*0)*0 )*
Figura 3.4.18. Eliminao do estado B

Alicando agora o resultado geral obtm-se a expresso regular do autmato inicial,


r=O(r4 + )* =r4*= r4

3.5. Gramticas Regulares


J vimos duas maneiras de especificar linguagens regulares: autmatos finitos (DFA ou
NFA), e expresses regulares. Ambos tm as suas vantagens e inconvenientes. De uma
podemos obter a outra. As gramticas so uma terceira forma de especificao de linguagens,

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

139

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

como vimos no Cap. 1. No caso das linguagens regulares teremos gramticas regulares, uma
classe de gramticas lineares.
3.5.1. Gramticas lineares esquerda e direita
Definio 3.5.1. Gramtica regular
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
A, B V, variveis do conjunto das variveis
x T, smbolo do conjunto dos smbolos terminais
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.
Uma gramtica diz-se linear esquerda se todas as suas produes tm a forma
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.
Exemplos de gramticas regulares:
Exemplo 3.5.1.1
G1= ({S}, {a,b}, S, P1) , linear direita
P1 : S o abA

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

140

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

P2 : S o a
Tambm se pode escrever em forma mais compacta por
P : S o abA|a
Como derivar ababa de G1 ?
S abS ababS ababa
Aplicando P1 sucessivamente duas vezes e depois P2 para terminar.
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.
Generalizando conclui-se que a gramtica G1 produz a linguagem (regular) definida pela
expresso regular
r=(ab)*a
Exemplo 3.5.1.2
G2 =({S,A,B}, {a,b}, S, P2 } , linear esquerda
P1

S o Aab

P2

A o Aab | B

P3

Boa

Como derivar aababab de G2 ?


S Aab Aabab Aababab Bababab aababab
Aplicando P2 sucessivamente conclui-se que esta gramtica gera a linguagem regular
definida pela expresso regular r=aab(ab)*.
Exemplos de gramticas no-regulares
Exemplo 3.5.1.3.
LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

141

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

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 ).
As gramticas regulares esto associadas com linguagens regulares. Para toda a
linguagem regular existe uma gramtica regular.

3.5.2. Gramticas lineares direita geram linguagens regulares


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
LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

142

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

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

Figura 3.5.1 Produo D dE

Estando no estado D e aparecendo d transita para E. como se o autmato estivesse a


ler as cadeias geradas pela gramtica.
Os estados do autmato correspondem s variveis das formas sentenciais. A parte da
cadeia j processada foi obtida por construes semelhantes anteriores. Da o teorema 3.5.1
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
V = {V0, V1, ..., Vn } o conjunto das variveis da gramtica
S = V0 a varivel inicial (axioma)
P:

V0 v1Vi
Vi v2Vj

Vn vl

em que os vs so sub-cadeias de um ou mais smbolos terminais.


Se w uma cadeia em L(G), ento, necessariamente, a sua produo ser
V0 v1Vi

v1v2Vj
LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

143

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

....
*

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.
Por exemplo se tivermos a produo:
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

Figura 3.5.2. Produo Vi o a1a2a3...amVj

Para uma produo


Vi o a1a2a3...am
a funo de transio generalizada ser o estado final Vf.

G*(Vi, a1a2a3...am) = Vf
Vi

a1

a2

am

Vf

Figura 3.5.3. Produo Vi o a1a2a3...am

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

144

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

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
e por isso a derivao
*

V0 v1Vi v1v2Vj v1v2...vkVn v1v2...vkvl = w


possvel e em consequncia w pertence a L (G).
q.e.d.
Exemplo 3.5.2.1

Seja G = ( {S, A, B}, {a,b}, S, P )


com

P:

So

aA | aB ,

Ao

bB | b ,

Bo

aA | bB .

Derivao da cadeia ababab :


S aA abB abaA ababBababaA ababab
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

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

145

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

do alfabeto ou O, levam necessariamente a uma estado final; no caso apenas a produo A

o b. Resulta o autmato seguinte da Fig.3.5.4.

a
a

A
a

b
F

B
b
Figura 3.5.4. Autmato da gramtica do exemplo 3.5.2.1.

3.5.3. Gramticas lineares direita a partir de autmatos finitos


Para provar que toda a linguagem regular pode ser gerada por uma gramtica linear direita
(i) constri-se o DFA para a linguagem e
(ii) inverte-se a construo apresentada no teorema anterior 3.3. Os estados do DFA
transformam-se nas variveis da gramtica, e os smbolos produtores das transies so os
terminais do lado direito das produes. Teremos assim o
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:
Seja M=(Q,6,G, q0,F) o DFA que aceita L, tal que
Q= {q0 ,q1,...qn }

6 ={a1, a2, ..., am}


Vamos fazer a prova do teorema construindo uma gramtica linear direita a partir do
DFA. Para isso

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

146

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

1 Construa-se a gramtica linear direita G = (V, 6, S, P), tal que


V= {q0 ,q1,...qn }

as variveis da gramtica so os estados do DFA

S = q0
2 Para cada transio G (qi, aj) = qk no DFA M , introduz-se em P a produo
qi o ajqk

cria-se uma produo por cada transio entre dois estados

3 Se qk faz parte de F, acrescenta-se a P a produo


qk o O

cria-se uma produo que permite terminar as derivaes.

A gramtica G gerada deste modo pode produzir toda e qualquer cadeia de L.


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.
Se partirmos de um NFA, em vez de um DFA, o teorema igualmente vlido. A
construo anloga, com as pequenas diferenas; agora teremos
2 Para cada transio G (qi, aj) = qk no DFA M , introduz-se em P a produo
qi o ajqk

cria-se uma produo por cada transio entre dois estados

Se existir tambm G (qi, aj) = ql , introduz-se em P a produo ou seja, neste caso,


qi o ai ql ,ou seja qi o ajqk | ajql
Para cada transio G (qi, O) = qk no NFA M, introduz-se em P a produo qi o qk (mais
alm chamaremos unitria a esta produo)
A nica diferena advm da escolha possvel a partir de um estado, que se reflecte em
duas produes possveis.
Exemplo 3.5.3.1
Construir a gramtica linear direita pata a linguagem L(aab*a).
Comeando por desenhar o NFA respectivo obtm-se
LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

147

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

b
q0

q1

q2

qf

Figura 3.5.5.NFA para aab*a

A tabela de transies no NFA e das produes da gramtica a seguinte:


Tabela 3.5.3.1.Exemplo 3.5.3.1
Transies em M

Produes em G

G (q0, a)={q1}

q0 o aq1

G (q1, a)={q2}

q1 o aq2

G (q2,b)={q2}

q2 o bq2

G (q2, a)={qf}

q2 o aqf

qf F

qf o O

Para gerar por exemplo a cadeia aaba usam-se as formas sentenciais


q0 aq1 aaq2 aabq2 aabaqf aaba
Exemplo 3.5.3.2.
Construir a gramtica linear direita para a linguagem L(aab*a+aa+ab*a)
A linguagem a unio de trs:
aab*a+aa
a
q1

q2

LEI/DEI/FCTUC/2009/@ADC

b
q3

Documento de trabalho

q4

148

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

ab*a
a

q5

q6

q7

Figura 3.5.6. Resoluo por partes do exemplo 3.5.3.2

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 Oa
q1

b
a

q2

O
q

q3

q4

O
q5

q6

qf

q7

Figura 3.5.7. NFA resultante para o exemplo 3.5.3.2

Poderemos construir a tabela 3.5.3.2. das transies e das produes da gramtica


equivalente:
Tabela 3.5.3.2.
Transies em M

Produes em G

G (q0, O)={q1, q5}

q0 o q1| q5

G (q1, a)={q2}

q1 o aq2

G (q2,a)={q3, q4}

q2 o aq3| aq4

G (q3, a)={q4}

q3 o aq4

G (q3, b)={q3}
G (q4, O)={qf}

q3 o bq3
q4 o qf

G (q5, a)={q6}

q5 o aq6

G (q6, b)={q6}

q6 o bq6

G (q6,a)={q7}

q6 o aq7

G (q7, O)={qf}

q7 o qf

qf F

LEI/DEI/FCTUC/2009/@ADC

qf o O

Documento de trabalho

149

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

3.5.4. Equivalncia entre linguagens regulares e gramticas regulares


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:
Teorema 3.5.3 (3.5.)A linguagem L regular se e s se existir uma gramtica linear
esquerda G tal que L=L(G).
Para demonstrar este teorema recorre-se construo de uma gramtica linear
esquerda que gera a linguagem reversa de L. Assim se prova que a reversa de L regular.
Mas se a reversa de L regular, tambm o , porque a reverso preserva a propriedade de
regular. Para mais detalhes ver p. ex. em Linz p. 98.
Podemos finalmente enunciar o teorema de equivalncia entre linguagens regulares e
gramticas regulares:
Teorema 3.5.4.(3.6) Uma linguagem L regular se e s se existir uma gramtica regular G
tal que L=L(G).
Este teorema a conjugao dos dois anteriores.

3.6. Sntese das equivalncias


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.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

150

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

Expresses regulares (ER)


Teorema
3.1

Teorema
3.2

DFA ou NFA

Teorema
3.4

Teorema
3.3

Gramticas regulares (GR)

Figura 3.6.1. Vrias formas de descrever as linguagens regulares (LR)

Teorema 3.1.(3.4.1) ERo NFA


Teorema 3.2 LR o ER (LRo DFA o GTG o ER)
Teorema 3.3 Gramticas lineares direita o LR
( Gramticas lineares direita o NFA o LR )
Teorema 3.4 LR o Gramticas Lineares direita
(LR o DFA o Gramticas lineares direita)

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

151

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

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.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

152

Você também pode gostar