Carregar apresentação
A apresentação está carregando. Por favor, espere
1
Profa. Heloise Manica Paris Teixeira
Análise Sintática - Continuação Parte 4 Profa. Heloise Manica Paris Teixeira Slides cedidos pela Prof. Valéria Feltrin (DIN-UEM)
2
Análise sintática Analisadores Sintáticos Descendente (Top-down)
Do símbolo de partida para a sentença Da sentença para o simbolo de partida Descendente (Top-down) Ascendente (Bottom-up) Com retrocesso (back track) Sem retrocesso (preditive) Recursiva Não Recursiva LL(1) Um analisador preditivo tenta prever a construção seguinte da cadeia de entrada com base em uma ou mais marcas de verificação à frente
3
ASD Preditiva Algoritmos: Gramáticas LL(1) Recursivo LL(1)
O primeiro “L” se refere ao fato de o processamento ocorrer da esquerda para a direita (Left) O segundo “L” se refere ao fato de o analisador acompanhar uma derivação à esquerda para a cadeia de entrada. O número (1) significa que é usado um símbolo da entrada para prever a direção da análise.
4
ASD preditiva não recursiva
Idéia geral A recursão é substituída pelo uso de uma pilha onde os símbolos sendo expandidos são armazenados Para determinar qual regra gramatical aplicar, consulta-se uma tabela sintática + a $ b Cadeia de entrada Pilha Z Y X $ Analisador sintático Saída Tabela sintática
5
ASD preditiva não recursiva
Funcionamento Um símbolo não terminal a ser expandido é empilhado Pilha E T E’ E’ + E | ε T a | b E topo $
6
ASD preditiva não recursiva
Ao expandir um não terminal no topo da pilha, ele é desempilhado e seu lado direito da regra gramatical é empilhado (em sentido inverso) para expansão O sentido inverso garante a ordem natural de expansão da esquerda para a direita Cadeia: a+b Cadeia: a+b Pilha Pilha E T E’ E’ + E | ε T a | b T topo E topo E’ $ $
7
ASD preditiva não recursiva
Quando um símbolo terminal estiver no topo da pilha e esse mesmo símbolo estiver no início da cadeia sendo reconhecida, o terminal é desempilhado e o símbolo inicial da cadeia consumido E T E’ E’ + E | ε T a | b Cadeia: a+b Cadeia: +b Pilha Pilha Pilha a topo T topo E’ E’ topo E’ $ $ $
8
ASD preditiva não recursiva
E T E’ E’ + E | ε T a | b Cadeia: b Cadeia: b Cadeia: +b Cadeia: +b Cadeia: b Pilha Pilha Pilha Pilha Pilha + T b E E’ E E´ E´ $ $ $ $ $
9
ASD preditiva não recursiva
E T E’ E’ + E | ε T a | b Cadeia: b Cadeia: $ Cadeia: $ Cadeia Aceita! Pilha Pilha Pilha Pilha b E´ E´ $ $ $
10
ASD preditiva não recursiva
Considere: X = topo da pilha a = símbolo inicial da cadeia de entrada Possibilidades durante a análise: Se X = a = $, então o analisador termina a análise com sucesso Se X = a ≠ $, então o analisador desempilha X e consome o símbolo inicial da cadeia Se X é não terminal, então o analisador procura na tabela sintática a regra de X que produz o símbolo inicial da cadeia e empilha seu lado direito (em sentido inverso) Se X é terminal e é diferente de ‘a’ ou se X é não terminal e não há regra cuja derivação produza ‘a’, então ocorreu um erro!
11
ASD preditiva não recursiva
Algoritmo de análise sintática empilhe um símbolo delimitador ($) e o símbolo inicial da gramática; concatene ao final da cadeia um símbolo delimitador ($); faça ip apontar para o primeiro símbolo da cadeia; repetir X=símbolo no topo da pilha; a=símbolo apontado por ip; se (X for um terminal ou o símbolo delimitador) então se X=a então desempilhar X; avançar ip; senão ERRO; senão /*X é um não terminal*/ se (existe na tabela sintática uma regra de X que produza a) então empilhar em sentido inverso o lado direito da regra selecionada; até que X=símbolo delimitador /*pilha está vazia*/ Cadeia: 4+5$ Pilha E X=topo $
12
ASD preditiva não recursiva
Exemplo Reconhecer a+b Pilha Cadeia Regra $ E a +b$ ETE’ $E’ T a+b$ Ta $E’ a --- $E’ +b$ E’+E $E+ $E b$ $E’T Tb $E’b $ E’ε SUCESSO E T E’ E’ + E | ε T a | b topo Tabela sintática a b + $ E ETE’ E’ E’+E E’ ε T Ta Tb
13
ASD preditiva não recursiva
Pilha Cadeia Regra $E a*b$ ETE’ $E’T Ta $E’a --- $E’ *b$ ERRO Exemplo Reconhecer a*b E T E’ E’ + E | ε T a | b Tabela sintática a b + $ E ETE’ E’ E’+E E’ε T Ta Tb A cadeia não pertence à linguagem!
14
ASD preditiva não recursiva
Exercício: reconheça a cadeia 01012 S 0A | 1B A 1B | 2 B 0A | 2 Pilha Cadeia Regra $S 01012$ S0A $A0 --- $A 1012$ A1B $B1 $B 012$ B0A 12$ 2$ B2 $2 $ SUCESSO Tabela sintática 1 2 S S0A S1B A A1B A2 B B0A B2
15
ASD preditiva não recursiva
Como construir a tabela sintática? De acordo com o exemplo, para um não terminal X e um terminal ‘n’, a tabela indica a regra de X cujo conjunto Primeiro (Fisrt) contém ‘n’ S 0A | 1B A 1B | 2 B 0A | 2 Tabela sintática 1 2 S S0A S1B A A1B A2 B B0A B2 F(S)= {0, 1} F(A)= {1,2} F(B)= {0,2}
16
ASD preditiva não recursiva
Exercício: construa a tabela sintática e reconheça a cadeia 0aa S 0A | B A aA | ε B b Pilha Cadeia Regra $S 0aa$ S 0A $A0 --- $A aa$ A aA $Aa a$ $ A ε SUCESSO F(S)= {0, b} F(A)= {a, ε} F(B)= {b} Tabela sintática a b $ S S0A SB A AaA Aε B Bb
17
ASD preditiva não recursiva
Exercício: construa a tabela e reconheça a cadeia 0a1 S 0A1 | B A aA | ε B b Pilha Cadeia Regra $S 0a1$ S 0A1 $1A0 --- $1A a1$ A aA $1Aa 1$ ERRO F(S)= {0, b} F(A)= {a, ε} F(B)= {b} Tabela sintática 1 a b $ S S0A1 SB A AaA Aε B Bb Por que aconteceu o erro? A cadeia não faz parte da linguagem? Ou a tabela está errada? Para se chegar ao terminal 1, A deve produzir ε. Portanto, a regra Aε deve ser adicionada na tabela para a combinação de A com 1 e não em A com $ Aε
18
ASD preditiva não recursiva
Regras para construção da tabela sintática Para cada produção A da gramática, execute os passos 2 e 3 abaixo Para cada terminal a em Primeiro(), adicione A em T[A,a] Se ε estiver em Primeiro(), adicione A em T[A,b] para cada terminal b em Seguidor(A) Faça cada entrada indefinida da tabela indicar erro
19
ASD preditiva não recursiva
Exercício: construir a tabela sintática para a gramática abaixo E TE’ E’ +TE’ | ε T FT’ T’ *FT’ | ε F (E) | id P(E) = { ( , id } P(E’) = { +, ε } P(T)={(, id} P(T’) = { *, ε } P(F)={(, id} seguidor(E) = { ), $ } seguidor(E') = { ), $ } seguidor(T) = { +, ), $ } seguidor(T’) = { +, ), $ } seguidor(F) = {*, +, ), $ } Tabela sintática id + * ( ) $ E ETE’ E’ E’+TE’ E’ε T TFT’ T’ T’ε T’*FT’ F Fid F(E)
20
ASD preditiva não recursiva
Exercício: reconhecer a cadeia id+id*id E TE’ E’ +TE’ | ε T FT’ T’ *FT’ | ε F (E) | id Tabela sintática id + * ( ) $ E ETE’ E’ E’+TE’ E’ε T TFT’ T’ T’ε T’*FT’ F Fid F(E)
Apresentações semelhantes
© 2025 SlidePlayer.com.br Inc.
All rights reserved.