






Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Os melhores documentos à venda: Trabalhos de alunos formados
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Comunidade
Peça ajuda à comunidade e tire suas dúvidas relacionadas ao estudo
Descubra as melhores universidades em seu país de acordo com os usuários da Docsity
Guias grátis
Baixe gratuitamente nossos guias de estudo, métodos para diminuir a ansiedade, dicas de TCC preparadas pelos professores da Docsity
O funcionamento do analisador sintático ascendente de precedência simples para a análise de gramáticas, adaptado de notas de aulas do prof. Giuseppe mongiovi do di/ufpb. Aprenda sobre a construção da árvore de derivação sintática, identificação e redução do handle, e a implementação do analisador ascendente.
O que você vai aprender
Tipologia: Provas
1 / 11
Esta página não é visível na pré-visualização
Não perca as partes importantes!
UPE – Caruaru – Sistemas de Informação Disciplina: Compiladores Prof.: Paulemir G. Campos
Analisadores Sintáticos Ascendentes ( Bottom-Up )
Exemplo:
Seja a seguinte gramática G(E) para gerar expressões aritméticas:
E ::= E + T | T T ::= T * F | F F ::= id | ( E )
Reconhecer a sentença w = a * b + c
E ⇒ E + T ⇒ E + F ⇒ E + id (c) ⇒ T + id (c) ⇒ TF +id (c) ⇒ T id (b) + id (c) ⇒ F* id (b) + id (c) ⇒ id (a) * id (b) + id (c)
E
E + T
T
T
F
a
b
F
c
forma sentencial
handle redução
a * b + c a (^) F→ id F * b + c F (^) T→ F T * b + c b (^) F → id T * F + c TF (^) T→ TF T + c T (^) E → T E + c c (^) F → id E + F F (^) T → F E + T E + T (^) E → E+T
Para algumas formas sentenciais do exemplo anterior temos:
Antes de efetuar o produto, a e b devem ser conhecidos. Portanto, a tem precedência em relação a * b tem precedência em relação a *
1) a * b + c aÆ*ÅbÆ+Åc handle = a
2) T + c T Æ+ Åc handle = T
De 1) e 2) concluímos:
Antes de efetuar a adição, T e c devem ser conhecidos. Portanto, T tem precedência em relação a + c tem precedência em relação a +
id Æ *, * Å id, id Æ +, + Å id, T Æ +, + Å T
→ Relações de precedência
Seja a seguinte forma sentencial canônica
w =... RS... R, S ∈ V
Em algum ponto da análise sintática, R e/ou S farão parte de um handle :
Existem três possibilidades:
handle
handle
handle
Z
U
R (^) S
Z
U
R S
Z
U
R S
Matriz de Precedência – representa as relações de precedência entre todos os símbolos de uma gramática.
Z b M L a ( ) Z b (^) ± Å^ Å M (^) ± ± L Æ^ Æ a Æ^ Æ^ ± ( Å^ ± Å^ Å ) Æ^ Æ
Matriz de Precedência para a gramática G(Z)
Para que serve a Matriz de Precedência?
Se existir, no máximo, uma relação entre qualquer par de símbolos (R, S), então as relações indicarão o handle de qualquer forma sentencial
Como encontrar o handle?
Seja w = S 1 S 2... Sn uma forma sentencial qualquer. A subcadeia, mais à esquerda, SiSi+1... Sj (i ≥ 1 e j ≤ n) será o handle de w se somente se: Si-1 Å Si Si ± Si+1 ±... ± Sj Sj Æ Sj+ onde: S 0 = Sn+1 = $, $ Å Si e Si Æ $ p/ i = 1,2,... n ($ - símbolo delimitador da cadeia)
Exemplo:
Utilizando a Matriz de Precedência da gramática G(Z), verificar se w = b(aa)b ∈ L(G(Z))
forma sentencial handle redução do handle para $ÅbÅ(ÅaÆa±)ÆbÆ$ a M $ÅbÅ(ÅM±a±)ÆbÆ$ Ma) L $ÅbÅ(±LÆbÆ$ (L M $Åb±M±bÆ$ bMb Z $ÅZÆ$ Z (^) w ∈ L(G(Z))
Implementação do Analisador Ascendente de Precedência Simples
Estrutura de dados
T[ i, j ] = 0 se não existe relação entre Si e Sj T[ i, j ] = 1 se Si Å Sj T[ i, j ] = 2 se Si ± Sj T[ i, j ] = 3 se Si Æ Sj
Notas de aulas do prof. Giuseppe Mongiovi do DI/UFPB, 2002.
Appel, A. W. Modern Compiler Implementation in C. Cambridge University Press, 1998. (Capítulo 3, seção 3.3).