III – Análise sintáctica Parsers ascendentes Instruções shift-reduce Bibliografia aconselhada: –Aho, Sethi e Ullman – secção 4.5 LFA 1999/ Jorge 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/ Jorge 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/ Jorge Morais
Exemplo S aABe A Abc | b B d abbcde (b – ponto de apoio) aAbcde (Abc) aAde (d) aABe (aABe) S LFA 1999/ Jorge 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/ Jorge 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/ Jorge 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/ Jorge 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/ Jorge Morais
Exemplo - Parser LFA 1999/ Jorge Morais PilhaEntradaAcçã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/ Jorge Morais PilhaEntradaAcção $E + E * id$ redução E id $E + E * E$ redução E E*E $E + E$ redução E E + E $E$aceitação