Aula04 GLC
Aula04 GLC
Aula04 GLC
Marcelo Johann
recursively enumerable
context-sensitive
context-free
regular
• Gramáticas
• Produção
• Derivações
• Árvores de Derivação
• S: o Símbolo Inicial (S ∈ N)
• P: Conjunto de regras de produções do tipo
u→v
• T: conjunto de símbolos terminais
– Palavras ou tokens da linguagem
• Vocabulário e notações:
– V: alfabeto
V = N ∪ T (N ∩ T = ∅)
– u ou 𝛂: string pertencente a V
INF01033 - Compiladores B - Marcelo Johann - 2020/1 7
Derivações
• Seja:
– um não-terminal A ∈ N,
– uma regra de produção p = { A → v } ∈ P, e
– w, z dois strings quaisquer.
A transformação:
wAz ⇒ wvz
É chamada “derivação em um passo usando p”
• Se w1 ⇒ w2 ⇒ w3 … ⇒ wn então podemos dizer
w1 ⇒* wn
– “derivação em múltiplos (0 ou mais) passos”;
– também ⇒+ (um ou mais)
• Equivalência:
– G1 e G2 são equivalentes se L(G1) = L(G2)
⇒ Todos strings gerados estão em L
⇐ Todos strings w ∈ L podem ser gerados
• Convenções
– Símbolos que representam terminais em minúsculos:
• u, v, x, y, ...
– Símbolos que representam não-terminais em maiúsculos:
• X, Y, TERM, S,...
– Símbolos que representam formas sentenciais (seqüências
de terminais e não-terminais): letras gregas ou sublinhadas:
• α, β, ω, w, z
N = {S, B, C, D}
T = {0, 1}
S -> 0B | 1C
B -> 1S
C -> 0C | 0D | 1
D -> 0
• Árvore de derivação:
– representação gráfica da derivação de uma
sentença (string)
– estrutura hierárquica que originou a sentença
• A raiz da árvore representa o símbolo inicial
• Os vértices interiores são não-terminais
• Os símbolos terminais e a palavra vazia são folhas
4
Árvore de derivação para
a sentença 45
E E
E - E E
E * E
5 E * E E - E 2
3 2 5 3
• Gramáticas Ambíguas
• Gramáticas sem ciclos
• Gramáticas ε-livres
• Gramáticas fatoradas à esquerda
• Gramáticas recursivas à esquerda
• Gramáticas simplificadas
• Gramática ε-livre :
– GLC que não possui produções vazias do tipo
A→ε
exceto a produção S → ε (S é o símbolo inicial).
– P1 = {A→𝛼 | 𝛼 ≠ 𝜀};
Repita:
Para toda produção A→𝛼 ∈ P1 e X ∈ N𝜀 tal que
𝛼 = 𝛼1X𝛼2, se 𝛼1𝛼2 ≠ 𝜀 então faça:
P1 = P1 ∪ {A → 𝛼1𝛼2}
até que o tamanho de P1 não aumente.
G2 = (N,T,P2,S);
Onde:
P2 = P1 ∪ {S → 𝜀}
Linguagem =
{ b, ba, baa, baaa, baaaa, baaaaa, … }
• É equivalente a dizer:
b seguido de uma repetição de zero ou mais ‘a’s à
direita
INF01033 - Compiladores B - Marcelo Johann - 2020/1 25
(B) Eliminação de recursividade à esquerda
• E → E+T | T
• T → T*F | F
• F → (E)| Id
A regra E → E+T | T se torna:
E →TE’
E’ → +TE’| ε
• Fatorando a esquerda:
Cmd → if Expr then Cmd ElseOpc
Cmd → Outro
ElseOpc → else Cmd | ε
Em material separado