Plano da aula Compiladores Análise bottom-up AKA: Analisador ascendente Analisador empilhar/reduzir Análise sintática (4) Análise Bottom-Up Autômatos mpilhar/reduzir xemplos Handle Operações básicas IQuestões a serem tratadas Gramática LR 1 Tabelas LR. 2 Top-Down x Bottom Up ε Top-Down AB cb ccbb ccbca AB A c B cbb B ca Bottom-Up ccbca Acbca AcbB AB A c B ca B cbb AB 3 4 5 6
7 8 aabe aabe 9 10 11 12
+ id + id id 13 14 + id id + id id 15 16 Análise bottom-up Handle Considerando uma leitura da esquerda para a direita, a análise bottom-up procura a encontrar o inverso da derivação mais a direita. Deve-se identicar a forma sentencial corrente a ser reduzida para sua forma sentencial anterior. Noção de Handle Definição Um handle de uma forma sentencial mais a direita é uma produção A e uma posição de, onde o string pode ser encontrado e substituido por A para produzir a forma sentencial de. Ou seja: se A w 17 Handles: Análise bottom-up Handle É uma subcadeia que reconhece o lado direito de uma produção e cuja redução ao não terminal do lado esquerdo da produção representa um passo ao longo do percurso de uma derivação mais a direita. xemplo: = A w 18
Analisador bottom-up strutura Básica A análise Bottom-Up vai necessitar: Uma pilha para guardar os símbolos Um buffer de entrada para a sentença w a ser reconhecida. Cadeia de tokens de entrada a 1... a i... a n s m X m s m-1 X m-1. s 0 tc topo Análise LR Tabela sintática (ações e desvios) aída 19 Operações lícitas: empilha (sht): coloca no topo da pilha o símbolo que está sendo lido e avança o cabeçote de leitura na string reduz (reduce): substitui o handle no topo da pilha pelo não terminal correspondente aceita: reconhece que a sentença foi gerada pela gramática erro: ocorrendo erro de sintaxe, chama uma subrotina de atendimento a erros 20 ht-reduce Problemas na análise Motivados por: A gramática é ambígua e a entrada aponta uma situação A entrada não é ambígua, mas não é possível determinar a seqüencia da análise pela entrada dada. 21 Ocorre quando um handle foi obtido, mas o conteúdo da pilha e o próximo símbolo de entrada não permitem identicar a produção a ser utilizada na redução. xemplo: sintaxe similar para chaa de procedimentos e acesso arrays proccall id ( parlist ) parlist parlist, par par par id arrayexp id ( explist ) explist explist, exp exp exp id Produções elegíveis ntrada: id ( id, id ) id, id ) ( id ntrada 22 Ocorre quando um handle foi obtido, mas o conteúdo da pilha e o próximo símbolo de entrada não permitem identicar a produção a ser utilizada na redução. xemplo: sintaxe similar para chaa de procedimentos e acesso arrays proccall id ( parlist ) parlist parlist, procpar procpar procpar id arrayexp id ( explist ) explist explist, exp exp exp id ntrada: id ( id, id ) id, id ) ( ntrada ht-reduce Não é possível determinar se deve ser executada um sht ou uma redução. xemplo: --else else id Alternativa 23 24 else... ntrada
ht-reduce Não é possível determinar se deve ser executada um sht ou uma redução. xemplo: --else else Resolução do conflito mpilhar, associando o else ao sem else mais interno. Note que não é uma solução genérica. else... ntrada 25 xemplo de operação ntrada Ação sht Reduce id () sht id + id id sht ntrada: +id id Reduce id + id Reduce id sht id sht id Reduce id Reduce ACITA 26 Algoritmo Reduz e: está na pilha A existe um T tal que A ntão: Pode-se remover o handle ; Reduz-se para A na pilha é um prefixo viável le pode derivar numa seqüência de terminais ht (empilha) mpilhar o terminal, avançar entrada rro Livro do dragão, eção 4.5 Bibliografia Atenção, na edição em português há um erro. Na página 87, primeira coluna, no parágrafo que começa com Formalmente, um handle de uma forma... aparece: A w b w mas o correto é: A w w Price & Toscani, eção 3.3 (até página 58) Aceitar 27 28