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

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

III – Análise sintáctica Parsers predictivos não recursivos FIRST e FOLLOW Bibliografia aconselhada: –Aho, Sethi e Ullman – secção 4.4 –Crespo – secção.

Apresentações semelhantes


Apresentação em tema: "III – Análise sintáctica Parsers predictivos não recursivos FIRST e FOLLOW Bibliografia aconselhada: –Aho, Sethi e Ullman – secção 4.4 –Crespo – secção."— Transcrição da apresentação:

1 III – Análise sintáctica Parsers predictivos não recursivos FIRST e FOLLOW Bibliografia aconselhada: –Aho, Sethi e Ullman – secção 4.4 –Crespo – secção 4.3 LFA 1999/ Jorge Morais

2 Parser descendente não recursivo LFA 1999/ Jorge Morais

3 Função FIRST Se x é um símbolo terminal FIRST(x) = {x} Se X, adicionar a FIRST(X) Se X Y 1 Y 2... Y i-1 Y i... Y k, onde está em FIRST(Y 1 ), FIRST(Y 2 ),..., FIRST(Y i-1 ), adicionar o conteúdo de FIRST(Y i ) a FIRST(X); se todos os FIRST(Y j ), com j=1,2,..., k, contiverem então adicionar a FIRST(X) LFA 1999/ Jorge Morais

4 Função FIRST FIRST(X 1 X 2... X k ) contém: –FIRST(X 1 )\{ }; –se está em FIRST(X 1 ) também contém FIRST(X 2 )\{ }; –... –se está em FIRST(X k-1 ) também contém FIRST(X k )\{ }; –se está em FIRST(X k ) também contém ; LFA 1999/ Jorge Morais

5 Função FOLLOW $ pertence a FOLLOW(S), onde $ é o fim de sequência e S o símbolo inicial Se A B, então FIRST( )\{ } é adicionado a FOLLOW(B) Se A B ou A B (onde FIRST( ) contém ), adicionar FOLLOW(A) a FOLLOW(B) LFA 1999/ Jorge Morais

6 Exemplo E T E E + T E | - T E | T F T T * F T | / F T | F ( E ) | id LFA 1999/ Jorge Morais

7 Exemplo - FIRST FIRST(E) = {(, id} FIRST(E) = {+, -, } FIRST(T) = {(, id} FIRST(T) = {*, /, } FIRST(T) = {(, id} LFA 1999/ Jorge Morais

8 Exemplo - FOLLOW FOLLOW(E) = {), $} FOLLOW(T) = {+, -, ), $} FOLLOW(F) = {*, /, +, -, ), $} LFA 1999/ Jorge Morais

9 Tabela de derivação Para cada produção A –Para cada terminal a em FIRST( ) Adicionar A a M(A,a) –Se está em FIRST( ) Adicionar A a M(A,b), para todos os b em FOLLOW(A) –Se está em FIRST( ) e $ em FOLLOW(A) Adicionar A a M(A,$) LFA 1999/ Jorge Morais

10 Exemplo - Tabela de derivação LFA 1999/ Jorge Morais id+-*/()$ E E TE E E +TE E -TE E E T T FT T T T T *FT T /FT T T F F id F ( E )

11 Parser descendente não recursivo A pilha é iniciada com o símbolo inicial S sobre o símbolo $ Sendo X o símbolo no topo da pilha e a o símbolo de entrada actual: –Se X = a = $, terminar com sucesso –Se X = a $, retirar X da pilha e prosseguir com o símbolo de entrada seguinte –Se X é uma variável (não terminal) consultar a tabela. Se existir uma produção colocar o lado direito na pilha (por ordem, o primeiro no topo). Senão entrada de erro. LFA 1999/ Jorge Morais

12 Exemplo - Parser LFA 1999/ Jorge Morais PilhaEntradaSaída $Eid+id*id$- $ETid+id*id$ E TE $ETFid+id*id$ T FT $ETidid+id*id$ F id $ET+id*id$- $E+id*id$ T $ET++id*id$ E +TE

13 Exemplo - Parser (cont.) LFA 1999/ Jorge Morais PilhaEntradaSaída $ETid*id$- $ETFid*id$ T FT $ETidid*id$ F id $ET*id$- $ETF **id$ T *FT $ETFid$- $ETidId$ F id

14 Exemplo - Parser (cont.) A sequência é reconhecida A uso da tabela evita a recursividade LFA 1999/ Jorge Morais PilhaEntradaSaída $ET$- $E$ T $$ E

15 Recuperação de erros Na variável A, adicionar tokens de sincronização em FOLLOW(A) Adicionar tokens de sincronização de variáveis hierarquicamente anteriores Adicionar tokens de FIRST(A) Se a produção gerar a palavra vazia, usar essa por defeito Retirar um símbolo terminal do topo da pilha LFA 1999/ Jorge Morais

16 Gramáticas LL(1) Gramáticas não ambíguas, sem recursividade à esquerda Uma gramática diz-se LL(1) se, e só se, para 2 produções distintas A | : –para qualquer terminal a, e não derivam, simultaneamente, palavras começadas por a –apenas um (de ou ) pode derivar –se *, então não deriva nenhuma palavra começando por um terminal em FOLLOW(A) LFA 1999/ Jorge Morais


Carregar ppt "III – Análise sintáctica Parsers predictivos não recursivos FIRST e FOLLOW Bibliografia aconselhada: –Aho, Sethi e Ullman – secção 4.4 –Crespo – secção."

Apresentações semelhantes


Anúncios Google