Você está na página 1de 24

Faculdade de Engenharia de Computação

Teoria da Computação:
Linguagens Formais e Autômatos

Aula 4 – Tipos de gramática


Professor Ronaldo Luiz Alonso
Definição - Gramáticas Equivalentes
• Duas gramáticas são equivalentes se elas definem a mesma
linguagem, ou seja, as gramáticas G1 = { N1, 1, P1, S1 } e G2 = { N2,
2, P2, S2 } são equivalentes se e só se L ( G1 ) = L ( G2 ) .
Exemplos - Gramáticas Equivalentes
Sejam as gramáticas G3 e G4 definidas por :

G3 = { N 3 ,  3 , P3 , S3 } G4 = { N4, 4, P4, S4 }


N4 = { S, A, B }
N3 = { S, A, B, C } 4 = { a, b, c }
3 = { a, b, c } S4 = S
S3 = S P4 = { S  a A,
P3 = { S  A B C A  bB,
ABC  aB B  cC,
B  bcC Cɛ }
Cɛ }
Achar a gramática gerada por G3
Para achar a linguagem gerada por G3, partimos do símbolo inicial de G3 e aplicamos as regras de
produção abaixo numeradas, até derivar uma cadeia (de símbolos terminais).

P3 = { S  A B C 1
ABC  aB 2
B  bcC 3
Cɛ } 4

S  ABC Inicialmente. Observe que se expandirmos B e C não chegaremos a uma cadeia com somente
símbolos terminais:

S  ABC  AbcC  Abcɛ *Abc O símbolo A é denominado de símbolo inútil, pois ele não gera nada, a
menos que esteja em conjunto com outros símbolos.
A única maneira de produzir uma cadeia contendo somente símbolos terminais é aplicando a produção 1
seguida da produção 2 e desenvolver o resto.
Achar a gramática gerada por G3
P3 = { S  A B C 1
ABC  aB 2
B  bcC 3
Cɛ } 4

S  ABC  aB  abcC  abcɛ * abc

Observe que a geração da cadeia abc é a única possibilidade para essa gramática.
Achar a gramática gerada por G4
P4 = { S  a A, 1
A  bB, 2
B  cC, 3
Cɛ } 4

S  a A  abB  abcC  abcɛ * abc

Observe que a geração da cadeia abc, também é a única possibilidade para essa gramática.

Claramente notamos que L ( G3 ) = L ( G4 ) = { abc }.


Logo as gramáticas G3 e G4 são equivalentes.
Hierarquia de Chomsky: Classificação das
Gramáticas
• Uma gramática G é dita ser
• Regular se cada produção é da forma
AaB ou A  a com A  N e a  T  { ɛ }.
• Livre de contexto se cada produção é da forma
A   onde A  N e   (NT)* e não é regular.
• Sensível a contexto ou dependente de contexo se cada produção é da forma
 A      onde A  N, ,,  (NT)*, || > 0 e não é livre de
contexto.
• Irrestrita se as regras de produção são da forma    onde   (NT)+ , 
(NT)* e não é uma gramática que se enquadra nos outros tipos.
Definição – Gramática regular (ou tipo 3 )
• Uma gramática é chamada de regular se suas produções são da forma
A  u B ou A  u, com A, B  N e u    {  }.

Exemplo: A gramática G4 – é uma gramática regular.

P4 = { S  a A, 1
A  bB, 2
B  cC, 3
Cɛ } 4
Definição – Gramática livre de contexto
( ou tipo 2 )
• Uma gramática é chamada de livre de contexto se o conjunto de regras de
produção contém apenas produções da forma A  , com A  N e   V*. Se A
é o símbolo inicial S então  não pode ser a cadeia vazia.
• Ou seja, do lado esquerdo da regra de produção, pode aparecer um único
símbolo não-terminal e não podem aparecer símbolos terminais.

Exemplo: A gramática G1 é uma gramática livre de contexto.

P = { A  a b, 1
AaAb} 2
Definição – Gramática sensível ao contexto
( ou tipo 1 )
• Uma gramática é chamada de sensível ao contexto se o conjunto de regras de
produção P contém expressões da forma   , onde   V+ e   V* e |  |  |
 |. Se  =  então  deve ser S e este símbolo S ( símbolo reservado ) não deve
