Você está na página 1de 53

Linguagens Formais e Autômatos

Aula 4 – Linguagens e Expressões


regulares
Remis Balaniuk
Linguagens regulares
Como saber se uma linguagem é regular

• Basta poder representá-la com pelo menos um dos


seguintes formalismos:
– {autômato finito | Expressão Regular | Gramática Regular}
• Para mostrar que uma linguagem não é regular é
preciso mostrar que ele não poder ser representada
por nenhum dos formalismos.
– Pode-se usar o Lema do bombeamento.
Linguagens regulares
Linguagens regulares
Complementação
Complementação
Complementação
Complementação
Propriedades de fechamento
• As linguagens regulares são fechadas sobre várias
operações
• Se as linguagens L1 e L2 são regulares, então o
resultado das seguintes operações também é
regular:
Linguagens regulares
Expressões Regulares

• A expressão regular é a maneira mais


compacta e mais simples de descrever
conjuntos regulares
• É usada com essa finalidade em construção de
compiladores, editores, sistemas operacionais,
protocolos, etc.
• É um formalismo denotacional, também
considerado gerador.
Expressões Regulares
Expressões Regulares
• Pode-se usar parênteses ou não
• Alternância ou união
– (a|b) também denotado por (a+b)
• Exponenciação
– ou concatenação sucessiva
– α*: ε | α | αα | ααα |.....
– α+: α | αα | ααα |.....
– α+ = αα*
• Ordem de precedência(decrescente):
– Exponenciação
– Concatenação
– Alternância (união)
Expressões Regulares

Expressão regular Linguagem representada


aa Somente a palavra aa
ba* Todas as palavras que começam com b, seguido por
zero ou mais a´s
(a|b)* Todas as palavras sobre {a, b}
(a|b)* aa (a|b) * Todas as palavras que contém aa como subpalavra

a* ba* ba* Todas as palavras contendo exatamente 2 b´s

(a|b)* (aa| bb ) Todas as palavras que terminam com aa ou bb

(a| ε) (b | ba)* Todas as palavras que não possuem 2 a´s


consecutivos
Exemplos
Exercícios
Equivalência entre ER e AFD
Equivalência entre ER e AFN
Exemplo: construindo um AFN para
uma ER dada
Exemplo: construindo um AFN para
uma ER dada

0*
Exemplo: construindo um AFN para
uma ER dada

(0+1)*
Exemplo: construindo um AFN para
uma ER dada

(0+1)*1
Exemplo: construindo um AFN para
uma ER dada

(0+1)*1

Qual seria uma gramática para essa linguagem?


Exercícios
• Construa AFDs para as seguintes expressões
regulares:
– ab(bb)*cc*
– cc*b*+ab*cc*
– bcc*(b+a)*
Exercício
• Defina uma expressão regular equivalente ao
seguinte AFD:
Exercício
• Defina uma expressão regular equivalente ao
seguinte AFD:
Linguagens não regulares
Identificação de linguagens não
regulares
• A questão básica sobre uma linguagem: será ela
regular ?
– é a de resposta mais difícil.
– Sabemos que se formos capazes de construir um AFN
para ela, ela é regular.
– E se não formos?
• Não será por falta de engenho e arte?
• Haverá um algoritmo para saber se uma linguagem não é
regular?
• Disso trata o tão estranho (numa primeira
abordagem) lema do bombeamento
Princípio da casa dos pombos
• É a afirmação de que se n pombos devem ser postos em m
casas, e se n > m, então pelo menos uma casa irá conter mais
de um pombo.

• Considerando o AFD ao lado e a cadeia


abcd
• Essa cadeia tem um comprimento igual ao
número de estados do autômato (quatro)
• Logo, pelo princípio acima pelo menos um
estado repetiu
• Ou seja, se uma linguagem pode ser
expressa por um AFD, vai existir um
comprimento de cadeia a partir da qual se
formarão necessariamente loops que
podem ser repetidos infinitamente.
Princípio da casa dos pombos
• Seja L=L(aba*b)

– abb passa uma vez em cada estado


– abaab passa duas vezes pelo estado 3
– Qualquer cadeia maior de 3 passará pelo estado 3
várias vezes
Princípio da casa dos pombos
• Seja L=L(aba*b)

– Considere abab
• Podemos decompô-la em 3 partes (x,y e z)
Princípio da casa dos pombos
• Seja L=L(aba*b)

– E se for abaab
• Podemos decompô-la também em 3 partes
Princípio da casa dos pombos
• Seja L=L(aba*b)

– E se for abaaab
• Podemos decompô-la também em 3 partes

