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

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

Parte 4 Análise Sintática - Continuação Profa. Heloise Manica Paris Teixeira Slides cedidos pela Prof. Valéria Feltrin (DIN-UEM)

Apresentações semelhantes


Apresentação em tema: "Parte 4 Análise Sintática - Continuação Profa. Heloise Manica Paris Teixeira Slides cedidos pela Prof. Valéria Feltrin (DIN-UEM)"— Transcrição da apresentação:

1 Parte 4 Análise Sintática - Continuação Profa. Heloise Manica Paris Teixeira Slides cedidos pela Prof. Valéria Feltrin (DIN-UEM)

2 Análise sintática Descendente (Top-down) Ascendente (Bottom-up) Com retrocesso (back track) Sem retrocesso (preditive) Analisadores Sintáticos Do símbolo de partida para a sentença Da sentença para o simbolo de partida Um analisador preditivo tenta prever a construção seguinte da cadeia de entrada com base em uma ou mais marcas de verificação à frente Recursiva Não Recursiva LL(1)

3 ASD Preditiva Algoritmos: –Recursivo –LL(1) Gramáticas 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 Analisador sintático Z Y X $ Pilha Saída +a$b Cadeia de entrada Tabela sintática

5 ASD preditiva não recursiva Funcionamento –Um símbolo não terminal a ser expandido é empilhado E T E E + E | ε T a | b E $ Pilha 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 E $ Pilha topo E T $ Pilha topo E T E E + E | ε T a | b Cadeia: a+b

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 a $ Pilha topo E $ Pilha topo Cadeia: a+b Cadeia: +b E T E E + E | ε T a | b E T $ Pilha topo

8 ASD preditiva não recursiva E $ Pilha E $ Cadeia: b Cadeia: +b E T E E + E | ε T a | b E $ Pilha Cadeia: +b + E´ $ Pilha Cadeia: b T E´ $ Pilha Cadeia: b b

9 ASD preditiva não recursiva $ Pilha Cadeia: $ E T E E + E | ε T a | b E´ $ Pilha Cadeia: $ Cadeia Aceita! E´ $ Pilha Cadeia: b b Pilha

10 ASD preditiva não recursiva Considere: –X = topo da pilha –a = símbolo inicial da cadeia de entrada Possibilidades durante a análise: 1.Se X = a = $, então o analisador termina a análise com sucesso 2.Se X = a $, então o analisador desempilha X e consome o símbolo inicial da cadeia 3.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) 4.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 desempilhar X; empilhar em sentido inverso o lado direito da regra selecionada; senão ERRO; até que X=símbolo delimitador/*pilha está vazia*/ E $ Pilha X=topo Cadeia: 4+5$

12 ASD preditiva não recursiva Exemplo Reconhecer a+b ab+$ E E TE E E +EE ε T T aT b Tabela sintática PilhaCadeiaRegra $ Ea +b$ E TE $E Ta+b$ T a $E aa+b$--- $E+b$ E +E $E++b$--- $Eb$b$ E TE $ETb$b$ T b $Ebb$b$--- $E$ E ε $$SUCESSO E T E E + E | ε T a | b topo

13 ASD preditiva não recursiva Exemplo Reconhecer a*b ab+$ E E TE E E +EE ε T T aT b Tabela sintática PilhaCadeiaRegra $Ea*b$E TE $ETa*b$T a $Eaa*b$--- $E*b$ERRO A cadeia não pertence à linguagem! E T E E + E | ε T a | b

14 ASD preditiva não recursiva Exercício: reconheça a cadeia S 0A | 1B A 1B | 2 B 0A | S S 0AS 1B A A 1BA 2 B B 0AB 2 Tabela sintática PilhaCadeiaRegra $S01012$ S 0A $A001012$--- $A1012$ A 1B $B11012$--- $B012$ B 0A $A0012$--- $A12$ A 1B $B112$--- $B2$ B 2 $22$--- $$SUCESSO

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 | S S 0AS 1B A A 1BA 2 B B 0AB 2 Tabela sintática 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 0ab$ S S 0AS B A A aAA ε B B b Tabela sintática PilhaCadeiaRegra $S0aa$ S 0A $A00aa$--- $Aaa$ A aA $Aaaa$--- $Aa$ A aA $Aaa$--- $A$ A ε $$SUCESSO F(S)= {0, b} F(A)= {a, ε } F(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 01ab$ S S 0A1S B A A aAA ε B B b Tabela sintática PilhaCadeiaRegra $S0a1$ S 0A1 $1A00a1$--- $1Aa1$ A aA $1Aaa1$--- $1A1$ERRO 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 ε F(S)= {0, b} F(A)= {a, ε } F(B)= {b}

18 ASD preditiva não recursiva Regras para construção da tabela sintática 1.Para cada produção A da gramática, execute os passos 2 e 3 abaixo 2.Para cada terminal a em Primeiro( ), adicione A em T[A,a] 3.Se ε estiver em Primeiro( ), adicione A em T[A,b] para cada terminal b em Seguidor(A) 4.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 id+*()$ E E TE E E +TEE ε T T FT T T εT *FTT ε F F idF (E) Tabela sintática P(E) = { (, id } P(E) = { +, ε } P(T)={(, id} P(T) = { *, ε } P(F)={(, id} seguidor(E) = { ), $ } seguidor(E') = { ), $ } seguidor(T) = { +, ), $ } seguidor(F) = {*, +, ), $ }

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 id+*()$ E E TE E E +TEE ε T T FT T T εT *FTT ε F F idF (E) Tabela sintática


Carregar ppt "Parte 4 Análise Sintática - Continuação Profa. Heloise Manica Paris Teixeira Slides cedidos pela Prof. Valéria Feltrin (DIN-UEM)"

Apresentações semelhantes


Anúncios Google