aparecer no lado direito das regras de produção.
• O termo sensível ao contexto vem de uma outra definição para esta classe de
gramáticas, onde as regras de produção devem ser da forma  A     , com ,
,   V* e A  N.
Definição – Gramática sensível ao contexto
( ou tipo 1 )
Exemplo: A gramática G2 – é uma gramática sensível a contexto.

P = { S  a S B C, 1
SaBC, 2

C B  B C, 3

a B  a b, 4
b B  b b, 5
b C  b c, 6
cCcc } 7

Observe que a quantidade de símbolos do lado esquerdo nunca é


maior do que a quantidade de símbolos do lado direito.
Definição – Gramática do tipo-0, irrestrita,
recursivamente enumerável ou com estrutura de frase
• Uma gramática é chamada de tipo-0 ou com estrutura de frase se o
conjunto de regras de produção de P contém expressões da forma 
 , onde   V+ e   V*.

Exemplo: gramática G3 – é uma gramática com estrutura de frase.

P3 = { S  A B C 1
ABC  aB 2
B  bcC 3
Cɛ } 4

Observe que na regra 2, o lado esquerdo possui mais símbolos que o lado direito. Se uma regra com essa
característica aparecer, teremos uma gramática do tipo-0 ou recursivamente enumerável. Observe que em todas as
outras gramáticas, as formas sentenciais são expandidas. A única gramática que contrai formas sentenciais é a
gramática do tipo-0.
Hierarquia de Chomsky: Classificação das
Linguagens
• Uma linguagem L (G) é dita ser
• Regular: se ela puder ser gerada por uma gramática G regular.
• Livre de contexto: se ela puder ser gerada por uma gramática G livre de
contexto, mas não puder ser gerada por uma gramática G regular.
• Sensível a contexto ou dependente de contexo : se ela puder ser gerada por
uma gramática G sensível a contexto, mas não puder ser gerada por uma
gramática livre de contexto e nem por uma gramática regular.
• Irrestrita ou recursivamente enumerável: se ela puder ser gerada por uma
gramática irrestrita mas não puder ser gerada por gramáticas de outro tipo.
Observações
Observe que exitem gramáticas livres de contexto, chamadas gramáticas lineares à direita ou à
esquerda que também geram linguagens regulares.
Uma gramática é linear a direita se cada produção é da forma A  w B ou A  w.

Como observamos no final da aula passada, usamos letras do final do alfabeto para nos referirmos
a uma cadeia de símbolos terminais.

Assim a gramática com as seguintes produções:

P5 = { S  ac A, 1
A  baB, 2
B  cbC, 3
C  ab } 4
Seria classificada como livre de contexto linear à direita. O seguinte teorema afirma que as linguagens livres de
contexto lineares à direita gera linguagens regulares.
Teorema:
A classe de gramáticas lineares à direita gera precisamente a classe de linguagens
regulares.

Assim , alguns autores expandem a classe de gramáticas lineares para incluir as gramáticas lineares
à direita, como a gramática do exemplo anterior. Mas então qual definição utilizamos:
Utilizamos a definição econômica. Isto é, aquela que foi dada para gramáticas regulares.

Ainda sobre esse assunto, temos também a classe das gramáticas livres de contexto lineares à
esquerda.
Uma gramática é linear a esquerda se cada produção é da forma A  B w ou A  w.

O seguinte teorema afirma que as linguagens livres de contexto lineares à esquerda gera
linguagens regulares:
Teorema:
A classe de gramáticas lineares à esquerda gera precisamente a classe de
linguagens regulares.

Assim a gramática com as seguintes produções:

P6 = { S  Aac, 1
A  Bba, 2
B  Ccb, 3
C  ab } 4

