Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas

Analisador Sintático Ascendente de Precedência Simples em Compiladores, Provas de Direito

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

  • Como identificar e reduzir o handle em um analisador sintático ascendente?
  • Qual é a idéia por trás da construção da árvore de derivação sintática?
  • Como funciona o analisador sintático ascendente?
  • Como implementar o analisador ascendente de precedência simples?
  • Quais são os problemas a serem resolvidos no analisador sintático ascendente?

Tipologia: Provas

2022

Compartilhado em 07/11/2022

Amanda_90
Amanda_90 🇧🇷

4.6

(86)

223 documentos

1 / 11

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
UPE – Caruaru – Sistemas de Informação
Disciplina: Compiladores
Prof.: Paulemir G. Campos
Parsing LR
Analisadores Sintáticos Ascendentes
(Bottom-Up)
Um analisador sintático ascendente tenta construir a árvore de
derivação sintática (ADS) para uma sentença w a partir dos
símbolos de w (folhas), fazendo reduções (substituindo o lado
direito de uma regra pelo seu lado esquerdo) até obter o
símbolo inicial S (raiz).
A idéia basicamente consiste em encontrar e reduzir
sucessivamente o handle até que seja obtido o símbolo inicial
da gramática ou uma ocorrência de erro.
Adaptado de notas de aulas do prof. Giuseppe Mongiovi do DI/UFPB.
pf3
pf4
pf5
pf8
pf9
pfa

Pré-visualização parcial do texto

Baixe Analisador Sintático Ascendente de Precedência Simples em Compiladores e outras Provas em PDF para Direito, somente na Docsity!

UPE – Caruaru – Sistemas de Informação Disciplina: Compiladores Prof.: Paulemir G. Campos

Parsing LR

Analisadores Sintáticos Ascendentes ( Bottom-Up )

  • Um analisador sintático ascendente tenta construir a árvore de derivação sintática (ADS) para uma sentença w a partir dos símbolos de w (folhas), fazendo reduções (substituindo o lado direito de uma regra pelo seu lado esquerdo) até obter o símbolo inicial S (raiz).
  • A idéia basicamente consiste em encontrar e reduzir sucessivamente o handle até que seja obtido o símbolo inicial da gramática ou uma ocorrência de erro.

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

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:

  1. Apenas R faz parte do handle

handle

  1. R e S fazem parte do handle

handle

  1. Apenas S faz parte do handle

handle

Z

U

R (^) S

  • R tem precedência em relação a S (R deve ser reduzido antes de S)
  • existe uma produção do tipo U→... R

R Æ S

Z

U

R S

  • R e S têm a mesma precedência (devem ser reduzidos ao mesmo tempo)
  • existe uma produção do tipo U→. .RS..

R ± S

Z

U

R S

  • S tem precedência em relação a R (S deve ser reduzido antes de R)
  • existe uma produção do tipo U→S...

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

  • uma tabela (matriz) de precedência com valores:

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

  • uma tabela que armazene as produções de tal forma que dado um lado direito, possamos localizá-lo na tabela e identificar o correspondente lado esquerdo;
  • uma pilha onde são armazenados os símbolos da seqüência de entrada (processados da esquerda para a direita) até que seja identificada uma relação Æ entre o símbolo do topo da pilha e o símbolo de entrada.
  • Referências

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).