Escolar Documentos
Profissional Documentos
Cultura Documentos
Mesquita
Constitui a segunda fase do tradutor
Sua função é verificar se as construções
usadas no programa são gramaticalmente
corretas
◦ Isto é, verifica se as sentenças podem ter sido
geradas pela gramática da linguagem.
Nas linguagens de programação, a Gramática
usada é do tipo Livre de Contexto (GLC)
Hierarquia de Chomsky
Stat Id := Exp
Stat Stat;Stat
Stat if Exp then Stat else Stat
Stat if Exp then Stat
{w T* | S + w }
Qual a diferença?
• Derivação mais à direita X derivação
mais à esquerda
Prof. Ricardo Mesquita 19/34
Árvore de Derivação
A raiz é o símbolo inicial
Os resultados da produção dos símbolos não-
terminais são filhos
As folhas devem conter apenas símbolos terminais
Lendo as folhas da esquerda para a direita temos a
palavra derivada
Produções que levam ao vazio também devem ser
representadas, apesar de serem ignoradas na
formação da palavra
E E + E Numero + E 3 + E 3 + E * E 3 + Numero * E
3 + 4 * E 3 + 4 * Numero 3 + 4 * 5
E E * E E + E * E Numero + E * E 3 + E * E 3 + Numero * E
3 + 4 * E 3 + 4 * Numero 3 + 4 * 5
E E * E E + E * E Numero + E * E 3 + E * E 3 + Numero * E
3 + 4 * E 3 + 4 * Numero 3 + 4 * 5
23 35
Representam
operações distintas!!
Prof. Ricardo Mesquita 24/34
Em muitos (mas não todos) os casos, uma
gramática ambígua pode ser reescrita em uma
gramática não-ambígua
◦ Outra opção é o uso de semântica externa para
decidir pela árvore correta
Ou seja, podemos resolver qual a derivação correta
aplicando uma heurística baseada em nosso
conhecimento da operação!
Convenção
◦ - e / são obrigatoriamente associativos a esquerda
◦ + e * são opcionalmente associativos a esquerda
◦ Exemplo de operador associado a direita
a=b=c {atribuição em C} a=(b=c)
◦ Exemplo de operador não associativo
2 < 3 < 4 {comparação em Pascal} Não permitido
E E + E’
E E - E’
E E’
E’ num