Escolar Documentos
Profissional Documentos
Cultura Documentos
Analise Sinttica II
Mtodo Bottom-up
Exemplo: Shift-Reduce atravs de Pilhas
Pilha que armazena os smbolos da gramtica Buffer que contem a sentena a ser reconhecida Tabela de de Precedncia (TP) de operadores (opcional)
TP - determinar as relaes de precedncia entre os operadores e ser consultada para determinar o curso de ao em cada passo. Convencionando que $ o smbolo inicial da pilha e, ainda, marca o final da sentena a ser reconhecida, e que w a sentena a ser reconhecida teremos inicialmente: PILHA: $ e BUFFER: w$
Mtodo Bottom-up
Procedimento de anlise shift-reduce Transfere (shift) os smbolos da entrada um a um para a pilha at que o lado direito de uma produo aparea no topo da pilha. Quando isto ocorrer, o lado direito da produo deve ser trocado (reduced) pelo lado esquerdo da produo em questo. Esse processo deve ser repetido at que toda a sentena de entrada tenha sido analisada. Ao final do processo, a sentena estar sintaticamente correta se e somente se a entrada estiver vazia e a pilha contiver apenas o smbolo inicial da gramtica.
Universidade Federal da Paraba Departamento de Informtica
Mtodo Bottom-up
Exemplo:
y2*y
Gramtica
Mtodo Bottom-up
Trs maneiras de tratar conflitos
Implementar um mtodo lookahead Alterar a gramtica para evitar ambiguidade Utilizar a tabela de precedncia A gramtica no deve conter produes vazias O lado direito das produes das gramticas no pode possuir dois no-terminais adjacentes
Mtodo Bottom-up
A gramtica G = ({E}, {id, +, -, *, /, (, )}, P, E}, onde P:
E E+E | E-E | E*E | E/E | E-E | (E) | id
Quando a relao de precedncia entre o smbolo do topo da pilha e a posio atual da sentena for < ou = feito um shift (empilha smbolo corrente do buffer na pilha) Quando a relao de precedncia entre o smbolo do topo da pilha e a posio atual da sentena for > feito um ou mais reduce na pilha
Mtodo Bottom-up
J trs mensagens de erro
e1: falta operando e2: parnteses no balanceados e3: falta operador
Mtodo Top-down
Exemplo:
1 Gramtica ambgua TR T aTc R R RbR
2 ?
Mtodo Top-down
Podemos escolher uma das seguintes opes: Anlise preditiva recursiva
Construo de um conjunto de procedimentos, normalmente recursivos, um para cada smbolo no-terminal da gramtica em questo
Mtodo Top-down
Anlise preditiva recursiva:
Seja a gramtica
<cmd> begin <lista_cmds> end | while <condio> do <cmd> | if <condio> then <cmd>
<expr> <termo> + <expr> | <termo> <termo> <fator> * <termo> | <fator> <fator> <primrio> ** <fator> | <primrio> <primrio> IDENT | NMERO | ( <expr> )
Mtodo Top-down
Anlise preditiva recursiva:
Procedimento analisador_sinttico { obtenha_smbolo(); /* chama o analisador lxico */ EXPR(); } Procedimento EXPR() { TERMO(); se smbolo_lido = '+' ento { obtenha_smbolo(); EXPR(); } }
Universidade Federal da Paraba Departamento de Informtica
Mtodo Top-down
Anlise preditiva recursiva:
Procedimento TERMO() { FATOR(); se smbolo_lido = '*' ento { obtenha_smbolo(); TERMO(); } } <termo> ::= <fator> { * <termo> }*
Mtodo Top-down
Anlise preditiva recursiva:
Procedimento PRIMRIO() { <primrio> ::= IDENT | NMERO | ( <expr> ) se smbolo_lido = IDENT ento { /* trate adequadamente um identificador */ obtenha_smbolo(); } seno se smbolo_lido = NMERO ento { /* trate adequadamente um nmero */ obtenha_smbolo(); } seno se smbolo_lido = '(' ento { obtenha_smbolo(); EXPR(); se smbolo ')' ento ERRO( "falta )" ); seno obtenha_smbolo(); } }
Universidade Federal da Paraba Departamento de Informtica
Mtodo Top-down
Anlise preditiva recursiva Limitaes do mtodo:
Entra em ciclo (loop) para gramticas recursivas esquerda No lida com regras no-determinsticas(A e A ) Requer uma linguagem com recursividade na implementao
Adaptando a Gramtica
Retirar recurso esquerda
Um no-terminal A, em uma GLC G=(N,T,P,S) recursivo se A A, para e (NT)*.
Se =, temos recurso a esquerda Se =, temos recurso a direita
Uma GLC G=(N,T,P,S) possui recurso esquerda direta se P contm pelo menos uma produo da forma A A. Uma GLC G=(N,T,P,S) possui recurso esquerda indireta se existe em G uma derivao da forma A n A, para algum n2
Universidade Federal da Paraba Departamento de Informtica
Adaptando a Gramtica
Retirar recurso esquerda
Considere A ::= A | A recursividade pode ser eliminada substituindo-se as produes de G(A) por:
A ::= A' A'::= A' |
Adaptando a Gramtica
Retirar recurso esquerda
O processo elimina toda recursividade direta esquerda, mas no elimina toda recursividade esquerda S Aa | b A Ac | Sd | e
Gramtica recursiva esquerda em S
Adaptando a Gramtica
Adaptando a Gramtica
Retirar recurso esquerda (Exemplo)
Adaptando a Gramtica
Retirar recurso esquerda (Exemplo)
Adaptando a Gramtica
Retirar recurso esquerda (Exemplo)
Adaptando a Gramtica
Retirar no determinismo
Caracterizado por:
A A