III – Análise sintáctica DEI Eliminação de ambiguidade Eliminação de recursividade à esquerda Factorização à esquerda Bibliografia aconselhada: Aho, Sethi e Ullman – secções 4.2 e 4.3 Jorge Morais LFA 1999/2000 - 1
Ambiguidade de gramáticas DEI Uma gramática diz-se ambígua se existirem duas derivações diferentes para uma mesma sequência Exemplo: E E + E id + id +id Jorge Morais LFA 1999/2000 - 2
Ambiguidade do if-then-else DEI Inst if Expr then Inst | if Expr then Inst else Inst | resto... Gramática ambígua Exemplo: if E1 then if E2 then S1 else S2 Jorge Morais LFA 1999/2000 - 3
Eliminação de ambiguidade DEI Associar cada else com o then não associado mais próximo Inst InstA | InstNA InstA if Expr then InstA else InstA | resto InstNA if Expr then Inst | if Expr then InstA else InstNA Jorge Morais LFA 1999/2000 - 4
Precedência de operadores DEI Consideremos a gramática: E E + E | E - E | E * E | E / E | ( E ) | id Pode-se eliminar a ambiguidade determinando a precedência de operadores: E E + T | E - T | T T T * F | T / F | F F ( E ) | id Jorge Morais LFA 1999/2000 - 5
Recursividade à esquerda DEI Uma gramática diz-se recursiva à esquerda se existe uma variável A tal que existe uma derivação A + A Exemplo: A A | Eliminação da recursividade à esquerda A A’ A’ A’ | Jorge Morais LFA 1999/2000 - 6
Eliminação da Recursividade DEI A A 1 | A 2 | ... | A m | 1 | 2 | ... | n onde nenhum i começa por A Podemos reescrever como A 1 A’ | 2 A’ | ... | n A’ A’ 1 A’ | 2 A’ | ... | m A’ | Esta regra só elimina derivações de um passo Jorge Morais LFA 1999/2000 - 7
Exemplo DEI E E + T | E - T | T T T * F | T / F | F F ( E ) | id E T E’ E’ + T E’ | - T E’ | T F T’ T’ * F T’ | / F T’ | F ( E ) | id Jorge Morais LFA 1999/2000 - 8
Factorização à esquerda DEI A factorização à esquerda é uma transformação útil para parsers preditivos A 1 | 2 | ... | n | A A’ | A’ 1 | 2 | ... | n Jorge Morais LFA 1999/2000 - 9