14
III – Análise sintáctica • 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 LFA 1999/2000 - 1 Jorge Morais

III – Análise sintáctica

Embed Size (px)

DESCRIPTION

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/2000 - 1. Gramáticas LR(0). DEI. - PowerPoint PPT Presentation

Citation preview

Page 1: III – Análise sintáctica

III – Análise sintáctica

• 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

LFA 1999/2000 - 1Jorge Morais

Page 2: III – Análise sintáctica

Gramáticas LR(0)

• 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

LFA 1999/2000 - 2Jorge Morais

Page 3: III – Análise sintáctica

Itens LR(0)

• Proução:– 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 .

LFA 1999/2000 - 3Jorge Morais

Page 4: III – Análise sintáctica

Operação de fecho

• 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)

LFA 1999/2000 - 4Jorge Morais

Page 5: III – Análise sintáctica

Operação de salto (goto)

• 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

LFA 1999/2000 - 5Jorge Morais

Page 6: III – Análise sintáctica

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

LFA 1999/2000 - 6Jorge Morais

Page 7: III – Análise sintáctica

Exemplo

• E’ E

• E E + T

• E T

• T T * F

• T F

• F ( E )

• F idLFA 1999/2000 - 7Jorge Morais

Page 8: III – Análise sintáctica

goto(I0 , X)

• 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 .}LFA 1999/2000 - 8Jorge Morais

Page 9: III – Análise sintáctica

Restantes conjuntos

• I6=goto(I1 , +) = {E E + . T, T . T * F, T . F, F . ( E ), F . id}

• I7=goto(I2 , *)={TT*.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 ) .}LFA 1999/2000 - 9Jorge Morais

Page 10: III – Análise sintáctica

Autómato finito

• 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 . })

LFA 1999/2000 - 10Jorge Morais

Page 11: III – Análise sintáctica

SLR – Simple LR

• 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) = jLFA 1999/2000 - 11Jorge Morais

Page 12: III – Análise sintáctica

LR(1)

• 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

LFA 1999/2000 - 12Jorge Morais

Page 13: III – Análise sintáctica

LALR(1) – LookAhead LR(1)

• 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

LFA 1999/2000 - 13Jorge Morais

Page 14: III – Análise sintáctica

Hierarquia de gramáticas

LFA 1999/2000 - 14Jorge Morais