• E assim sucessivamente:
– w=xyiz
– Podemos “bombear” y quantas vezes quisermos
O Lema do Bombeamento para
linguagens regulares
O Lema do Bombeamento para
linguagens regulares
• Descreve uma propriedade essencial das
linguagens regulares
– Diz que toda palavra suficientemente longa (|w| ≥ p)
pertencente a uma linguagem regular pode ser
particionada em 3 partes (w=xyz)
– a porção do meio (y) não pode ser vazia
– existe um número natural p sendo que o
comprimento de x concatenado com y não pode ser
maior do que p (|xy|≤ p)
– qualquer palavra construída repetindo-se y um
número qualquer de vezes (xz, xyz, xyyz, xyyyz, etc)
pertence também à mesma linguagem regular
• O processo de repetição de y é chamado de
bombeamento
O Lema do Bombeamento para
linguagens regulares
• A restrição (|xy|≤ p) impõe um limite na quantidade de
variações a serem testadas
• O número de estados de um provável autômato é uma
boa tentativa para ser um comprimento do
bombeamento p
• É útil para provar a irregularidade de uma linguagem
– encontrando uma sequencia xyz que ao ser bombeada gera
uma cadeia que não pertence à linguagem (prova por
contradição)
• Não é suficiente para provar que a linguagem É regular
Aplicando o PL
O autômato é FINITO
Exemplo
• Voltando a nosso exemplo inicial
– As palavras nessa linguagem tem comprimento
par e o autômato tem quatro estados
– Alguns exemplos de bombeamento usando p=4
• Se w=0011 e x=00, y=11 e z=ɛ
– Então xy0z=00, xy1z=0011, xy2z=001111, xy3z=00111111 ... são
todas palavras de L
• Se w=0110 e x=0, y=11 e z=0
– Então xy0z=00, xy1z=0110, xy2z=011110, xy3z=01111110 ... são
todas palavras de L
Como provar que uma linguagem não
é regular
• Por contradição
• Assumimos que a linguagem é regular
• Logo assumimos que deve existir um padrão
xyiz que possa ser bombeado
• Analisamos a forma da linguagem e os
padrões possíveis
• Se nenhum permite bombeamento estará
provado que ela não é regular
Prova de que {0n1n | n≥0} não é regular
• Sejam w,x,y,p e i como definidos anteriormente
• Qualquer que seja p, se considerarmos a palavra:
0p1p :
– Deveria existir x e y tal que |xy|≤ p
– Cujo bombeamento xyiz só gere palavras da
linguagem
– Mas como |xy|≤ p, y necessariamente só tem 0s
– O bombeamento para i>1 vai gerar palavras com
número de 0s maior que o número de 1s, logo não
pertencentes à linguagem
Para mais explicações sobre o Lemma
do Bombeamento
• https://www.youtube.com/watch?v=4EsUC6r
bQ-w
Gramática linear
• Seja G=(V, T, P, S) uma gramática e sejam A e B
elementos de V e w uma palavra de T*. Então
G é uma:
– Gramática Linear à direita (GLD). Se todas as
regras de produção são da forma:
• A→wB ou A→w
– Gramática Linear à esquerda (GLE). Se todas as
regras de produção são da forma:
• A→Bw ou A→w
Gramática linear
– Gramática Linear Unitária à direita (GLUD). Se
todas as regras de produção são da forma:
• A→wB ou A→w, adicionalmente |w|<=1
– Gramática Linear Unitária à esquerda (GLUE). Se
todas as regras de produção são da forma:
• A→Bw ou A→w, adicionalmente |w|<=1
Equivalência das gramáticas lineares
• As diversas gramáticas lineares são
formalismos equivalentes:
• Seja L uma linguagem então:
– L é gerada por uma GLD se, e somente se,
– L é gerada por uma GLE se, e somente se,
– L é gerada por uma GLUD se, e somente se,
– L é gerada por uma GLUE.
Ex. de gramáticas lineares equivalentes para a
linguagem a(ba)*
GLD para a linguagem a(ba)*

• G={{S,A}, {a,b}, P, S}
• P={S→aA,
A→baA|ε}
GLE para a linguagem a(ba)*

• G={{S}, {a,b}, P, S}
• P={S→Sba|a}
GLUD para a linguagem a(ba)*

• G={{S,A, B}, {a,b}, P, S}


• P={S→aA,
A→bB|ε,
B→aA}
GLUE para a linguagem a(ba)*

• G={{S,A}, {a,b}, P, S}
• P={S→Aa|a,
A→Sb}
Teorema
• 1 - Se L é uma Linguagem gerada por uma
gramática regular, então L é uma linguagem
regular
• 2 - Se L é uma linguagem regular, então existe
uma gramática regular G que gera L.
Exercícios
• Construa um autômato finito determinístico e uma expressão regular para
cada umas da linguagens a seguir:
– A) A linguagem dos identificadores do pascal
• Ex. válidos: a, _, media, M23af, c311
• Ex. inválidos: 2, 45media, 3csa
– B) Os números inteiros
• Ex. válidos: 1, -1, +1, +45, 77, -44, 4564894, -459456
• Ex. inválidos: +, -, 55+5, 8989-4, --65, ++5
– C) Os números reais
• Ex. válidos: 1, -1, +1, +45.05, 77.5, -44.5554, 4564.894, -459456
• Ex. inválidos: +, -, 55+5, 8..989-4, --65, ++5, .56, +.45, .564, -+532

Você também pode gostar