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 Construção de tabelas para parsers LR Bibliografia aconselhada: Aho, Sethi e Ullman – secção 4.7 Crespo – secção 5.5, 5.6 e 5.7 Appel – secção 3.3 Jorge Morais LFA 1999/

2 Gramáticas LR(0) DEI Podem ser derivadas usando apenas o símbolo no topo da pilha, fazendo instruções shift-reduce sem ler nenhum símbolo à frente Demasiado fracas, servem de base às outras formas de construções de tabelas Jorge Morais LFA 1999/

3 Itens LR(0) DEI Proução: Itens LR(0):
A  X Y Z Itens LR(0): A  . X Y Z A  X . Y Z A  X Y . Z A  X Y Z . No caso A  , temos apenas o item A  . Jorge Morais LFA 1999/

4 Operação de fecho DEI Sendo I um conjunto de itens, fecho(I) é um novo conjunto construído usando as seguintes regras: Todos os itens em I pertencem a fecho(I) Se A   . B  está em fecho(I) e B   é uma produção da gramática, B  .  é adicionado ao fecho(I) Jorge Morais LFA 1999/

5 Operação de salto (goto)
DEI goto(I,X) onde I é um conjunto de itens e X é um símbolo da gramática Fecho do conjunto de itens de todos os itens da forma A   X .  onde A   . X  pertence a I Jorge Morais LFA 1999/

6 Construção de conjuntos de itens
Algoritmo: C = {fecho ({S’  . S})} Para cada I em C e cada X símbolo da gramática (até não haver mais itens a adicionar) Adicionar goto(I,X) a C Jorge Morais LFA 1999/

7 Exemplo DEI E’  E E  E + T E  T T  T * F T  F F  ( E ) F  id
Jorge Morais LFA 1999/

8 goto(I0 , X) DEI I1=goto(I0 , E) = {E’  E . , E  E . + T}
I2=goto(I0 , T) = {E  T . , T  T . * F} I3=goto(I0 , F) = {T  F .} I4=goto(I0 , ‘(‘ ) = {F  ( . E ) , E  . E + T, E  . T, T  . T * F, T  . F, F  . ( E ), F  . id} I5=goto(I0 , id ) = {F  id .} Jorge Morais LFA 1999/

9 Restantes conjuntos DEI
I6=goto(I1 , +) = {E  E + . T, T  . T * F, T  . F, F  . ( E ), F  . id} I7=goto(I2 , *)={TT*.F,F.( E ),F . id} I8=goto(I4 , E) = {F  ( E . ) , E  E . + T} I9=goto(I6 , T) = {E  E + T . , T T .* F} I10=goto(I8 , F) = {T  T * F .} I11=goto(I8 , ‘)’) = {F  ( E ) .} Jorge Morais LFA 1999/

10 Autómato finito DEI Cada um dos Ik vai ser um estado dum autómato finito determinístico As transições são dadas por (I,X,goto(I,X)) O estado inicial será o que contém E’  E Este autómato pode ser construído usando a Construção de Thompson e a construção de subconjuntos, partindo das transições: ({A   . X }, X, {A  X . }) ({A   . X },  , {X . }) Jorge Morais LFA 1999/

11 SLR – Simple LR DEI Construir C={I0, I1, ..., In}
Se {A   . a } pertence a Ii e goto(Ii,a) = Ij , então acção(i,a) = shift j Se {A   . } pertence a Ii, então para todo o a em FOLLOW(A), então acção(i,a) = reduce A  ; A não pode ser S’ Se {S’  S} pertence a Ii, então acção(i,$) = aceit. Se {A   . X } pertence a Ii, X variável (não terminal), então salto(i,X) = j Jorge Morais LFA 1999/

12 LR(1) DEI LR(1) – usa um símbolo de lookahead
os itens LR(1) são da forma (A  . , a) onde a é um símbolo terminal se  não é , a não tem qualquer significado os itens(A  . , a) vão corresponder a uma redução A  se a for o próximo símbolo na entrada Jorge Morais LFA 1999/

13 LALR(1) – LookAhead LR(1)
DEI LALR(1) – diminui número de estados relativamente a LR(1) e é mais forte que SLR Junta qualquer par de estados iguais que apenas tenham o símbolo de lookahead diferente Jorge Morais LFA 1999/

14 Hierarquia de gramáticas
DEI Jorge Morais LFA 1999/


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

Apresentações semelhantes


Anúncios Google