Seria classificada como livre de contexto linear à esquerda e a linguagem gerada por ela seria uma linguagem
regular.
Exemplos - Gramáticas
• As gramáticas são caracterizadas pelas suas regras de produção e
apenas pelas suas produções.
• Posso ter gramáticas equivalentes que geram linguagens idênticas
vide exemplo em G3 e G4 ).
• Já a classificação das linguagens é mais complexas. Dada uma
linguagem a sua classificação tem a ver com a gramática de maior tipo
capaz de gera-la. Isto é, a gramática mais simples capaz de gerar a
linguagem dada, vai classificar a linguagem.
Exemplos
• A linguagem L = { abc } é gerada pelas gramáticas G3 e G4.
• G3 é uma gramática sensível ao contexto e G4 é uma gramática
regular, logo a maior classe gramatical que que gera L, acima, é a
gramática regular ou do tipo-3 ( gramática G4 ). Assim, a linguagem L é
uma linguagem regular.
• Vale observar que para uma mesma linguagem existem infinitas
gramáticas que a geram. Mas a classificamos pela gramática mais
simples capaz de fazer isso ( ou de maior tipo).
Hierarquia de Chomsky
L(regular)  L(livre de contexto)  L(sensível a contexto)  L(irrestrita)
Onde L(T) = { L(G) | G é do tipo T }
Isto é, o conjunto de todas as linguagens
geradas por gramáticas G do tipo T

Exemplos:
Toda linguagem finita é regular
L1 = { anbn | n  1 } é livre de contexto

L2 = { anbncn | n  1 } é sensível a contexto


Hierarquia de Chomsky

Regulares

Livres de contexto

Dependentes de contexto

Irrestritas

𝑇𝑖𝑝𝑜⊂
3 𝑇𝑖𝑝𝑜 2
Tipo 1 Tipo 0
Notas:
L1 = { anbn | n  1 } é livre de contexto, isto significa que L1 não pode ser gerada por
uma gramática regular.

Como podemos provar isso matemáticamente? Para provar que L1 não pode ser
gerada por uma gramática regular, usamos o lema do bombeamento (pumping
lemma) enunciado no slide seguinte.
Lema do Bombeamento
Seja L uma linguagem regular. Então existe um inteiro p ≥ 1 (chamado
"comprimento de bombeamento") tal que cada cadeia w de L com
comprimento maior ou igual a p pode ser escrita
como w = xyz (i.e. w pode ser dividida em três subcadeias) satisfazendo
as seguintes condições:
1.|y| ≥ 1
2.|xy| ≤ p
3.para todo i ≥ 0, xyiz ∈ L
y é a subcadeia que pode ser bombeada (removida ou repetida
arbitrariamente).
Exemplo: podemos provar que a linguagem L = {anbn : n ≥ 0} do alfabeto Σ = {a, b} é não-regular por
contradição. Sejam w, x, y, z, p, e i como descritos anteriormente.
Seja w = apbp. Pelo lema do bombeamento, há de haver uma cadeia w = xyz com |xy| ≤ p e |y| ≥ 1 tal
que xyiz pertence a L para todo i ≥ 0. Pela condição |xy| ≤ p do lema do bombeamento, sabemos
que y consiste apenas de instâncias de a.

Observe que pela propriedade do módulo de cadeias, |xy| = |x| + |y| ≤ p e x e y estão no começo
da cadeia w que tem p letras a em seu início. Como |xy| ≤ p tanto a cadeia x quanto a cadeia y
só contém letras a.
x y

aaaa ...aaabbbb...bbb

Em particular se |xy| = p, fazendo o bombeamento xy2z, obtemos uma cadeia que tem mais instâncias da
letra a que da letra b, uma vez que adicionamos instâncias da letra a sem acrescentar novas instâncias
da letra b (já que y é composto inteiramente de letras a e z neste caso só conterá letras b). Logo, xy2z não
pertence a L, mas se L fosse regular xy2z deveria pertencer a L. Portanto, a suposição de que L é regular
está incorreta.
Linguagens e seus mecanismos de
reconhecimento

Linguagem Autômato que a reconhece


Linguagem regular Autômato finito
Linguagem livre de contexto Autômato a pilha
Linguagem dependente de Autômato linear limitado
contexto
Linguagem recursivamente Máquina de Turing
enumerável

Você também pode gostar