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

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

III – Análise sintáctica

Apresentações semelhantes


Apresentação em tema: "III – Análise sintáctica"— Transcrição da apresentação:

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

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

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

4 Função FIRST DEI FIRST(X1 X2 ... Xk) contém: FIRST(X1)\{};
se  está em FIRST(X1) também contém FIRST(X2)\{}; ... se  está em FIRST(Xk-1) também contém FIRST(Xk)\{}; se  está em FIRST(Xk) também contém ; Jorge Morais LFA 1999/

5 Função FOLLOW DEI $ 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) Jorge Morais LFA 1999/

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

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

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

9 Tabela de derivação DEI 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,$) Jorge Morais LFA 1999/

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

11 Parser descendente não recursivo
DEI 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. Jorge Morais LFA 1999/

12 Exemplo - Parser DEI Pilha Entrada Saída $E id+id*id$ - $E’T E TE’
$E’T’F T FT’ $E’T’id F id $E’T’ +id*id$ $E’ T’   $E’T+ E’ +TE’ Jorge Morais LFA 1999/

13 Exemplo - Parser (cont.)
DEI Pilha Entrada Saída $E’T id*id$ - $E’T’F T FT’ $E’T’id F id $E’T’ *id$ $E’T’F * T’ *FT’ id$ Id$ Jorge Morais LFA 1999/

14 Exemplo - Parser (cont.)
DEI Pilha Entrada Saída $E’T $ - $E’ T’   E’   A sequência é reconhecida A uso da tabela evita a recursividade Jorge Morais LFA 1999/

15 Recuperação de erros DEI
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 Jorge Morais LFA 1999/

16 Gramáticas LL(1) DEI 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) Jorge Morais LFA 1999/


Carregar ppt "III – Análise sintáctica"

Apresentações semelhantes


Anúncios Google