110 likes | 192 Views
III – Análise sintáctica. DEI. Análise sintáctica ascendente LR Bibliografia aconselhada: Aho, Sethi e Ullman – secção 4.7 Crespo – secção 5.4 Appel – secção 3.3. Jorge Morais. LFA 1999/2000 - 1. Vantagem dos parsers LR. DEI.
E N D
III – Análise sintáctica DEI • Análise sintáctica ascendente LR • Bibliografia aconselhada: • Aho, Sethi e Ullman – secção 4.7 • Crespo – secção 5.4 • Appel – secção 3.3 Jorge Morais LFA 1999/2000 - 1
Vantagem dos parsers LR DEI • Reconhecem praticamente todas as construções de linguagens de programação expressas por gramáticas independentes de contexto • É o melhor método conhecido para parsers não recursivos com instruções shift-reduce, mantendo o grau de eficiência Jorge Morais LFA 1999/2000 - 2
Vantagem dos parsers LR (cont.) DEI • A classe das gramáticas que podem ser derivadas com parsers LR contém a classe das gramáticas que podem ser derivadas usando parser predictivos • Pode detectar rapidamente erros, assim que seja possível numa pesquisa da entrada da esquerda para a direita Jorge Morais LFA 1999/2000 - 3
Modelo dum parser LR DEI Jorge Morais LFA 1999/2000 - 4
Elementos dum parser LR DEI • Tabela de acções – acção(s, a), s estado actual e a o símbolo na entrada: • shift s’, onde s’ é um estado • reduce A • aceitação • erro • Tabela de salto (goto) – salto(s, X), s estado actual e X estado no topo da pilha: • retorna o estado de destino Jorge Morais LFA 1999/2000 - 5
Configurações DEI • Configuração inicial: • Pilha: 0 • Entrada: u $ • Configuração final: • Pilha: s0 X1 s1 ... Xmsm , com acção(sm,a)=aceit. • Entrada: u’ $ Jorge Morais LFA 1999/2000 - 6
Algoritmo DEI • Em cada passo, para a na entrada e s o estado actual: • Se acção(s,a) = shift s’, trocar s por s’ na pilha • Se acção(s,a) = reduce A , retirar os elementos relativos a do topo da pilha, inserindo A seguido de s’ = salto(a,s’’), onde s’’ é o estado que ficou anteriormente no topo • Se acção(s,a) = aceitação, aceita a sequência • Se acção(s,a) = erro, vai para rotina de erro Jorge Morais LFA 1999/2000 - 7
Exemplo DEI • E E + T • E T • T T * F • T F • F ( E ) • F id • Sequência: id * id + id $ Jorge Morais LFA 1999/2000 - 8
Exemplo – Tabela DEI Jorge Morais LFA 1999/2000 - 9
Exemplo - Parser DEI Jorge Morais LFA 1999/2000 - 10
Exemplo – Parser (cont.) DEI Jorge Morais LFA 1999/2000 - 11