A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Profa. Heloise Manica Paris Teixeira

Apresentações semelhantes


Apresentação em tema: "Profa. Heloise Manica Paris Teixeira"— Transcrição da apresentação:

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 $ $ $ $ $

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 $ $ $

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$ ETE’ $E’ T a+b$ Ta $E’ a --- $E’ +b$ E’+E $E+ $E b$ $E’T Tb $E’b $ E’ε SUCESSO E  T E’ E’  + E | ε T  a | b topo Tabela sintática a b + $ E ETE’ E’ E’+E E’ ε T Ta Tb

13 ASD preditiva não recursiva
Pilha Cadeia Regra $E a*b$ ETE’ $E’T Ta $E’a --- $E’ *b$ ERRO Exemplo Reconhecer a*b E  T E’ E’  + E | ε T  a | b Tabela sintática a b + $ E ETE’ E’ E’+E E’ε T Ta Tb 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$ S0A $A0 --- $A 1012$ A1B $B1 $B 012$ B0A 12$ 2$ B2 $2 $ SUCESSO Tabela sintática 1 2 S S0A S1B A A1B A2 B B0A B2

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 S0A S1B A A1B A2 B B0A B2 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 S0A SB A AaA Aε B Bb

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 S0A1 SB A AaA Aε B Bb 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 ETE’ E’ E’+TE’ E’ε T TFT’ T’ T’ε T’*FT’ F Fid 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 ETE’ E’ E’+TE’ E’ε T TFT’ T’ T’ε T’*FT’ F Fid F(E)


Carregar ppt "Profa. Heloise Manica Paris Teixeira"

Apresentações semelhantes


Anúncios Google