AULA Nº 6.1

(Download da Aula)

<< anterior próxima >>
menu de aulas dúvidas
 

Análise Sintática Ascendente e Descendente

 Estratégias gerais de Análise Sintática

 

Ascendente (Bottom-up);

 

Descendente (Top-down);

 Análise Sintática Ascendente

 

  Analise Sintática Descendente

 

  Estratégia Descendente ( Top-down)

 

  Estratégia Ascendente (Bottom-up)

 

   Método Escolhido: Método de Análise Sintática Descendente 

 

 Gramáticas tratadas por este método:

 

 Gramáticas LL(K)

  • 1968, Lewis e Stearns;
  • LL(K) : Left-to-right, leftmost derivation with K look-ahead symbols;
  • GLC G = (VT, VN , S , P) não ambígua;
  • T1 t2 ... ti ti+1 ... tn Î L(G)
  • Se t = t1 t2 ... ti ti+1 , então e = t ti+1 ... tn , com N Î VN
  • N ® a 1 | a 2 | ... | a m
  • a j é único pois G é não - ambígua

    Gramáticas LL(K)

 

Definição: Se t  Î (VT, VN , S , P)* ,

g , g p, g q Î VT* ,

p, q = 1 , 2 , ... , m ,

S ð t Na ð t a pg = t g p

S ð t Na ð t a qg = t g q

Então G é LL(K), K ³ se, e somente se, a p ¹ a q Þ g p(k) ¹ g q(k)

g q(k) ® K símbolos mais à esquerda de g .

 

 Exemplo: G14

 

S ® aNbc | dNc

N ® cb | c

L(G14) = {acbbc , acbc , dcbc , dcc }

 

Análise descendente de L(G14) :

 

 

1-

Na parte (i) e (ii) da figura acima, N deve ser reconhecido como 'c' ou 'cb' baseado em c(5) e b(4), respectivamente;

 

2-

Nunca é necessário examinarmos 4 símbolos, pois G14 é LL(3);

 

3-

Em (i) e (iii) a decisão de que produção de N usar é baseada na cadeia já reconhecida (t ). Em ambos os casos falta reconhecer a cadeia 'cbc';

 

Contra-exemplo: G15 S ® S a | b . G15 não é LL(K), qualquer que seja K.

 

1-

K = 1 'ba'

Não pode ser analisada. Não sabemos qual das duas produções usar.

 

2-

K +1 símbolos 'ba ...'

Não sabemos qual é o último 'a', já que dispomos só de K símbolos.

 

Obs.: Qualquer gramática livre de comtexto que tenha para um de seus NT N símbolos uma geração da forma N ð Na (qualquer que seja a ) não é LL(K).

   Eliminação de Recursão à Esquerda

 

Qualquer gramática com recursão à esquerda possui uma gramática equivalente sem recursão à esquerda.

 

Exemplo: G15' é equivalente a G15: S ® bM M ® aM | l (G15')

 

Usando-se ERE - gramática: S ® ba* (G15'')

 

G15'' é LL(1). Não é LL(0) porque após reconhecer 'b', precisa reconhecer o próximo símbolo para decidir se a cadeia de 'a' já terminou.

   LL(K) Fortes

 

1970, Rosenkrantz e Steans

 

Em um ponto qualquer da análise canônica, se N está sendo procurado, a j é determinado exclusivamente pelos k próximos símbolos ainda não reconhecidos, independentemente de t (histórico do reconhecimento).

 

Obs.:

 

1-

As gramáticas LL(K) menos fortes simplificam o processo de análise sintática;

 

2-

Todas as gramáticas LL(1) são fortes e não-ambíguas;

   Gramáticas PLL(K)

 

1973 , Rechenberg

 

São LL(K) fortes com produções da forma N ® E ou N ® E{E}* , onde E contém alternativas e/ou alternativas fatoradas.

 

Gramáticas PLL(1)

 

  1. S ® M | N
  2. M ® a {b | Nc}*
  3. D( S | e f | l ) | g

Chamaremos a esta gramática de G16.

 

Primeiros: Para distinguir-se entre S ® M e S ® N é necessário saber se o próximo símbolo de entrada é do conjunto {'a'} ou {'d','g'} que contém os símbolos gerados mais à esquerda por M e N, respectivamente.

 

Seguintes: Em alguns casos é preciso deduzir os símbolos que podem sequir um determinado NT em qualquer forma sentencial.

   Gramáticas ESLL(1)

 

 

  • Extensões das LL(1);
  • Lados direitos das produções mais gerais do que os das gramáticas PLL(K);
  • Restrições nas produções garantem análise mais eficiente do que a das gramáticas PLL(1);

  Grafos Sintáticos das Gramáticas ESLL(1)

 

Nó alternativo

 

n é nó alternativo de m, ou

n é uma alternativa de m.

 

b é alternativa de a

N é alternativa de b

 

[a]b

b é alternativa de a

 

/ é alternativa de *

/ tem uma alternativa vazia ou l - alternativa

 

S ® a | l
A alternativa de a é um l - nó

 

S ® [a]

A alternativa de a é uma l - alternativa

 

A estrutura de dados para implementar estas duas gramáticas será idêntica. Gera-se um l - nó para cada l - alternativa. Logo N ® ab e N ® al b são produções equivalentes.

  Seqüência de nós alternativos (seqüência de alternativas)

 

Quando os nós n1, n2 ,..., nm são tais que m > 1, ni é alternativa de n i-1, com i = 2, ..., m.

 

l - alternativa não é considerada um nó da seqüência.

  Sucessor

 

Dado um nó m de um grafo sintático, digamos que n é um sucessor de m se, e somente se, o arco que sai de m aponta diretamente para n. Se o arco leva a uma seqüência de alternativas, o primeiro nó da seqüência será o sucessor de m.

 

Exemplos:

 

1 - Na figura (i), 'c' é sucessor de 'b' ;

 

2 - Na figura (ii) 'b' é sucessor de 'a' ( e também sua alternativa )