III – Análise sintáctica
description
Transcript of III – Análise sintáctica
III – Análise sintáctica
• Parsers ascendentes
• Instruções shift-reduce
• Bibliografia aconselhada:– Aho, Sethi e Ullman – secção 4.5
LFA 1999/2000 - 1Jorge Morais
Parsers ascendentes
• Reconhecimento das folhas para o nó principal
• Redução duma sequência ao símbolo inicial da gramática
• Ponto de apoio (handle) é uma subsequência que pode ser associada à parte direita duma produção permitindo a sua redução à parte esquerda da mesma
LFA 1999/2000 - 2Jorge Morais
Pontos de apoio (handle)
• Forma Derivada à Direita – sequência resultante de uma derivação
• Um ponto de apoio duma Forma Derivada à Direita é uma produção A e uma posição de onde pode ser substituído por A de modo a produzir a Forma Derivada à Direita anterior
LFA 1999/2000 - 3Jorge Morais
Exemplo
• S aABeA Abc | bB d
• abbcde (b – ponto de apoio)aAbcde (Abc)aAde (d)aABe (aABe)S
LFA 1999/2000 - 4Jorge Morais
Implementação do parser
• Pilha – na pilha são colocadas os símbolos da gramática
• Entrada – sequência a ser analisada
• Acção – acção a tomar perante o símbolo no topo da pilha e o próximo símbolo na entrada
LFA 1999/2000 - 5Jorge Morais
shift-reduce
• Acções possíveis:– shift – deslocamento do símbolo de entrada
para a pilha– reduce – reduz o lado direito duma produção
(que está no topo da pilha) ao lado esquerdo– erro – chamada à rotina de erro– aceitação – derivação bem sucedida
LFA 1999/2000 - 6Jorge Morais
Aceitação duma sequência
• Duma forma geral, uma sequência u é reconhecida por uma gramática se S * u, onde S é o símbolo inicial
• Configuração inicial:– Pilha: $– Entrada: u $
• Configuração final:– Pilha: $ S– Entrada: $
LFA 1999/2000 - 7Jorge Morais
Exemplo
• E E + E | E * E | ( E ) | id
• id + id * id
• E * id + id * id
• E E + E id + E id + E * E id + id * E id + id * id
LFA 1999/2000 - 8Jorge Morais
Exemplo - Parser
LFA 1999/2000 - 9Jorge Morais
Pilha Entrada Acção
$ id+id*id$ shift
$id +id*id$ redução E id
$E +id*id$ shift
$E + id*id$ shift
$E + id *id$ redução E id
$E + E *id$ shift
$E + E * id$ shift
Exemplo - Parser (cont.)
• NOTA: a escolha do ponto de apoio depende da precedência de operadores
LFA 1999/2000 - 10Jorge Morais
Pilha Entrada Acção
$E + E * id $ redução E id
$E + E * E $ redução EE*E
$E + E $ redução EE+E
$E $ aceitação