1
Linguagens Livres de Contexto
2
Linguagens Regulares
}{ nnba }{ Rww
3
Linguagens Regulares
}{ nnba }{ Rww
Linguagens Livres de Contexto
4
Linguagens Livres de Contexto
Autômatosde Pilha
GramáticasLivres de Contexto
pilha
autômato
5
Gramáticas Livres de Contexto
6
Exemplo Uma gramática livre de contexto :
SaSbS
aabbaaSbbaSbS
G
Uma derivação:
7
SaSbS
aaabbbaaaSbbbaaSbbaSbS
G
Outra derivação:
Uma gramática livre de contexto :
8
SaSbS
)(GL
(((( ))))
}0:{ nba nn
9
SbSbSaSaS
abbaabSbaaSaS
Uma gramática livre de contexto :G
Uma derivação:
Exemplo
10
SbSbSaSaS
abaabaabaSabaabSbaaSaS
Outra derivação:
Uma gramática livre de contexto :G
11
SbSbSaSaS
)(GL }*},{:{ bawwwR
12
SSSSaSbS
ababSaSbSSSS
Uma derivação:
Exemplo
Uma gramática livre de contexto :G
13
SSSSaSbS
abababaSbabSaSbSSSS
Uma derivação:
Uma gramática livre de contexto :G
14
SSSSaSbS
() ((( ))) (( ))
)(GL
15
Definição: Gramática Livre de Contexto
Gramática
Produções da forma:xA
xé um string de variáveis e terminais
Variáveis Símbolosterminais
Variávelinicial
16
Uma linguagem é livre de contexto
se existe uma gramática livre de contexto
tal que
L
G
)(GLL
Definição: Linguagem Livre de Contexto
17
Ordem de Derivação ABS .1
AaaAA
.3
.2
B
BbB.5.4
aabaaBbaaBaaABABS54321
derivação mais à esquerda :
aabaaAbAbABbABS32541
derivação mais à direita:
18
|ABbBbAaABS
derivação mais à esquerda:
abbbbabbbbBabbBbbBabAbBabBbBaABS
derivação mais à direita:
abbbbabbBbbabAbabBbaAaABS
19
Árvores de Derivação
20
ABS
ABS |aaAA |BbB
S
BA
21
ABS |aaAA |BbB
aaABABS
a a A
S
BA
22
ABS |aaAA |BbB
aaABbaaABABS S
BA
a a A B b
23
ABS |aaAA |BbB
aaBbaaABbaaABABS S
BA
a a A B b
24
ABS |aaAA |BbB
aabaaBbaaABbaaABABS S
BA
a a A B b
Árvore de derivação
25
aabaaBbaaABbaaABABS
resultado
aabbaa
S
BA
a a A B b
ABS |aaAA |BbB
Árvore de derivação
26
Partial Derivation Trees
S
BA
Árvore de derivação parcial
ABS |aaAA |BbB
27
aaABABS
S
BA
a a A
Árvore de derivação parcial
28
aaABABS
S
BA
a a A
formasentencial
resultaaaAB
Árvore de derivação parcial
29
aabaaBbaaBaaABABS
aabaaAbAbABbABS S
BA
a a A B b
Mesma árvore de derivação
À vezes, a ordem de derivação não importaMais à esquerda:
Mais à direita:
30
Ambiguidade
31
aEEEEEE |)(|| aaa
E
EE
EE
a
a a
aaaEaaEEaEaEEE*
derivação mais à esquerda
32
aEEEEEE |)(|| aaa
E
EE
a a
EE a
aaaEaaEEaEEEEEE
derivação mais à esquerda
33
aEEEEEE |)(|| aaa
E
EE
a a
EE a
E
EE
EE
a
a a
Duas árvores de derivação
34
A gramática aEEEEEE |)(|| é ambígua:
E
EE
a a
EE a
E
EE
EE
a
a a
string tem duas árvores de derivação
35
Definição:Uma gramática livre de contexto
é ambígua
se algum string
tem duas ou mais árvores de derivação
G
)(GLw
36
Em outras palavras:
Uma gramática livre de contexto
é ambígua
se algum string
tem duas ou mais derivações mais à esquerda (ou mais à direita)
G
)(GLw
37
Porque ambiguidade importa?
E
EE
a a
EE a
E
EE
EE
a
a a
aaa
tome 2a
38
E
EE
EE
E
EE
EE
222
2
2 2 2 2
2
39
E
EE
EE
E
EE
EE
6222
2
2 2 2 2
2
8222
4
2 2
2
6
2 2
24
8
40
E
EE
EE
6222
2
2 2
4
2 2
2
6
Resultado correto:
41
• Gostaríamos de remover ambiguidade
• Ambiguidade é ruim para linguagens de
programação
42
Corrigindo a gramática ambígua:aEEEEEE |)(||
Nova gramática não ambígua:
aFEFFTFTT
TETEE
)(
43
aFEFFTFTT
TETEE
)(
aaaFaaFFaFTaTaTFTTTEE
E
E T
T F
F
a
T
F
a
a
aaa
44
E
E T
T F
F
a
T
F
a
a
aaa
Única árvore de derivação
45
A gramática :
aFEFFTFTT
TETEE
)(
não é ambígua:Todo string temuma única árvore de derivação
G
)(GLw
46
Ambiguidade Inerente
Algumas linguagens livres de contextopossuem apenas gramáticas ambíguas
Exemplo: }{}{ mmnmnn cbacbaL
21 | SSS
||11
aAbAAcSS
||22
bBcBBaSS
47
O string nnn cba
possui duas árvores de derivação
S
1S
S
2S
1S c 2Sa