compiladores - geovanegriesang.files.wordpress.com · compiladores análise sintática parte 05...

82
COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang [email protected] Universidade de Santa Cruz do Sul UNISC Departamento de informática

Upload: votram

Post on 13-Dec-2018

223 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

COMPILADORES

Anaacutelise sintaacutetica Parte 05

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

2 Geovane Griesang

Anaacutelise sintaacutetica

Data Conteuacutedo

23092013 3 Anaacutelise Sintaacutetica 31 analisadores ascendentes e descendentes

30092013 3 Anaacutelise Sintaacutetica 32 anaacutelise preditiva

07102013 3 Anaacutelise Sintaacutetica 33 anaacutelise de precedecircncia de operadores

14102013 3 Anaacutelise Sintaacutetica 34 anaacutelise LR

21102013 3 Anaacutelise Sintaacutetica 35 recuperaccedilatildeo de erros

28102013 3 Anaacutelise Sintaacutetica 36 geradores de analisadores sintaacuteticos

04112013 Atividade EaD 3 Anaacutelise Sintaacutetica continuaccedilatildeo

11112013 Prova Individual e sem consulta 2

3 Geovane Griesang

Anaacutelise sintaacutetica

Legenda

sum = sigma (somatoacuterio)

= delta

120576 = eacutepsilon

120582 = lambda

= alfa

= beta

= gamma

= xi

4 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR Left to Right with Rightmost derivation

Atualmente o tipo mais usado de analisadores sintaacutetico ascendentes eacute baseado em um conceito chamado LR(K)

L representa a escanccedilatildeo de entrada da esquerda para direita

R representa a construccedilotildees mais agrave direita ao reverso

k representa os siacutembolos a frente do fluxo de entrada que auxiliam nas decisotildees de anaacutelise

5 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR

Os analisadores sintaacuteticos LR satildeo controlados por uma tabela de modo muito parecido com os analisadores LL natildeo-recursivos

Para uma gramaacutetica ser LR eacute suficiente que uma analisador shift-reduce seja capaz de reconhecer o handle quando ele aparecer no topo da pilha

6 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR

O uso desse tipo de analisador eacute atraente por vaacuterios motivos

Os analisadores LR satildeo capazes de reconhecer praticamente todas as construccedilotildees sintaacuteticas definidas por Gramaacuteticas Livre de Contexto (GLC) da maioria das linguagens de programaccedilatildeo

Existem gramaacuteticas que natildeo satildeo LR mas geralmente elas podem ser evitadas para construccedilotildees tiacutepicas das ling de programaccedilatildeo

7 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR

O LR aleacutem de ser o meacutetodo de anaacutelise shift-reduce sem retrocesso mais geral pode ser implementado com o mesmo grau de eficiecircncia espaccedilo e tamanho que outro meacutetodos shift-reduce

Um analisador LR detecta um erro sintaacutetico tatildeo logo ele aparece na cadeia de entrada em uma escansatildeo da entrada da esquerda para direita

8 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR

A classe de gramaacuteticas que podem ser reconhecidas com o uso dos meacutetodos LR eacute um superconjunto proacuteprio da classe de gramaacuteticas que podem ser reconhecidas com os meacutetodos preditivos e LL

Para uma gramaacutetica ser LR(k) ela deve ser capaz de reconhecer a ocorrecircncia do lado direito de uma produccedilatildeo em forma sentencial mais agrave direita com k siacutembolos a frente da entrada

Esse requisito eacute menos rigoroso que aquele das gramaacuteticas LL(k)

9 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR

Relembrando

Na LL(k) para reconhecer o uso de uma produccedilatildeo o analisador vecirc apenas os k primeiros siacutembolos que o seu lado direito deriva

Assim natildeo eacute surpresa que as gramaacuteticas LR possam descrever mais linguagens do que as gramaacuteticas LL

Para uma gramaacutetica ser LR(k) ela deve ser capaz de reconhecer

a ocorrecircncia do lado direito de uma produccedilatildeo em forma sentencial

mais agrave direita com k siacutembolos a frente da entrada

10 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR

A principal desvantagem do meacutetodo LR estaacute relacionada com a geraccedilatildeo do analisador sua construccedilatildeo a matildeo p uma linguagem de programaccedilatildeo tiacutepica eacute muito trabalhosa

Portanto eacute necessaacuterio o uso de uma ferramenta especializada um gerador de analisador LR

Felizmente muitos desses geradores estatildeo disponiacuteveis como por exemplo o Yacc Esse gerador recebe como entrada um GLC e produz automaticamente como saiacuteda um analisador sintaacutetico para esta gramaacutetica

11 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Reduccedilotildees - Exemplo

A derivaccedilatildeo segue a seguinte sequencia de cadeias

id id F id T id T F T E

Entrada id id

Neste ponto temos duas opccedilotildees de reduccedilatildeo podemos reduzir a cadeia T para E segundo a produccedilatildeo E rarr T e a cadeia consistindo no segundo id que representa o lado direito de F rarr id Escolhemos a segunda opccedilatildeo e reduzimos id para F produzindo a cadeia T F

id id

F rarr id F id

T rarr F T id

E rarr T E id ou F rarr id T F

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

12 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Itens e o autocircmato LR

Como o analisador sintaacutetico shift-reduce sabe quando transferir p a pilha e quando reduzir

Ex Dado o conteuacutedo de pilha $T e o proacuteximo siacutembolo da entrada como o analisador sabe que T no topo da pilha natildeo eacute um handle de modo que a accedilatildeo apropriada seja transferir o ldquordquo para a pilha e natildeo reduzir T para E

Entrada id id E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

id id

F rarr id F id

T rarr F T id

E rarr T E id ou F rarr id T F

13 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Itens e o autocircmato LR

Um analisador LR decide sobre as accedilotildees shift-reduce mantendo estados para acompanhar onde se encontra a anaacutelise

Os estados representam conjuntos de ldquoitensrdquo

Um item LR(0) de uma gramaacutetica G eacute a produccedilatildeo de G com um ponto em alguma posiccedilatildeo do seu lado direito

A produccedilatildeo A rarr XYZ gera os quatro itens A rarr XYZ

A rarr XYZ

A rarr XYZ

A rarr XYZ A produccedilatildeo A rarr 120576 gera apenas um item A rarr

14 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR - Itens e o autocircmato LR Representaccedilatildeo dos conjuntos de itens

Um gerador de analisadores sintaacuteticos que produz um analisador ascendente

deve representar os itens e conjunto de itens convenientemente

Um item pode ser representado por um par de inteiros onde o primeiro

representa o nuacutemero de uma das produccedilotildees da gramaacutetica subjacente e o

segundo indica a posiccedilatildeo do ponto

Conjuntos de itens podem ser representados por uma lista desses pares

A rarr XYZ

A rarr XYZ

A rarr XYZ

A rarr XYZ

15 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR - Itens e o autocircmato LR Representaccedilatildeo dos conjuntos de itens

O conjunto de itens necessaacuterios frequentemente incluem itens de

ldquofechamentordquo (ldquoclosurerdquo) onde o ponto estaacute no iniacutecio do corpo

Esses itens sempre podem ser reconstruiacutedos a partir dos outros itens no

conjunto e natildeo temos de incluiacute-los na lista

A rarr XYZ

A rarr XYZ

A rarr XYZ

A rarr XYZ

16 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Itens e o autocircmato LR

Um item indica quanto de uma produccedilatildeo jaacute foi visto em determinado ponto no processo de reconhecimento sintaacutetico Ex

O item ArarrXYZ indica o iniacutecio da busca de uma cadeia derivaacutevel de XYZ na entrada

O item A rarr XYZ indica que no ponto atual onde se encontra a anaacutelise uma cadeia X jaacute foi encontrada e que esperamos em seguida ver uma cadeia derivaacutevel de YZ

O item A rarr XYZ indica o fim da busca ou seja jaacute derivamos o lado direito XYZ de A e que pode ser o momento de reduzir XYZ para A

A rarr XYZ

A rarr XYZ

A rarr XYZ

A rarr XYZ

17 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Itens e o autocircmato LR

Uma coleccedilatildeo de conj de itens LR(0) chamada coleccedilatildeo LR(0) canocircnica oferece a base para construccedilatildeo de um autocircmato finito determinista que eacute usado para dirigir as decisotildees durante a anaacutelise

Esse autocircmato eacute chamado de autocircmato LR(0)

Em particular cada estado do autocircmato LR(0) representa um conjunto de itens na coleccedilatildeo LR(0) canocircnica

18 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Exemplo Para construir a coleccedilatildeo LR(0) canocircnica para uma gramaacutetica definimos uma gramaacutetica estendida e duas funccedilotildees

funccedilatildeo de fechamento (function CLOSURE)

funccedilatildeo de transiccedilatildeo (function GOTO)

Se G eacute uma gramaacutetica com siacutembolo inicial S entatildeo Grsquo eacute uma gramaacutetica estendida para G com o novo siacutembolo inicial Srsquo e a produccedilatildeo Srsquo rarr S

O objetivo dessa nova produccedilatildeo eacute simplificar a identificaccedilatildeo de quando o reconhecedor sintaacutetico deve parar e anunciar a aceitaccedilatildeo da cadeia de entrada

Ou seja a aceitaccedilatildeo ocorre se e somente se o analisador estiver para reduzir por Srsquo rarr S

19 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Se I eacute um conj de itens para a gramaacutetica G entatildeo CLOSURE(I) eacute o conj de itens construiacutedos a partir de I pelas duas regras

1 Inicialmente acrescente todo item de I no CLOSURE(I)

2 Se A rarr αBβ estaacute em CLOSEURE(I) e B rarr γ eacute uma produccedilatildeo entatildeo adicione o item B rarr γ em CLOSURE(I) se ele ainda natildeo estaacute laacute

Ix

A rarr αBβ

B rarr γ

20 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Intuitivamente A rarr αBβ em CLOSURE(I) indica que em algum ponto no processo de reconhecimento os itens correspondentes as produccedilotildees-B devem ser acrescentados para dirigir a busca por B

A subcadeia derivaacutevel de Bβ na entrada teraacute um prefixo derivaacutevel de B aplicando umas das produccedilotildees-B

Portanto incluiacutemos itens para todas as produccedilotildees-B ou seja se B rarr γ eacute uma produccedilatildeo tambeacutem incluiacutemos B rarr γ em CLOSURE(I) este processo eacute conhecido como fechamento de estado

Ix

A rarr αBβ

B rarr γ

21 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

P ver como o fechamento de um estado eacute computado Ersquo rarr E eacute colocado em CLOSURE(I) pela regra (1)

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Acrescente todo item de I no CLOSURE(I)

I0

Ersquo rarr E

22 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Como existe um natildeo-terminal E agrave direita de um ponto acrescentamos as produccedilotildees-E com pontos mais agrave esquerda do lado direito dos itens ex

E rarr E + T e E rarr T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

23 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Agora existe um natildeo-terminal T imediatamente agrave direita de um ponto no segundo item incluiacutedo (E rarr T) de modo que acrescentamos as produccedilotildees-T T rarr T F e T rarr F

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

24 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Em seguida o natildeo-terminal F agrave direita de um ponto nos forccedila a incluir os itens Frarr (E) e F rarr id mas nenhum outro item precisa ser acrescentado

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr (E)

F rarr id

25 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Um modo conveniente de implementar a funccedilatildeo de fechamento (closure) eacute manter um arranjo booleano added indexado pelos natildeo-terminais de G de modo que added[B] seja definido como verdadeiro (true) se e quando incluirmos o item B rarr γ para cada produccedilatildeo-B B rarr γ

SetOfItems CLOSURE(I)

J=I

repeat

for (cada item A rarr αBβ em J)

for (cada produccedilatildeo B rarr γ de G)

if (B rarr γ natildeo estaacute em J)

Adicione B rarr γ em J

until mais nenhum item seja adicionado a J em um passo do loop

return J

Ix

A rarr αBβ

B rarr γ

26 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Observe que se uma produccedilatildeo-B for incluiacuteda no fechamento de I com o ponto mais agrave esquerda do seu lado direito entatildeo todas as produccedilotildees-B seratildeo igualmente incluiacutedas no fechamento Ex A rarr αBβ

Uma lista de natildeo-terminais B cujas produccedilotildees foram incluiacutedas dessa forma eacute suficiente Dividimos todos os conjuntos de itens de interesse em duas classes

1 Itens de base (kernel) o item inicial Srsquo rarr S e todos itens cujos pontos natildeo estatildeo mais agrave esquerda em seus lados direitos

2 Itens que natildeo satildeo de base todos os itens com seus pontos mais agrave esquerda em seus lados direitos exceto Srsquo rarr S Ex B rarr γ

Ix

A rarr αBβ

B rarr γ

27 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Aleacutem do mais cada conjunto de itens de interesse eacute formado a partir do fechamento de um conjunto de itens de base

Os itens adicionados no fechamento nunca podem ser itens de base naturalmente

Assim podemos representar os conjuntos de itens em que realmente estamos interessados com pouca memoacuteria se desprezarmos todos que natildeo satildeo itens de base sabendo que esses podem ser gerados novamente no processo de fechamento Ex B rarr γ exceto Srsquo rarr S

Ix

A rarr αBβ

B rarr γ

28 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

A segunda funccedilatildeo usada na construccedilatildeo da coleccedilatildeo canocircnica LR(0) eacute a funccedilatildeo de transiccedilatildeo GOTO(I X) onde I eacute o conjunto de itens de base e X eacute um siacutembolo da gramaacutetica

GOTO(I X) eacute definido como fechamento do conjunto de todos os itens [ArarrαXβ] tais que

[A rarr αXβ] estaacute em I

A funccedilatildeo de transiccedilatildeo GOTO eacute utilizada para definir as transaccedilotildees no autocircmato LR(0) para uma gramaacutetica

I1

Ersquo rarr E

E rarr E + T

I0

Ersquo rarr E

E rarr E + T

E

29 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Estados do autocircmato correspondem aos conjuntos de itens e GOTO(I +) especifica a transaccedilatildeo do estado I para um novo estado I sob a entrada X

Se I representa o conjunto com dois itens [Ersquo rarr E][E rarr E+T] entatildeo GOTO(I +) conteacutem os itens

Calculamos GOTO(I +) examinando os itens em I com o + imediatamente agrave direita do ponto

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

A rarr αXβ

A rarr αXβ

I1

Ersquo rarr E

E rarr E + T +

I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

30 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Calculamos GOTO(I +) examinando os itens em I com o + imediatamente agrave direita do ponto

O item Ersquo rarr E natildeo eacute desse tipo mas Ersquo rarr E + T sim

Movemos o ponto para imediatamente agrave direita de + e obtemos ErarrE + T

e entatildeo calculamos o fechamento desse conjunto unitaacuterio

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Itens em I

[Ersquo rarr E]

[E rarr E+T]

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I1

Ersquo rarr E

E rarr E + T +

31 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Agora estamos prontos para construir C a coleccedilatildeo canocircnica de conjuntos

de itens LR(0) para uma gramaacutetica estendida Grsquo

void Itens(Grsquo)

C = CLOSURE([Srsquo rarr S])

repeat

for (cada conjunto de itens I em C)

for (cada siacutembolo da gramaacutetica X)

if (GOTO(I X) natildeo eacute vazio e natildeo estaacute em C)

Adicione GOTO(I X) em C

until nenhum novo conjunto de itens seja adicionado em C em uma rodada

32 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

A ideia central por traacutes da anaacutelise ldquoLR Simplesrdquo ou SLR eacute a construccedilatildeo do autocircmato LR(0) a partir da gramaacutetica dada

Os estados desses autocircmatos satildeo os conjuntos de itens da coleccedilatildeo LR canocircnica e as transiccedilotildees satildeo dadas pela funccedilatildeo de transiccedilatildeo GOTO

O estado inicial do autocircmato LR eacute dado por CLOSURE([Srsquo rarr S]) onde Srsquo eacute o siacutembolo inicial da gramaacutetica estendida

Todos os estados satildeo estados de aceitaccedilatildeo Nos referimos ao ldquoestado jrdquo como o estado correspondente ao conjunto de itens Ij

33 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E

Aceitar $

I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

34 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Como os autocircmatos LR(0) podem ajudar-nos a decidir por uma das accedilotildees shift-reduce (veja as decisotildees entre shift-reduce a seguir)

Suponha que a cadeia γ dos siacutembolos da gramaacutetica leve o autocircmato LR(0) do estado inicial 0 para algum estado j

Desta forma avance sobre o proacuteximo siacutembolo a se o estado j possuir uma transaccedilatildeo sob a

Caso contraacuterio escolha reduzir

Os itens no estado j nos diratildeo qual produccedilatildeo usar

35 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

O algoritmo LR abaixo utiliza sua pilha para acompanhar os estados e tambeacutem os siacutembolos da gramaacutetica

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Na verdade

O siacutembolo da gramaacutetica pode ser

recuperado a parir do estado de

modo que a pilha possua estados

ao inveacutes de siacutembolos

36 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Usamos uma pilha

p conter os estados

Os siacutembolos que correspondem aos estados estatildeo na coluna ldquoSiacutembolosrdquo

A pilha da linha (1) tecircm o estado inicial 0 do autocircmato

37 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Portanto fazemos a transferecircncia

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

O siacutembolo da linha 1 eacute o marcador de fundo da pilha $

O proacuteximo siacutembolo de entrada eacute id e o estado 0 tem uma transiccedilatildeo sob id p o estado 5

38 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

A partir do item [F rarr id ] no estado 5 efetuamos uma reduccedilatildeo segundo a produccedilatildeo F rarr id

Na linha 2 o estado 5 eacute empilhado (siacutembolo id)

I5

F rarr id

Natildeo haacute transiccedilatildeo a partir do estado 5 sob a entrada por isso reduzimos

39 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o lado direito da produccedilatildeo da linha (2) eacute id correspondendo ao estado 5 e seu lado direito eacute o F

Com os estados ao desempilhar o estado 5 correspondendo ao siacutembolo id o estado 0 passa a ser o topo

0 F $

40 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id I3

T rarr F

F

Procuramos uma transiccedilatildeo sob F o lado esquerdo da produccedilatildeo

0 F $

O estado 0 possui uma transiccedilatildeo em F p o estado 3 onde empilhamos o estado 3 com o siacutembolo F Ver linha (3)

3

41 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I3

T rarr F

Natildeo haacute transiccedilatildeo a partir do estado 3 sob a entrada por isso reduzimos

A partir do item [T rarr F ] no estado 3 efetuamos uma reduccedilatildeo segundo a produccedilatildeo T rarr F

3

0

T $

42 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

I7

T rarr T F

F rarr ( E )

F rarr id

id

Como outro exemplo considere a linha (5) com o estado 7 referente ao siacutembolo no topo da pilha

Esse estado 7 possui uma transaccedilatildeo para o estado 5 sob a entrada id de modo que empilhamos o estado 5

43 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o estado 5 natildeo possui transiccedilotildees de modo que reduzimos segundo F rarr id

quando removemos da pilha o estado 5 correspondente ao lado direito id o estado 7 passa a ser o topo da pilha

44 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Como o estado 7 possui uma transaccedilatildeo sob F para o estado 10 empilhamos o estado 10 (siacutembolo F)

I7

T rarr T F

F rarr ( E )

F rarr id

I10

T rarr T F

F

45 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O algoritmo eacute o mesmo para todos

os analisadores sintaacuteticos LR

Soacute a tabela de anaacutelise eacute diferente

de um analisador para o outro

O algoritmo lecirc caracteres de um

buffer de entrada um de cada vez

46 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O analisador sintaacutetico shift-reduce

transfere um siacutembolo para pilha jaacute

o analisador sintaacutetico LR transfere

um estado

Cada estado resume a informaccedilatildeo

contida na pilha abaixo dele

47 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

A pilha conteacutem uma sequencia de

estados s0s1 sm onde sm estaacute

no topo

No meacutetodo SLR a pilha conteacutem

estados do autocircmato LR(0)

Por construccedilatildeo a cada estado eacute

associado 1 siacutembolo da gramaacutetica

48 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Lembrem-se de que os estados

correspondem a conj de itens e

que haacute uma transiccedilatildeo do estado i

para o estado j se GOTO(Ii X) = Ij

Todas as transiccedilotildees para o estado

j devem ser para o mesmo siacutembolo

da gramaacutetica X

49 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

Sm

Sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Desta forma cada estado exceto

o estado inicial 0 possui um uacutenico

siacutembolo da gramaacutetica associado a

ele

50 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

A tabela LR consiste em duas partes ACTION uma funccedilatildeo de accedilatildeo de anaacutelise e GOTO uma funccedilatildeo de transiccedilatildeo

1 A funccedilatildeo ACTION recebe como argumentos um estado i e um estado a (ou $) O valor de ACTION(i a) pode ter um dos quatro formatos

a) Shift j onde j eacute um estado

A accedilatildeo tomada pelo analisador sintaacutetico efetivamente transfere a entrada a para a pilha mas usa o estado j para representar a

51 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

b) Reduce Ararr β A accedilatildeo do analisador efetivamente reduz β no topo da pilha para A o lado esquerdo da produccedilatildeo

c) Accept O analisador aceita a entrada e termina a anaacutelise

d) Error O analisador descobre um erro em sua entrada passa o controle p o recuperador de erro que toma alguma accedilatildeo corretiva

2 Estendemos a funccedilatildeo GOTO definida sobre um conjunto de itens para os estados se GOTO(Ii A) = Ij entatildeo GOTO tambeacutem mapeia um estado i e um natildeo-terminal A para o estado j

52 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

Para descrever o comportamento de uma analisador LR eacute recomendaacutevel ter uma notaccedilatildeo representado o estado completo do analisador sua pilha e a entrada restante

Uma configuraccedilatildeo p um analisador LR eacute um par (s0s1sm aiai+1an $) O primeiro componente eacute o conteuacutedo da pilha com o topo agrave direita e o segundo componente representa a entrada restante

Essa configuraccedilatildeo representa a seguinte forma sentencial agrave direita (X0X1Xmaiai+1an) Assim como faria um analisador shift-reduce

53 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

A uacutenica diferenccedila eacute que em inveacutes de siacutembolos da gramaacutetica a pilha conteacutem estados a partir dos quais os siacutembolos da gramaacutetica podem ser recuperados

Ou seja Xi eacute o siacutembolo da gramaacutetica representado pelo estado si

Observe que s0 o estado inicial do analisador sintaacutetico natildeo representa um siacutembolo da gramaacutetica e serve como marcador de fundo da pilha aleacutem de desempenhar um papel importante na anaacutelise

54 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

O proacuteximo movimento do analisador a partir da configuraccedilatildeo dada eacute determinado pela leitura de ai o siacutembolo de entrada corrente e sm o estado do topo da pilha e entatildeo consultando a entrada ACTION[sm ai] na tabela de accedilatildeo de anaacutelise

As configuraccedilotildees restantes apoacutes cada um dos quatro tipos de movimentaccedilatildeo satildeo as seguintes

1 Se ACTION[Sm ai] = shift s o analisador sintaacutetico executa um movimento de transferecircncia (shift move) ele empilha o estado s e avanccedila da entrada resultando na configuraccedilatildeo (s0s1 sm ai+1an $)

55 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2 Se ACTION[Sm ai]=reduce Ararrβ entatildeo o analisador sintaacutetico executa um movimento de reduzir (reduce move) resultando na configuraccedilatildeo (s0s1 sm-rs aiai+1an $)

onde r eacute o comprimento de β e s = GOTO[sm-r A]

Aqui o analisador sintaacutetico incialmente desempilhou os r siacutembolos de estado da pilha expondo o estado sm-r

O analisador sintaacutetico entatildeo empilhou s a entrada para GOTO[sm-r A] na pilha O siacutembolo corrente da entrada natildeo eacute alterado em um movimento de reduzir

56 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2

Para os LR que construiremos Xm-r+1Xm a sequencia de siacutembolos da gramaacutetica correspondendo aos estados retirados da pilha sempre iratildeo casar com β o lado direito da produccedilatildeo sendo reduzida

A saiacuteda de um analisador LR eacute gerada apoacutes um movimento de reduzir executando a accedilatildeo semacircntica associada agrave produccedilatildeo que estaacute sendo reduzida

No momento vamos considerar que a saiacuteda consiste soacute na impressatildeo da produccedilatildeo de reduccedilatildeo

57 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

3 Se ACTION[sm ai] = accept a anaacutelise estaacute concluiacuteda

4 Se ACTION[sm ai] = error o analisador sintaacutetico descobriu um erro e ativa uma rotina para recuperaccedilatildeo de erro

Todos os analisadores sintaacuteticos LR se comportam dessa maneira

A uacutenica diferenccedila entre eles diz respeito a informaccedilatildeo contida nos campos ACTION e GOTO da tabela de anaacutelise

O algoritmo de anaacutelise LR eacute resumido nos proacuteximos slides

58 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

Entrada Uma cadeia de entrada w e uma tabela de anaacutelise com funccedilotildees ACTION e GOTO para uma gramaacutetica G

Saiacuteda Se w estaacute em L(G) os passos os passos de uma reduccedilatildeo de uma anaacutelise ascendente para w

Caso contraacuterio uma indicaccedilatildeo de erro

Meacutetodo Inicialmente o analisador sintaacutetico possui w$ no buffer de entrada e s0 em sua pilha onde s0 representa o estado inicial

O analisador sintaacutetico entatildeo executa o algoritmo

59 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

[PSEUDO] seja a o primeiro siacutembolo de w$ while (1) Seja s o estado no topo da pilha if (ACTION[s a] = shift t) empilha t na pilha seja a o proacuteximo siacutembolo da entrada else if (ACTION[s a] = reduce Ararr β) desempilha siacutembolos |β| da pilha faccedila o estado t agora ser o topo da pilha empilhe GOTO[t A] na pilha imprima a produccedilatildeo Ararr β else if (ACTION[s a] = accept) pare a anaacutelise terminou

else chame uma rotina de recuperaccedilatildeo de erros

60 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR ndash Exemplo

A tabela do proacuteximo slide monstra as funccedilotildees ACTION e GOTO de uma tabela de anaacutelise LR para a gramaacutetica de expressatildeo estudada nesta aula e repetida aqui com produccedilotildees numeradas

Os coacutedigos para as accedilotildees satildeo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

(1) E rarr E + T

(2) E rarr T

(3) T rarr T F

(4) T rarr F

(5) F rarr ( E )

(6) F rarr id

1 Si significa avanccedila na entrada e empilha o estado i na pilha

2 Rj significa reduce segundo a produccedilatildeo de nuacutemero j

3 Acc significa accept

4 Entrada em branco significa error

61 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Estado ACTION

id + ( ) $

0 s5 s4

1 S6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4

5 r6 r6 r6 r6

6 s5 s4

7 s5 s4

8 r6 s11

9 s1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

GOTO

E T F

1 2 3

8 2 3

9 3

10

O valor de GOTO(s a) para o

terminal a estaacute em ACTION da

tabela de anaacutelise conectado agrave

accedilatildeo de transferecircncia sob a

entrada a e o estado s

O GOTO fornece o GOTO[s a]

para os natildeo-terminais A

Ok

Mas como eu consigo os dados

desta tabela

62 Geovane Griesang

A sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

FOLLOW(E) = FOLLOW(Ersquo) = ) $

FOLLOW(T) = FOLLOW(Trsquo) = + ) $

FOLLOW(F) = + ) $

63 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Construindo tabelas de anaacutelise SLR

Esse meacutetodo eacute o mais simples dos LRs Vamos nos referir a tabela de anaacutelise construiacuteda por este meacutetodo como uma tabela SLR e o analisador LR usando uma tabela SLR como um analisador sintaacutetico SLR

O meacutetodo SLR comeccedila com os itens LR(0) e autocircmatos LR(0) ou seja dada uma gramaacutetica G estendemos G para produzir Grsquo com o novo siacutembolo inicial Srsquo A partir de Grsquo construiacutemos C a coleccedilatildeo canocircnica de conj de itens para Grsquo junto com a funccedilatildeo GOTO

Para construir as entradas ACTION e GOTO da tabela de anaacutelise usando o algoritmo a seguir eacute preciso que conheccedilamos FOLLOW(A) para cada natildeo-terminal A de uma gramaacutetica

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 2: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

2 Geovane Griesang

Anaacutelise sintaacutetica

Data Conteuacutedo

23092013 3 Anaacutelise Sintaacutetica 31 analisadores ascendentes e descendentes

30092013 3 Anaacutelise Sintaacutetica 32 anaacutelise preditiva

07102013 3 Anaacutelise Sintaacutetica 33 anaacutelise de precedecircncia de operadores

14102013 3 Anaacutelise Sintaacutetica 34 anaacutelise LR

21102013 3 Anaacutelise Sintaacutetica 35 recuperaccedilatildeo de erros

28102013 3 Anaacutelise Sintaacutetica 36 geradores de analisadores sintaacuteticos

04112013 Atividade EaD 3 Anaacutelise Sintaacutetica continuaccedilatildeo

11112013 Prova Individual e sem consulta 2

3 Geovane Griesang

Anaacutelise sintaacutetica

Legenda

sum = sigma (somatoacuterio)

= delta

120576 = eacutepsilon

120582 = lambda

= alfa

= beta

= gamma

= xi

4 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR Left to Right with Rightmost derivation

Atualmente o tipo mais usado de analisadores sintaacutetico ascendentes eacute baseado em um conceito chamado LR(K)

L representa a escanccedilatildeo de entrada da esquerda para direita

R representa a construccedilotildees mais agrave direita ao reverso

k representa os siacutembolos a frente do fluxo de entrada que auxiliam nas decisotildees de anaacutelise

5 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR

Os analisadores sintaacuteticos LR satildeo controlados por uma tabela de modo muito parecido com os analisadores LL natildeo-recursivos

Para uma gramaacutetica ser LR eacute suficiente que uma analisador shift-reduce seja capaz de reconhecer o handle quando ele aparecer no topo da pilha

6 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR

O uso desse tipo de analisador eacute atraente por vaacuterios motivos

Os analisadores LR satildeo capazes de reconhecer praticamente todas as construccedilotildees sintaacuteticas definidas por Gramaacuteticas Livre de Contexto (GLC) da maioria das linguagens de programaccedilatildeo

Existem gramaacuteticas que natildeo satildeo LR mas geralmente elas podem ser evitadas para construccedilotildees tiacutepicas das ling de programaccedilatildeo

7 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR

O LR aleacutem de ser o meacutetodo de anaacutelise shift-reduce sem retrocesso mais geral pode ser implementado com o mesmo grau de eficiecircncia espaccedilo e tamanho que outro meacutetodos shift-reduce

Um analisador LR detecta um erro sintaacutetico tatildeo logo ele aparece na cadeia de entrada em uma escansatildeo da entrada da esquerda para direita

8 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR

A classe de gramaacuteticas que podem ser reconhecidas com o uso dos meacutetodos LR eacute um superconjunto proacuteprio da classe de gramaacuteticas que podem ser reconhecidas com os meacutetodos preditivos e LL

Para uma gramaacutetica ser LR(k) ela deve ser capaz de reconhecer a ocorrecircncia do lado direito de uma produccedilatildeo em forma sentencial mais agrave direita com k siacutembolos a frente da entrada

Esse requisito eacute menos rigoroso que aquele das gramaacuteticas LL(k)

9 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR

Relembrando

Na LL(k) para reconhecer o uso de uma produccedilatildeo o analisador vecirc apenas os k primeiros siacutembolos que o seu lado direito deriva

Assim natildeo eacute surpresa que as gramaacuteticas LR possam descrever mais linguagens do que as gramaacuteticas LL

Para uma gramaacutetica ser LR(k) ela deve ser capaz de reconhecer

a ocorrecircncia do lado direito de uma produccedilatildeo em forma sentencial

mais agrave direita com k siacutembolos a frente da entrada

10 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR

A principal desvantagem do meacutetodo LR estaacute relacionada com a geraccedilatildeo do analisador sua construccedilatildeo a matildeo p uma linguagem de programaccedilatildeo tiacutepica eacute muito trabalhosa

Portanto eacute necessaacuterio o uso de uma ferramenta especializada um gerador de analisador LR

Felizmente muitos desses geradores estatildeo disponiacuteveis como por exemplo o Yacc Esse gerador recebe como entrada um GLC e produz automaticamente como saiacuteda um analisador sintaacutetico para esta gramaacutetica

11 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Reduccedilotildees - Exemplo

A derivaccedilatildeo segue a seguinte sequencia de cadeias

id id F id T id T F T E

Entrada id id

Neste ponto temos duas opccedilotildees de reduccedilatildeo podemos reduzir a cadeia T para E segundo a produccedilatildeo E rarr T e a cadeia consistindo no segundo id que representa o lado direito de F rarr id Escolhemos a segunda opccedilatildeo e reduzimos id para F produzindo a cadeia T F

id id

F rarr id F id

T rarr F T id

E rarr T E id ou F rarr id T F

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

12 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Itens e o autocircmato LR

Como o analisador sintaacutetico shift-reduce sabe quando transferir p a pilha e quando reduzir

Ex Dado o conteuacutedo de pilha $T e o proacuteximo siacutembolo da entrada como o analisador sabe que T no topo da pilha natildeo eacute um handle de modo que a accedilatildeo apropriada seja transferir o ldquordquo para a pilha e natildeo reduzir T para E

Entrada id id E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

id id

F rarr id F id

T rarr F T id

E rarr T E id ou F rarr id T F

13 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Itens e o autocircmato LR

Um analisador LR decide sobre as accedilotildees shift-reduce mantendo estados para acompanhar onde se encontra a anaacutelise

Os estados representam conjuntos de ldquoitensrdquo

Um item LR(0) de uma gramaacutetica G eacute a produccedilatildeo de G com um ponto em alguma posiccedilatildeo do seu lado direito

A produccedilatildeo A rarr XYZ gera os quatro itens A rarr XYZ

A rarr XYZ

A rarr XYZ

A rarr XYZ A produccedilatildeo A rarr 120576 gera apenas um item A rarr

14 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR - Itens e o autocircmato LR Representaccedilatildeo dos conjuntos de itens

Um gerador de analisadores sintaacuteticos que produz um analisador ascendente

deve representar os itens e conjunto de itens convenientemente

Um item pode ser representado por um par de inteiros onde o primeiro

representa o nuacutemero de uma das produccedilotildees da gramaacutetica subjacente e o

segundo indica a posiccedilatildeo do ponto

Conjuntos de itens podem ser representados por uma lista desses pares

A rarr XYZ

A rarr XYZ

A rarr XYZ

A rarr XYZ

15 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR - Itens e o autocircmato LR Representaccedilatildeo dos conjuntos de itens

O conjunto de itens necessaacuterios frequentemente incluem itens de

ldquofechamentordquo (ldquoclosurerdquo) onde o ponto estaacute no iniacutecio do corpo

Esses itens sempre podem ser reconstruiacutedos a partir dos outros itens no

conjunto e natildeo temos de incluiacute-los na lista

A rarr XYZ

A rarr XYZ

A rarr XYZ

A rarr XYZ

16 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Itens e o autocircmato LR

Um item indica quanto de uma produccedilatildeo jaacute foi visto em determinado ponto no processo de reconhecimento sintaacutetico Ex

O item ArarrXYZ indica o iniacutecio da busca de uma cadeia derivaacutevel de XYZ na entrada

O item A rarr XYZ indica que no ponto atual onde se encontra a anaacutelise uma cadeia X jaacute foi encontrada e que esperamos em seguida ver uma cadeia derivaacutevel de YZ

O item A rarr XYZ indica o fim da busca ou seja jaacute derivamos o lado direito XYZ de A e que pode ser o momento de reduzir XYZ para A

A rarr XYZ

A rarr XYZ

A rarr XYZ

A rarr XYZ

17 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Itens e o autocircmato LR

Uma coleccedilatildeo de conj de itens LR(0) chamada coleccedilatildeo LR(0) canocircnica oferece a base para construccedilatildeo de um autocircmato finito determinista que eacute usado para dirigir as decisotildees durante a anaacutelise

Esse autocircmato eacute chamado de autocircmato LR(0)

Em particular cada estado do autocircmato LR(0) representa um conjunto de itens na coleccedilatildeo LR(0) canocircnica

18 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Exemplo Para construir a coleccedilatildeo LR(0) canocircnica para uma gramaacutetica definimos uma gramaacutetica estendida e duas funccedilotildees

funccedilatildeo de fechamento (function CLOSURE)

funccedilatildeo de transiccedilatildeo (function GOTO)

Se G eacute uma gramaacutetica com siacutembolo inicial S entatildeo Grsquo eacute uma gramaacutetica estendida para G com o novo siacutembolo inicial Srsquo e a produccedilatildeo Srsquo rarr S

O objetivo dessa nova produccedilatildeo eacute simplificar a identificaccedilatildeo de quando o reconhecedor sintaacutetico deve parar e anunciar a aceitaccedilatildeo da cadeia de entrada

Ou seja a aceitaccedilatildeo ocorre se e somente se o analisador estiver para reduzir por Srsquo rarr S

19 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Se I eacute um conj de itens para a gramaacutetica G entatildeo CLOSURE(I) eacute o conj de itens construiacutedos a partir de I pelas duas regras

1 Inicialmente acrescente todo item de I no CLOSURE(I)

2 Se A rarr αBβ estaacute em CLOSEURE(I) e B rarr γ eacute uma produccedilatildeo entatildeo adicione o item B rarr γ em CLOSURE(I) se ele ainda natildeo estaacute laacute

Ix

A rarr αBβ

B rarr γ

20 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Intuitivamente A rarr αBβ em CLOSURE(I) indica que em algum ponto no processo de reconhecimento os itens correspondentes as produccedilotildees-B devem ser acrescentados para dirigir a busca por B

A subcadeia derivaacutevel de Bβ na entrada teraacute um prefixo derivaacutevel de B aplicando umas das produccedilotildees-B

Portanto incluiacutemos itens para todas as produccedilotildees-B ou seja se B rarr γ eacute uma produccedilatildeo tambeacutem incluiacutemos B rarr γ em CLOSURE(I) este processo eacute conhecido como fechamento de estado

Ix

A rarr αBβ

B rarr γ

21 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

P ver como o fechamento de um estado eacute computado Ersquo rarr E eacute colocado em CLOSURE(I) pela regra (1)

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Acrescente todo item de I no CLOSURE(I)

I0

Ersquo rarr E

22 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Como existe um natildeo-terminal E agrave direita de um ponto acrescentamos as produccedilotildees-E com pontos mais agrave esquerda do lado direito dos itens ex

E rarr E + T e E rarr T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

23 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Agora existe um natildeo-terminal T imediatamente agrave direita de um ponto no segundo item incluiacutedo (E rarr T) de modo que acrescentamos as produccedilotildees-T T rarr T F e T rarr F

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

24 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Em seguida o natildeo-terminal F agrave direita de um ponto nos forccedila a incluir os itens Frarr (E) e F rarr id mas nenhum outro item precisa ser acrescentado

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr (E)

F rarr id

25 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Um modo conveniente de implementar a funccedilatildeo de fechamento (closure) eacute manter um arranjo booleano added indexado pelos natildeo-terminais de G de modo que added[B] seja definido como verdadeiro (true) se e quando incluirmos o item B rarr γ para cada produccedilatildeo-B B rarr γ

SetOfItems CLOSURE(I)

J=I

repeat

for (cada item A rarr αBβ em J)

for (cada produccedilatildeo B rarr γ de G)

if (B rarr γ natildeo estaacute em J)

Adicione B rarr γ em J

until mais nenhum item seja adicionado a J em um passo do loop

return J

Ix

A rarr αBβ

B rarr γ

26 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Observe que se uma produccedilatildeo-B for incluiacuteda no fechamento de I com o ponto mais agrave esquerda do seu lado direito entatildeo todas as produccedilotildees-B seratildeo igualmente incluiacutedas no fechamento Ex A rarr αBβ

Uma lista de natildeo-terminais B cujas produccedilotildees foram incluiacutedas dessa forma eacute suficiente Dividimos todos os conjuntos de itens de interesse em duas classes

1 Itens de base (kernel) o item inicial Srsquo rarr S e todos itens cujos pontos natildeo estatildeo mais agrave esquerda em seus lados direitos

2 Itens que natildeo satildeo de base todos os itens com seus pontos mais agrave esquerda em seus lados direitos exceto Srsquo rarr S Ex B rarr γ

Ix

A rarr αBβ

B rarr γ

27 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Aleacutem do mais cada conjunto de itens de interesse eacute formado a partir do fechamento de um conjunto de itens de base

Os itens adicionados no fechamento nunca podem ser itens de base naturalmente

Assim podemos representar os conjuntos de itens em que realmente estamos interessados com pouca memoacuteria se desprezarmos todos que natildeo satildeo itens de base sabendo que esses podem ser gerados novamente no processo de fechamento Ex B rarr γ exceto Srsquo rarr S

Ix

A rarr αBβ

B rarr γ

28 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

A segunda funccedilatildeo usada na construccedilatildeo da coleccedilatildeo canocircnica LR(0) eacute a funccedilatildeo de transiccedilatildeo GOTO(I X) onde I eacute o conjunto de itens de base e X eacute um siacutembolo da gramaacutetica

GOTO(I X) eacute definido como fechamento do conjunto de todos os itens [ArarrαXβ] tais que

[A rarr αXβ] estaacute em I

A funccedilatildeo de transiccedilatildeo GOTO eacute utilizada para definir as transaccedilotildees no autocircmato LR(0) para uma gramaacutetica

I1

Ersquo rarr E

E rarr E + T

I0

Ersquo rarr E

E rarr E + T

E

29 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Estados do autocircmato correspondem aos conjuntos de itens e GOTO(I +) especifica a transaccedilatildeo do estado I para um novo estado I sob a entrada X

Se I representa o conjunto com dois itens [Ersquo rarr E][E rarr E+T] entatildeo GOTO(I +) conteacutem os itens

Calculamos GOTO(I +) examinando os itens em I com o + imediatamente agrave direita do ponto

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

A rarr αXβ

A rarr αXβ

I1

Ersquo rarr E

E rarr E + T +

I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

30 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Calculamos GOTO(I +) examinando os itens em I com o + imediatamente agrave direita do ponto

O item Ersquo rarr E natildeo eacute desse tipo mas Ersquo rarr E + T sim

Movemos o ponto para imediatamente agrave direita de + e obtemos ErarrE + T

e entatildeo calculamos o fechamento desse conjunto unitaacuterio

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Itens em I

[Ersquo rarr E]

[E rarr E+T]

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I1

Ersquo rarr E

E rarr E + T +

31 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Agora estamos prontos para construir C a coleccedilatildeo canocircnica de conjuntos

de itens LR(0) para uma gramaacutetica estendida Grsquo

void Itens(Grsquo)

C = CLOSURE([Srsquo rarr S])

repeat

for (cada conjunto de itens I em C)

for (cada siacutembolo da gramaacutetica X)

if (GOTO(I X) natildeo eacute vazio e natildeo estaacute em C)

Adicione GOTO(I X) em C

until nenhum novo conjunto de itens seja adicionado em C em uma rodada

32 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

A ideia central por traacutes da anaacutelise ldquoLR Simplesrdquo ou SLR eacute a construccedilatildeo do autocircmato LR(0) a partir da gramaacutetica dada

Os estados desses autocircmatos satildeo os conjuntos de itens da coleccedilatildeo LR canocircnica e as transiccedilotildees satildeo dadas pela funccedilatildeo de transiccedilatildeo GOTO

O estado inicial do autocircmato LR eacute dado por CLOSURE([Srsquo rarr S]) onde Srsquo eacute o siacutembolo inicial da gramaacutetica estendida

Todos os estados satildeo estados de aceitaccedilatildeo Nos referimos ao ldquoestado jrdquo como o estado correspondente ao conjunto de itens Ij

33 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E

Aceitar $

I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

34 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Como os autocircmatos LR(0) podem ajudar-nos a decidir por uma das accedilotildees shift-reduce (veja as decisotildees entre shift-reduce a seguir)

Suponha que a cadeia γ dos siacutembolos da gramaacutetica leve o autocircmato LR(0) do estado inicial 0 para algum estado j

Desta forma avance sobre o proacuteximo siacutembolo a se o estado j possuir uma transaccedilatildeo sob a

Caso contraacuterio escolha reduzir

Os itens no estado j nos diratildeo qual produccedilatildeo usar

35 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

O algoritmo LR abaixo utiliza sua pilha para acompanhar os estados e tambeacutem os siacutembolos da gramaacutetica

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Na verdade

O siacutembolo da gramaacutetica pode ser

recuperado a parir do estado de

modo que a pilha possua estados

ao inveacutes de siacutembolos

36 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Usamos uma pilha

p conter os estados

Os siacutembolos que correspondem aos estados estatildeo na coluna ldquoSiacutembolosrdquo

A pilha da linha (1) tecircm o estado inicial 0 do autocircmato

37 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Portanto fazemos a transferecircncia

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

O siacutembolo da linha 1 eacute o marcador de fundo da pilha $

O proacuteximo siacutembolo de entrada eacute id e o estado 0 tem uma transiccedilatildeo sob id p o estado 5

38 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

A partir do item [F rarr id ] no estado 5 efetuamos uma reduccedilatildeo segundo a produccedilatildeo F rarr id

Na linha 2 o estado 5 eacute empilhado (siacutembolo id)

I5

F rarr id

Natildeo haacute transiccedilatildeo a partir do estado 5 sob a entrada por isso reduzimos

39 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o lado direito da produccedilatildeo da linha (2) eacute id correspondendo ao estado 5 e seu lado direito eacute o F

Com os estados ao desempilhar o estado 5 correspondendo ao siacutembolo id o estado 0 passa a ser o topo

0 F $

40 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id I3

T rarr F

F

Procuramos uma transiccedilatildeo sob F o lado esquerdo da produccedilatildeo

0 F $

O estado 0 possui uma transiccedilatildeo em F p o estado 3 onde empilhamos o estado 3 com o siacutembolo F Ver linha (3)

3

41 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I3

T rarr F

Natildeo haacute transiccedilatildeo a partir do estado 3 sob a entrada por isso reduzimos

A partir do item [T rarr F ] no estado 3 efetuamos uma reduccedilatildeo segundo a produccedilatildeo T rarr F

3

0

T $

42 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

I7

T rarr T F

F rarr ( E )

F rarr id

id

Como outro exemplo considere a linha (5) com o estado 7 referente ao siacutembolo no topo da pilha

Esse estado 7 possui uma transaccedilatildeo para o estado 5 sob a entrada id de modo que empilhamos o estado 5

43 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o estado 5 natildeo possui transiccedilotildees de modo que reduzimos segundo F rarr id

quando removemos da pilha o estado 5 correspondente ao lado direito id o estado 7 passa a ser o topo da pilha

44 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Como o estado 7 possui uma transaccedilatildeo sob F para o estado 10 empilhamos o estado 10 (siacutembolo F)

I7

T rarr T F

F rarr ( E )

F rarr id

I10

T rarr T F

F

45 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O algoritmo eacute o mesmo para todos

os analisadores sintaacuteticos LR

Soacute a tabela de anaacutelise eacute diferente

de um analisador para o outro

O algoritmo lecirc caracteres de um

buffer de entrada um de cada vez

46 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O analisador sintaacutetico shift-reduce

transfere um siacutembolo para pilha jaacute

o analisador sintaacutetico LR transfere

um estado

Cada estado resume a informaccedilatildeo

contida na pilha abaixo dele

47 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

A pilha conteacutem uma sequencia de

estados s0s1 sm onde sm estaacute

no topo

No meacutetodo SLR a pilha conteacutem

estados do autocircmato LR(0)

Por construccedilatildeo a cada estado eacute

associado 1 siacutembolo da gramaacutetica

48 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Lembrem-se de que os estados

correspondem a conj de itens e

que haacute uma transiccedilatildeo do estado i

para o estado j se GOTO(Ii X) = Ij

Todas as transiccedilotildees para o estado

j devem ser para o mesmo siacutembolo

da gramaacutetica X

49 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

Sm

Sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Desta forma cada estado exceto

o estado inicial 0 possui um uacutenico

siacutembolo da gramaacutetica associado a

ele

50 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

A tabela LR consiste em duas partes ACTION uma funccedilatildeo de accedilatildeo de anaacutelise e GOTO uma funccedilatildeo de transiccedilatildeo

1 A funccedilatildeo ACTION recebe como argumentos um estado i e um estado a (ou $) O valor de ACTION(i a) pode ter um dos quatro formatos

a) Shift j onde j eacute um estado

A accedilatildeo tomada pelo analisador sintaacutetico efetivamente transfere a entrada a para a pilha mas usa o estado j para representar a

51 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

b) Reduce Ararr β A accedilatildeo do analisador efetivamente reduz β no topo da pilha para A o lado esquerdo da produccedilatildeo

c) Accept O analisador aceita a entrada e termina a anaacutelise

d) Error O analisador descobre um erro em sua entrada passa o controle p o recuperador de erro que toma alguma accedilatildeo corretiva

2 Estendemos a funccedilatildeo GOTO definida sobre um conjunto de itens para os estados se GOTO(Ii A) = Ij entatildeo GOTO tambeacutem mapeia um estado i e um natildeo-terminal A para o estado j

52 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

Para descrever o comportamento de uma analisador LR eacute recomendaacutevel ter uma notaccedilatildeo representado o estado completo do analisador sua pilha e a entrada restante

Uma configuraccedilatildeo p um analisador LR eacute um par (s0s1sm aiai+1an $) O primeiro componente eacute o conteuacutedo da pilha com o topo agrave direita e o segundo componente representa a entrada restante

Essa configuraccedilatildeo representa a seguinte forma sentencial agrave direita (X0X1Xmaiai+1an) Assim como faria um analisador shift-reduce

53 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

A uacutenica diferenccedila eacute que em inveacutes de siacutembolos da gramaacutetica a pilha conteacutem estados a partir dos quais os siacutembolos da gramaacutetica podem ser recuperados

Ou seja Xi eacute o siacutembolo da gramaacutetica representado pelo estado si

Observe que s0 o estado inicial do analisador sintaacutetico natildeo representa um siacutembolo da gramaacutetica e serve como marcador de fundo da pilha aleacutem de desempenhar um papel importante na anaacutelise

54 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

O proacuteximo movimento do analisador a partir da configuraccedilatildeo dada eacute determinado pela leitura de ai o siacutembolo de entrada corrente e sm o estado do topo da pilha e entatildeo consultando a entrada ACTION[sm ai] na tabela de accedilatildeo de anaacutelise

As configuraccedilotildees restantes apoacutes cada um dos quatro tipos de movimentaccedilatildeo satildeo as seguintes

1 Se ACTION[Sm ai] = shift s o analisador sintaacutetico executa um movimento de transferecircncia (shift move) ele empilha o estado s e avanccedila da entrada resultando na configuraccedilatildeo (s0s1 sm ai+1an $)

55 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2 Se ACTION[Sm ai]=reduce Ararrβ entatildeo o analisador sintaacutetico executa um movimento de reduzir (reduce move) resultando na configuraccedilatildeo (s0s1 sm-rs aiai+1an $)

onde r eacute o comprimento de β e s = GOTO[sm-r A]

Aqui o analisador sintaacutetico incialmente desempilhou os r siacutembolos de estado da pilha expondo o estado sm-r

O analisador sintaacutetico entatildeo empilhou s a entrada para GOTO[sm-r A] na pilha O siacutembolo corrente da entrada natildeo eacute alterado em um movimento de reduzir

56 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2

Para os LR que construiremos Xm-r+1Xm a sequencia de siacutembolos da gramaacutetica correspondendo aos estados retirados da pilha sempre iratildeo casar com β o lado direito da produccedilatildeo sendo reduzida

A saiacuteda de um analisador LR eacute gerada apoacutes um movimento de reduzir executando a accedilatildeo semacircntica associada agrave produccedilatildeo que estaacute sendo reduzida

No momento vamos considerar que a saiacuteda consiste soacute na impressatildeo da produccedilatildeo de reduccedilatildeo

57 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

3 Se ACTION[sm ai] = accept a anaacutelise estaacute concluiacuteda

4 Se ACTION[sm ai] = error o analisador sintaacutetico descobriu um erro e ativa uma rotina para recuperaccedilatildeo de erro

Todos os analisadores sintaacuteticos LR se comportam dessa maneira

A uacutenica diferenccedila entre eles diz respeito a informaccedilatildeo contida nos campos ACTION e GOTO da tabela de anaacutelise

O algoritmo de anaacutelise LR eacute resumido nos proacuteximos slides

58 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

Entrada Uma cadeia de entrada w e uma tabela de anaacutelise com funccedilotildees ACTION e GOTO para uma gramaacutetica G

Saiacuteda Se w estaacute em L(G) os passos os passos de uma reduccedilatildeo de uma anaacutelise ascendente para w

Caso contraacuterio uma indicaccedilatildeo de erro

Meacutetodo Inicialmente o analisador sintaacutetico possui w$ no buffer de entrada e s0 em sua pilha onde s0 representa o estado inicial

O analisador sintaacutetico entatildeo executa o algoritmo

59 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

[PSEUDO] seja a o primeiro siacutembolo de w$ while (1) Seja s o estado no topo da pilha if (ACTION[s a] = shift t) empilha t na pilha seja a o proacuteximo siacutembolo da entrada else if (ACTION[s a] = reduce Ararr β) desempilha siacutembolos |β| da pilha faccedila o estado t agora ser o topo da pilha empilhe GOTO[t A] na pilha imprima a produccedilatildeo Ararr β else if (ACTION[s a] = accept) pare a anaacutelise terminou

else chame uma rotina de recuperaccedilatildeo de erros

60 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR ndash Exemplo

A tabela do proacuteximo slide monstra as funccedilotildees ACTION e GOTO de uma tabela de anaacutelise LR para a gramaacutetica de expressatildeo estudada nesta aula e repetida aqui com produccedilotildees numeradas

Os coacutedigos para as accedilotildees satildeo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

(1) E rarr E + T

(2) E rarr T

(3) T rarr T F

(4) T rarr F

(5) F rarr ( E )

(6) F rarr id

1 Si significa avanccedila na entrada e empilha o estado i na pilha

2 Rj significa reduce segundo a produccedilatildeo de nuacutemero j

3 Acc significa accept

4 Entrada em branco significa error

61 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Estado ACTION

id + ( ) $

0 s5 s4

1 S6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4

5 r6 r6 r6 r6

6 s5 s4

7 s5 s4

8 r6 s11

9 s1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

GOTO

E T F

1 2 3

8 2 3

9 3

10

O valor de GOTO(s a) para o

terminal a estaacute em ACTION da

tabela de anaacutelise conectado agrave

accedilatildeo de transferecircncia sob a

entrada a e o estado s

O GOTO fornece o GOTO[s a]

para os natildeo-terminais A

Ok

Mas como eu consigo os dados

desta tabela

62 Geovane Griesang

A sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

FOLLOW(E) = FOLLOW(Ersquo) = ) $

FOLLOW(T) = FOLLOW(Trsquo) = + ) $

FOLLOW(F) = + ) $

63 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Construindo tabelas de anaacutelise SLR

Esse meacutetodo eacute o mais simples dos LRs Vamos nos referir a tabela de anaacutelise construiacuteda por este meacutetodo como uma tabela SLR e o analisador LR usando uma tabela SLR como um analisador sintaacutetico SLR

O meacutetodo SLR comeccedila com os itens LR(0) e autocircmatos LR(0) ou seja dada uma gramaacutetica G estendemos G para produzir Grsquo com o novo siacutembolo inicial Srsquo A partir de Grsquo construiacutemos C a coleccedilatildeo canocircnica de conj de itens para Grsquo junto com a funccedilatildeo GOTO

Para construir as entradas ACTION e GOTO da tabela de anaacutelise usando o algoritmo a seguir eacute preciso que conheccedilamos FOLLOW(A) para cada natildeo-terminal A de uma gramaacutetica

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 3: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

3 Geovane Griesang

Anaacutelise sintaacutetica

Legenda

sum = sigma (somatoacuterio)

= delta

120576 = eacutepsilon

120582 = lambda

= alfa

= beta

= gamma

= xi

4 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR Left to Right with Rightmost derivation

Atualmente o tipo mais usado de analisadores sintaacutetico ascendentes eacute baseado em um conceito chamado LR(K)

L representa a escanccedilatildeo de entrada da esquerda para direita

R representa a construccedilotildees mais agrave direita ao reverso

k representa os siacutembolos a frente do fluxo de entrada que auxiliam nas decisotildees de anaacutelise

5 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR

Os analisadores sintaacuteticos LR satildeo controlados por uma tabela de modo muito parecido com os analisadores LL natildeo-recursivos

Para uma gramaacutetica ser LR eacute suficiente que uma analisador shift-reduce seja capaz de reconhecer o handle quando ele aparecer no topo da pilha

6 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR

O uso desse tipo de analisador eacute atraente por vaacuterios motivos

Os analisadores LR satildeo capazes de reconhecer praticamente todas as construccedilotildees sintaacuteticas definidas por Gramaacuteticas Livre de Contexto (GLC) da maioria das linguagens de programaccedilatildeo

Existem gramaacuteticas que natildeo satildeo LR mas geralmente elas podem ser evitadas para construccedilotildees tiacutepicas das ling de programaccedilatildeo

7 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR

O LR aleacutem de ser o meacutetodo de anaacutelise shift-reduce sem retrocesso mais geral pode ser implementado com o mesmo grau de eficiecircncia espaccedilo e tamanho que outro meacutetodos shift-reduce

Um analisador LR detecta um erro sintaacutetico tatildeo logo ele aparece na cadeia de entrada em uma escansatildeo da entrada da esquerda para direita

8 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR

A classe de gramaacuteticas que podem ser reconhecidas com o uso dos meacutetodos LR eacute um superconjunto proacuteprio da classe de gramaacuteticas que podem ser reconhecidas com os meacutetodos preditivos e LL

Para uma gramaacutetica ser LR(k) ela deve ser capaz de reconhecer a ocorrecircncia do lado direito de uma produccedilatildeo em forma sentencial mais agrave direita com k siacutembolos a frente da entrada

Esse requisito eacute menos rigoroso que aquele das gramaacuteticas LL(k)

9 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR

Relembrando

Na LL(k) para reconhecer o uso de uma produccedilatildeo o analisador vecirc apenas os k primeiros siacutembolos que o seu lado direito deriva

Assim natildeo eacute surpresa que as gramaacuteticas LR possam descrever mais linguagens do que as gramaacuteticas LL

Para uma gramaacutetica ser LR(k) ela deve ser capaz de reconhecer

a ocorrecircncia do lado direito de uma produccedilatildeo em forma sentencial

mais agrave direita com k siacutembolos a frente da entrada

10 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR

A principal desvantagem do meacutetodo LR estaacute relacionada com a geraccedilatildeo do analisador sua construccedilatildeo a matildeo p uma linguagem de programaccedilatildeo tiacutepica eacute muito trabalhosa

Portanto eacute necessaacuterio o uso de uma ferramenta especializada um gerador de analisador LR

Felizmente muitos desses geradores estatildeo disponiacuteveis como por exemplo o Yacc Esse gerador recebe como entrada um GLC e produz automaticamente como saiacuteda um analisador sintaacutetico para esta gramaacutetica

11 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Reduccedilotildees - Exemplo

A derivaccedilatildeo segue a seguinte sequencia de cadeias

id id F id T id T F T E

Entrada id id

Neste ponto temos duas opccedilotildees de reduccedilatildeo podemos reduzir a cadeia T para E segundo a produccedilatildeo E rarr T e a cadeia consistindo no segundo id que representa o lado direito de F rarr id Escolhemos a segunda opccedilatildeo e reduzimos id para F produzindo a cadeia T F

id id

F rarr id F id

T rarr F T id

E rarr T E id ou F rarr id T F

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

12 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Itens e o autocircmato LR

Como o analisador sintaacutetico shift-reduce sabe quando transferir p a pilha e quando reduzir

Ex Dado o conteuacutedo de pilha $T e o proacuteximo siacutembolo da entrada como o analisador sabe que T no topo da pilha natildeo eacute um handle de modo que a accedilatildeo apropriada seja transferir o ldquordquo para a pilha e natildeo reduzir T para E

Entrada id id E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

id id

F rarr id F id

T rarr F T id

E rarr T E id ou F rarr id T F

13 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Itens e o autocircmato LR

Um analisador LR decide sobre as accedilotildees shift-reduce mantendo estados para acompanhar onde se encontra a anaacutelise

Os estados representam conjuntos de ldquoitensrdquo

Um item LR(0) de uma gramaacutetica G eacute a produccedilatildeo de G com um ponto em alguma posiccedilatildeo do seu lado direito

A produccedilatildeo A rarr XYZ gera os quatro itens A rarr XYZ

A rarr XYZ

A rarr XYZ

A rarr XYZ A produccedilatildeo A rarr 120576 gera apenas um item A rarr

14 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR - Itens e o autocircmato LR Representaccedilatildeo dos conjuntos de itens

Um gerador de analisadores sintaacuteticos que produz um analisador ascendente

deve representar os itens e conjunto de itens convenientemente

Um item pode ser representado por um par de inteiros onde o primeiro

representa o nuacutemero de uma das produccedilotildees da gramaacutetica subjacente e o

segundo indica a posiccedilatildeo do ponto

Conjuntos de itens podem ser representados por uma lista desses pares

A rarr XYZ

A rarr XYZ

A rarr XYZ

A rarr XYZ

15 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR - Itens e o autocircmato LR Representaccedilatildeo dos conjuntos de itens

O conjunto de itens necessaacuterios frequentemente incluem itens de

ldquofechamentordquo (ldquoclosurerdquo) onde o ponto estaacute no iniacutecio do corpo

Esses itens sempre podem ser reconstruiacutedos a partir dos outros itens no

conjunto e natildeo temos de incluiacute-los na lista

A rarr XYZ

A rarr XYZ

A rarr XYZ

A rarr XYZ

16 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Itens e o autocircmato LR

Um item indica quanto de uma produccedilatildeo jaacute foi visto em determinado ponto no processo de reconhecimento sintaacutetico Ex

O item ArarrXYZ indica o iniacutecio da busca de uma cadeia derivaacutevel de XYZ na entrada

O item A rarr XYZ indica que no ponto atual onde se encontra a anaacutelise uma cadeia X jaacute foi encontrada e que esperamos em seguida ver uma cadeia derivaacutevel de YZ

O item A rarr XYZ indica o fim da busca ou seja jaacute derivamos o lado direito XYZ de A e que pode ser o momento de reduzir XYZ para A

A rarr XYZ

A rarr XYZ

A rarr XYZ

A rarr XYZ

17 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Itens e o autocircmato LR

Uma coleccedilatildeo de conj de itens LR(0) chamada coleccedilatildeo LR(0) canocircnica oferece a base para construccedilatildeo de um autocircmato finito determinista que eacute usado para dirigir as decisotildees durante a anaacutelise

Esse autocircmato eacute chamado de autocircmato LR(0)

Em particular cada estado do autocircmato LR(0) representa um conjunto de itens na coleccedilatildeo LR(0) canocircnica

18 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Exemplo Para construir a coleccedilatildeo LR(0) canocircnica para uma gramaacutetica definimos uma gramaacutetica estendida e duas funccedilotildees

funccedilatildeo de fechamento (function CLOSURE)

funccedilatildeo de transiccedilatildeo (function GOTO)

Se G eacute uma gramaacutetica com siacutembolo inicial S entatildeo Grsquo eacute uma gramaacutetica estendida para G com o novo siacutembolo inicial Srsquo e a produccedilatildeo Srsquo rarr S

O objetivo dessa nova produccedilatildeo eacute simplificar a identificaccedilatildeo de quando o reconhecedor sintaacutetico deve parar e anunciar a aceitaccedilatildeo da cadeia de entrada

Ou seja a aceitaccedilatildeo ocorre se e somente se o analisador estiver para reduzir por Srsquo rarr S

19 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Se I eacute um conj de itens para a gramaacutetica G entatildeo CLOSURE(I) eacute o conj de itens construiacutedos a partir de I pelas duas regras

1 Inicialmente acrescente todo item de I no CLOSURE(I)

2 Se A rarr αBβ estaacute em CLOSEURE(I) e B rarr γ eacute uma produccedilatildeo entatildeo adicione o item B rarr γ em CLOSURE(I) se ele ainda natildeo estaacute laacute

Ix

A rarr αBβ

B rarr γ

20 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Intuitivamente A rarr αBβ em CLOSURE(I) indica que em algum ponto no processo de reconhecimento os itens correspondentes as produccedilotildees-B devem ser acrescentados para dirigir a busca por B

A subcadeia derivaacutevel de Bβ na entrada teraacute um prefixo derivaacutevel de B aplicando umas das produccedilotildees-B

Portanto incluiacutemos itens para todas as produccedilotildees-B ou seja se B rarr γ eacute uma produccedilatildeo tambeacutem incluiacutemos B rarr γ em CLOSURE(I) este processo eacute conhecido como fechamento de estado

Ix

A rarr αBβ

B rarr γ

21 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

P ver como o fechamento de um estado eacute computado Ersquo rarr E eacute colocado em CLOSURE(I) pela regra (1)

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Acrescente todo item de I no CLOSURE(I)

I0

Ersquo rarr E

22 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Como existe um natildeo-terminal E agrave direita de um ponto acrescentamos as produccedilotildees-E com pontos mais agrave esquerda do lado direito dos itens ex

E rarr E + T e E rarr T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

23 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Agora existe um natildeo-terminal T imediatamente agrave direita de um ponto no segundo item incluiacutedo (E rarr T) de modo que acrescentamos as produccedilotildees-T T rarr T F e T rarr F

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

24 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Em seguida o natildeo-terminal F agrave direita de um ponto nos forccedila a incluir os itens Frarr (E) e F rarr id mas nenhum outro item precisa ser acrescentado

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr (E)

F rarr id

25 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Um modo conveniente de implementar a funccedilatildeo de fechamento (closure) eacute manter um arranjo booleano added indexado pelos natildeo-terminais de G de modo que added[B] seja definido como verdadeiro (true) se e quando incluirmos o item B rarr γ para cada produccedilatildeo-B B rarr γ

SetOfItems CLOSURE(I)

J=I

repeat

for (cada item A rarr αBβ em J)

for (cada produccedilatildeo B rarr γ de G)

if (B rarr γ natildeo estaacute em J)

Adicione B rarr γ em J

until mais nenhum item seja adicionado a J em um passo do loop

return J

Ix

A rarr αBβ

B rarr γ

26 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Observe que se uma produccedilatildeo-B for incluiacuteda no fechamento de I com o ponto mais agrave esquerda do seu lado direito entatildeo todas as produccedilotildees-B seratildeo igualmente incluiacutedas no fechamento Ex A rarr αBβ

Uma lista de natildeo-terminais B cujas produccedilotildees foram incluiacutedas dessa forma eacute suficiente Dividimos todos os conjuntos de itens de interesse em duas classes

1 Itens de base (kernel) o item inicial Srsquo rarr S e todos itens cujos pontos natildeo estatildeo mais agrave esquerda em seus lados direitos

2 Itens que natildeo satildeo de base todos os itens com seus pontos mais agrave esquerda em seus lados direitos exceto Srsquo rarr S Ex B rarr γ

Ix

A rarr αBβ

B rarr γ

27 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Aleacutem do mais cada conjunto de itens de interesse eacute formado a partir do fechamento de um conjunto de itens de base

Os itens adicionados no fechamento nunca podem ser itens de base naturalmente

Assim podemos representar os conjuntos de itens em que realmente estamos interessados com pouca memoacuteria se desprezarmos todos que natildeo satildeo itens de base sabendo que esses podem ser gerados novamente no processo de fechamento Ex B rarr γ exceto Srsquo rarr S

Ix

A rarr αBβ

B rarr γ

28 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

A segunda funccedilatildeo usada na construccedilatildeo da coleccedilatildeo canocircnica LR(0) eacute a funccedilatildeo de transiccedilatildeo GOTO(I X) onde I eacute o conjunto de itens de base e X eacute um siacutembolo da gramaacutetica

GOTO(I X) eacute definido como fechamento do conjunto de todos os itens [ArarrαXβ] tais que

[A rarr αXβ] estaacute em I

A funccedilatildeo de transiccedilatildeo GOTO eacute utilizada para definir as transaccedilotildees no autocircmato LR(0) para uma gramaacutetica

I1

Ersquo rarr E

E rarr E + T

I0

Ersquo rarr E

E rarr E + T

E

29 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Estados do autocircmato correspondem aos conjuntos de itens e GOTO(I +) especifica a transaccedilatildeo do estado I para um novo estado I sob a entrada X

Se I representa o conjunto com dois itens [Ersquo rarr E][E rarr E+T] entatildeo GOTO(I +) conteacutem os itens

Calculamos GOTO(I +) examinando os itens em I com o + imediatamente agrave direita do ponto

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

A rarr αXβ

A rarr αXβ

I1

Ersquo rarr E

E rarr E + T +

I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

30 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Calculamos GOTO(I +) examinando os itens em I com o + imediatamente agrave direita do ponto

O item Ersquo rarr E natildeo eacute desse tipo mas Ersquo rarr E + T sim

Movemos o ponto para imediatamente agrave direita de + e obtemos ErarrE + T

e entatildeo calculamos o fechamento desse conjunto unitaacuterio

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Itens em I

[Ersquo rarr E]

[E rarr E+T]

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I1

Ersquo rarr E

E rarr E + T +

31 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Agora estamos prontos para construir C a coleccedilatildeo canocircnica de conjuntos

de itens LR(0) para uma gramaacutetica estendida Grsquo

void Itens(Grsquo)

C = CLOSURE([Srsquo rarr S])

repeat

for (cada conjunto de itens I em C)

for (cada siacutembolo da gramaacutetica X)

if (GOTO(I X) natildeo eacute vazio e natildeo estaacute em C)

Adicione GOTO(I X) em C

until nenhum novo conjunto de itens seja adicionado em C em uma rodada

32 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

A ideia central por traacutes da anaacutelise ldquoLR Simplesrdquo ou SLR eacute a construccedilatildeo do autocircmato LR(0) a partir da gramaacutetica dada

Os estados desses autocircmatos satildeo os conjuntos de itens da coleccedilatildeo LR canocircnica e as transiccedilotildees satildeo dadas pela funccedilatildeo de transiccedilatildeo GOTO

O estado inicial do autocircmato LR eacute dado por CLOSURE([Srsquo rarr S]) onde Srsquo eacute o siacutembolo inicial da gramaacutetica estendida

Todos os estados satildeo estados de aceitaccedilatildeo Nos referimos ao ldquoestado jrdquo como o estado correspondente ao conjunto de itens Ij

33 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E

Aceitar $

I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

34 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Como os autocircmatos LR(0) podem ajudar-nos a decidir por uma das accedilotildees shift-reduce (veja as decisotildees entre shift-reduce a seguir)

Suponha que a cadeia γ dos siacutembolos da gramaacutetica leve o autocircmato LR(0) do estado inicial 0 para algum estado j

Desta forma avance sobre o proacuteximo siacutembolo a se o estado j possuir uma transaccedilatildeo sob a

Caso contraacuterio escolha reduzir

Os itens no estado j nos diratildeo qual produccedilatildeo usar

35 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

O algoritmo LR abaixo utiliza sua pilha para acompanhar os estados e tambeacutem os siacutembolos da gramaacutetica

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Na verdade

O siacutembolo da gramaacutetica pode ser

recuperado a parir do estado de

modo que a pilha possua estados

ao inveacutes de siacutembolos

36 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Usamos uma pilha

p conter os estados

Os siacutembolos que correspondem aos estados estatildeo na coluna ldquoSiacutembolosrdquo

A pilha da linha (1) tecircm o estado inicial 0 do autocircmato

37 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Portanto fazemos a transferecircncia

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

O siacutembolo da linha 1 eacute o marcador de fundo da pilha $

O proacuteximo siacutembolo de entrada eacute id e o estado 0 tem uma transiccedilatildeo sob id p o estado 5

38 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

A partir do item [F rarr id ] no estado 5 efetuamos uma reduccedilatildeo segundo a produccedilatildeo F rarr id

Na linha 2 o estado 5 eacute empilhado (siacutembolo id)

I5

F rarr id

Natildeo haacute transiccedilatildeo a partir do estado 5 sob a entrada por isso reduzimos

39 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o lado direito da produccedilatildeo da linha (2) eacute id correspondendo ao estado 5 e seu lado direito eacute o F

Com os estados ao desempilhar o estado 5 correspondendo ao siacutembolo id o estado 0 passa a ser o topo

0 F $

40 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id I3

T rarr F

F

Procuramos uma transiccedilatildeo sob F o lado esquerdo da produccedilatildeo

0 F $

O estado 0 possui uma transiccedilatildeo em F p o estado 3 onde empilhamos o estado 3 com o siacutembolo F Ver linha (3)

3

41 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I3

T rarr F

Natildeo haacute transiccedilatildeo a partir do estado 3 sob a entrada por isso reduzimos

A partir do item [T rarr F ] no estado 3 efetuamos uma reduccedilatildeo segundo a produccedilatildeo T rarr F

3

0

T $

42 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

I7

T rarr T F

F rarr ( E )

F rarr id

id

Como outro exemplo considere a linha (5) com o estado 7 referente ao siacutembolo no topo da pilha

Esse estado 7 possui uma transaccedilatildeo para o estado 5 sob a entrada id de modo que empilhamos o estado 5

43 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o estado 5 natildeo possui transiccedilotildees de modo que reduzimos segundo F rarr id

quando removemos da pilha o estado 5 correspondente ao lado direito id o estado 7 passa a ser o topo da pilha

44 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Como o estado 7 possui uma transaccedilatildeo sob F para o estado 10 empilhamos o estado 10 (siacutembolo F)

I7

T rarr T F

F rarr ( E )

F rarr id

I10

T rarr T F

F

45 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O algoritmo eacute o mesmo para todos

os analisadores sintaacuteticos LR

Soacute a tabela de anaacutelise eacute diferente

de um analisador para o outro

O algoritmo lecirc caracteres de um

buffer de entrada um de cada vez

46 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O analisador sintaacutetico shift-reduce

transfere um siacutembolo para pilha jaacute

o analisador sintaacutetico LR transfere

um estado

Cada estado resume a informaccedilatildeo

contida na pilha abaixo dele

47 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

A pilha conteacutem uma sequencia de

estados s0s1 sm onde sm estaacute

no topo

No meacutetodo SLR a pilha conteacutem

estados do autocircmato LR(0)

Por construccedilatildeo a cada estado eacute

associado 1 siacutembolo da gramaacutetica

48 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Lembrem-se de que os estados

correspondem a conj de itens e

que haacute uma transiccedilatildeo do estado i

para o estado j se GOTO(Ii X) = Ij

Todas as transiccedilotildees para o estado

j devem ser para o mesmo siacutembolo

da gramaacutetica X

49 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

Sm

Sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Desta forma cada estado exceto

o estado inicial 0 possui um uacutenico

siacutembolo da gramaacutetica associado a

ele

50 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

A tabela LR consiste em duas partes ACTION uma funccedilatildeo de accedilatildeo de anaacutelise e GOTO uma funccedilatildeo de transiccedilatildeo

1 A funccedilatildeo ACTION recebe como argumentos um estado i e um estado a (ou $) O valor de ACTION(i a) pode ter um dos quatro formatos

a) Shift j onde j eacute um estado

A accedilatildeo tomada pelo analisador sintaacutetico efetivamente transfere a entrada a para a pilha mas usa o estado j para representar a

51 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

b) Reduce Ararr β A accedilatildeo do analisador efetivamente reduz β no topo da pilha para A o lado esquerdo da produccedilatildeo

c) Accept O analisador aceita a entrada e termina a anaacutelise

d) Error O analisador descobre um erro em sua entrada passa o controle p o recuperador de erro que toma alguma accedilatildeo corretiva

2 Estendemos a funccedilatildeo GOTO definida sobre um conjunto de itens para os estados se GOTO(Ii A) = Ij entatildeo GOTO tambeacutem mapeia um estado i e um natildeo-terminal A para o estado j

52 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

Para descrever o comportamento de uma analisador LR eacute recomendaacutevel ter uma notaccedilatildeo representado o estado completo do analisador sua pilha e a entrada restante

Uma configuraccedilatildeo p um analisador LR eacute um par (s0s1sm aiai+1an $) O primeiro componente eacute o conteuacutedo da pilha com o topo agrave direita e o segundo componente representa a entrada restante

Essa configuraccedilatildeo representa a seguinte forma sentencial agrave direita (X0X1Xmaiai+1an) Assim como faria um analisador shift-reduce

53 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

A uacutenica diferenccedila eacute que em inveacutes de siacutembolos da gramaacutetica a pilha conteacutem estados a partir dos quais os siacutembolos da gramaacutetica podem ser recuperados

Ou seja Xi eacute o siacutembolo da gramaacutetica representado pelo estado si

Observe que s0 o estado inicial do analisador sintaacutetico natildeo representa um siacutembolo da gramaacutetica e serve como marcador de fundo da pilha aleacutem de desempenhar um papel importante na anaacutelise

54 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

O proacuteximo movimento do analisador a partir da configuraccedilatildeo dada eacute determinado pela leitura de ai o siacutembolo de entrada corrente e sm o estado do topo da pilha e entatildeo consultando a entrada ACTION[sm ai] na tabela de accedilatildeo de anaacutelise

As configuraccedilotildees restantes apoacutes cada um dos quatro tipos de movimentaccedilatildeo satildeo as seguintes

1 Se ACTION[Sm ai] = shift s o analisador sintaacutetico executa um movimento de transferecircncia (shift move) ele empilha o estado s e avanccedila da entrada resultando na configuraccedilatildeo (s0s1 sm ai+1an $)

55 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2 Se ACTION[Sm ai]=reduce Ararrβ entatildeo o analisador sintaacutetico executa um movimento de reduzir (reduce move) resultando na configuraccedilatildeo (s0s1 sm-rs aiai+1an $)

onde r eacute o comprimento de β e s = GOTO[sm-r A]

Aqui o analisador sintaacutetico incialmente desempilhou os r siacutembolos de estado da pilha expondo o estado sm-r

O analisador sintaacutetico entatildeo empilhou s a entrada para GOTO[sm-r A] na pilha O siacutembolo corrente da entrada natildeo eacute alterado em um movimento de reduzir

56 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2

Para os LR que construiremos Xm-r+1Xm a sequencia de siacutembolos da gramaacutetica correspondendo aos estados retirados da pilha sempre iratildeo casar com β o lado direito da produccedilatildeo sendo reduzida

A saiacuteda de um analisador LR eacute gerada apoacutes um movimento de reduzir executando a accedilatildeo semacircntica associada agrave produccedilatildeo que estaacute sendo reduzida

No momento vamos considerar que a saiacuteda consiste soacute na impressatildeo da produccedilatildeo de reduccedilatildeo

57 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

3 Se ACTION[sm ai] = accept a anaacutelise estaacute concluiacuteda

4 Se ACTION[sm ai] = error o analisador sintaacutetico descobriu um erro e ativa uma rotina para recuperaccedilatildeo de erro

Todos os analisadores sintaacuteticos LR se comportam dessa maneira

A uacutenica diferenccedila entre eles diz respeito a informaccedilatildeo contida nos campos ACTION e GOTO da tabela de anaacutelise

O algoritmo de anaacutelise LR eacute resumido nos proacuteximos slides

58 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

Entrada Uma cadeia de entrada w e uma tabela de anaacutelise com funccedilotildees ACTION e GOTO para uma gramaacutetica G

Saiacuteda Se w estaacute em L(G) os passos os passos de uma reduccedilatildeo de uma anaacutelise ascendente para w

Caso contraacuterio uma indicaccedilatildeo de erro

Meacutetodo Inicialmente o analisador sintaacutetico possui w$ no buffer de entrada e s0 em sua pilha onde s0 representa o estado inicial

O analisador sintaacutetico entatildeo executa o algoritmo

59 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

[PSEUDO] seja a o primeiro siacutembolo de w$ while (1) Seja s o estado no topo da pilha if (ACTION[s a] = shift t) empilha t na pilha seja a o proacuteximo siacutembolo da entrada else if (ACTION[s a] = reduce Ararr β) desempilha siacutembolos |β| da pilha faccedila o estado t agora ser o topo da pilha empilhe GOTO[t A] na pilha imprima a produccedilatildeo Ararr β else if (ACTION[s a] = accept) pare a anaacutelise terminou

else chame uma rotina de recuperaccedilatildeo de erros

60 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR ndash Exemplo

A tabela do proacuteximo slide monstra as funccedilotildees ACTION e GOTO de uma tabela de anaacutelise LR para a gramaacutetica de expressatildeo estudada nesta aula e repetida aqui com produccedilotildees numeradas

Os coacutedigos para as accedilotildees satildeo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

(1) E rarr E + T

(2) E rarr T

(3) T rarr T F

(4) T rarr F

(5) F rarr ( E )

(6) F rarr id

1 Si significa avanccedila na entrada e empilha o estado i na pilha

2 Rj significa reduce segundo a produccedilatildeo de nuacutemero j

3 Acc significa accept

4 Entrada em branco significa error

61 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Estado ACTION

id + ( ) $

0 s5 s4

1 S6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4

5 r6 r6 r6 r6

6 s5 s4

7 s5 s4

8 r6 s11

9 s1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

GOTO

E T F

1 2 3

8 2 3

9 3

10

O valor de GOTO(s a) para o

terminal a estaacute em ACTION da

tabela de anaacutelise conectado agrave

accedilatildeo de transferecircncia sob a

entrada a e o estado s

O GOTO fornece o GOTO[s a]

para os natildeo-terminais A

Ok

Mas como eu consigo os dados

desta tabela

62 Geovane Griesang

A sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

FOLLOW(E) = FOLLOW(Ersquo) = ) $

FOLLOW(T) = FOLLOW(Trsquo) = + ) $

FOLLOW(F) = + ) $

63 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Construindo tabelas de anaacutelise SLR

Esse meacutetodo eacute o mais simples dos LRs Vamos nos referir a tabela de anaacutelise construiacuteda por este meacutetodo como uma tabela SLR e o analisador LR usando uma tabela SLR como um analisador sintaacutetico SLR

O meacutetodo SLR comeccedila com os itens LR(0) e autocircmatos LR(0) ou seja dada uma gramaacutetica G estendemos G para produzir Grsquo com o novo siacutembolo inicial Srsquo A partir de Grsquo construiacutemos C a coleccedilatildeo canocircnica de conj de itens para Grsquo junto com a funccedilatildeo GOTO

Para construir as entradas ACTION e GOTO da tabela de anaacutelise usando o algoritmo a seguir eacute preciso que conheccedilamos FOLLOW(A) para cada natildeo-terminal A de uma gramaacutetica

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 4: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

4 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR Left to Right with Rightmost derivation

Atualmente o tipo mais usado de analisadores sintaacutetico ascendentes eacute baseado em um conceito chamado LR(K)

L representa a escanccedilatildeo de entrada da esquerda para direita

R representa a construccedilotildees mais agrave direita ao reverso

k representa os siacutembolos a frente do fluxo de entrada que auxiliam nas decisotildees de anaacutelise

5 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR

Os analisadores sintaacuteticos LR satildeo controlados por uma tabela de modo muito parecido com os analisadores LL natildeo-recursivos

Para uma gramaacutetica ser LR eacute suficiente que uma analisador shift-reduce seja capaz de reconhecer o handle quando ele aparecer no topo da pilha

6 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR

O uso desse tipo de analisador eacute atraente por vaacuterios motivos

Os analisadores LR satildeo capazes de reconhecer praticamente todas as construccedilotildees sintaacuteticas definidas por Gramaacuteticas Livre de Contexto (GLC) da maioria das linguagens de programaccedilatildeo

Existem gramaacuteticas que natildeo satildeo LR mas geralmente elas podem ser evitadas para construccedilotildees tiacutepicas das ling de programaccedilatildeo

7 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR

O LR aleacutem de ser o meacutetodo de anaacutelise shift-reduce sem retrocesso mais geral pode ser implementado com o mesmo grau de eficiecircncia espaccedilo e tamanho que outro meacutetodos shift-reduce

Um analisador LR detecta um erro sintaacutetico tatildeo logo ele aparece na cadeia de entrada em uma escansatildeo da entrada da esquerda para direita

8 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR

A classe de gramaacuteticas que podem ser reconhecidas com o uso dos meacutetodos LR eacute um superconjunto proacuteprio da classe de gramaacuteticas que podem ser reconhecidas com os meacutetodos preditivos e LL

Para uma gramaacutetica ser LR(k) ela deve ser capaz de reconhecer a ocorrecircncia do lado direito de uma produccedilatildeo em forma sentencial mais agrave direita com k siacutembolos a frente da entrada

Esse requisito eacute menos rigoroso que aquele das gramaacuteticas LL(k)

9 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR

Relembrando

Na LL(k) para reconhecer o uso de uma produccedilatildeo o analisador vecirc apenas os k primeiros siacutembolos que o seu lado direito deriva

Assim natildeo eacute surpresa que as gramaacuteticas LR possam descrever mais linguagens do que as gramaacuteticas LL

Para uma gramaacutetica ser LR(k) ela deve ser capaz de reconhecer

a ocorrecircncia do lado direito de uma produccedilatildeo em forma sentencial

mais agrave direita com k siacutembolos a frente da entrada

10 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR

A principal desvantagem do meacutetodo LR estaacute relacionada com a geraccedilatildeo do analisador sua construccedilatildeo a matildeo p uma linguagem de programaccedilatildeo tiacutepica eacute muito trabalhosa

Portanto eacute necessaacuterio o uso de uma ferramenta especializada um gerador de analisador LR

Felizmente muitos desses geradores estatildeo disponiacuteveis como por exemplo o Yacc Esse gerador recebe como entrada um GLC e produz automaticamente como saiacuteda um analisador sintaacutetico para esta gramaacutetica

11 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Reduccedilotildees - Exemplo

A derivaccedilatildeo segue a seguinte sequencia de cadeias

id id F id T id T F T E

Entrada id id

Neste ponto temos duas opccedilotildees de reduccedilatildeo podemos reduzir a cadeia T para E segundo a produccedilatildeo E rarr T e a cadeia consistindo no segundo id que representa o lado direito de F rarr id Escolhemos a segunda opccedilatildeo e reduzimos id para F produzindo a cadeia T F

id id

F rarr id F id

T rarr F T id

E rarr T E id ou F rarr id T F

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

12 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Itens e o autocircmato LR

Como o analisador sintaacutetico shift-reduce sabe quando transferir p a pilha e quando reduzir

Ex Dado o conteuacutedo de pilha $T e o proacuteximo siacutembolo da entrada como o analisador sabe que T no topo da pilha natildeo eacute um handle de modo que a accedilatildeo apropriada seja transferir o ldquordquo para a pilha e natildeo reduzir T para E

Entrada id id E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

id id

F rarr id F id

T rarr F T id

E rarr T E id ou F rarr id T F

13 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Itens e o autocircmato LR

Um analisador LR decide sobre as accedilotildees shift-reduce mantendo estados para acompanhar onde se encontra a anaacutelise

Os estados representam conjuntos de ldquoitensrdquo

Um item LR(0) de uma gramaacutetica G eacute a produccedilatildeo de G com um ponto em alguma posiccedilatildeo do seu lado direito

A produccedilatildeo A rarr XYZ gera os quatro itens A rarr XYZ

A rarr XYZ

A rarr XYZ

A rarr XYZ A produccedilatildeo A rarr 120576 gera apenas um item A rarr

14 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR - Itens e o autocircmato LR Representaccedilatildeo dos conjuntos de itens

Um gerador de analisadores sintaacuteticos que produz um analisador ascendente

deve representar os itens e conjunto de itens convenientemente

Um item pode ser representado por um par de inteiros onde o primeiro

representa o nuacutemero de uma das produccedilotildees da gramaacutetica subjacente e o

segundo indica a posiccedilatildeo do ponto

Conjuntos de itens podem ser representados por uma lista desses pares

A rarr XYZ

A rarr XYZ

A rarr XYZ

A rarr XYZ

15 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR - Itens e o autocircmato LR Representaccedilatildeo dos conjuntos de itens

O conjunto de itens necessaacuterios frequentemente incluem itens de

ldquofechamentordquo (ldquoclosurerdquo) onde o ponto estaacute no iniacutecio do corpo

Esses itens sempre podem ser reconstruiacutedos a partir dos outros itens no

conjunto e natildeo temos de incluiacute-los na lista

A rarr XYZ

A rarr XYZ

A rarr XYZ

A rarr XYZ

16 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Itens e o autocircmato LR

Um item indica quanto de uma produccedilatildeo jaacute foi visto em determinado ponto no processo de reconhecimento sintaacutetico Ex

O item ArarrXYZ indica o iniacutecio da busca de uma cadeia derivaacutevel de XYZ na entrada

O item A rarr XYZ indica que no ponto atual onde se encontra a anaacutelise uma cadeia X jaacute foi encontrada e que esperamos em seguida ver uma cadeia derivaacutevel de YZ

O item A rarr XYZ indica o fim da busca ou seja jaacute derivamos o lado direito XYZ de A e que pode ser o momento de reduzir XYZ para A

A rarr XYZ

A rarr XYZ

A rarr XYZ

A rarr XYZ

17 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Itens e o autocircmato LR

Uma coleccedilatildeo de conj de itens LR(0) chamada coleccedilatildeo LR(0) canocircnica oferece a base para construccedilatildeo de um autocircmato finito determinista que eacute usado para dirigir as decisotildees durante a anaacutelise

Esse autocircmato eacute chamado de autocircmato LR(0)

Em particular cada estado do autocircmato LR(0) representa um conjunto de itens na coleccedilatildeo LR(0) canocircnica

18 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Exemplo Para construir a coleccedilatildeo LR(0) canocircnica para uma gramaacutetica definimos uma gramaacutetica estendida e duas funccedilotildees

funccedilatildeo de fechamento (function CLOSURE)

funccedilatildeo de transiccedilatildeo (function GOTO)

Se G eacute uma gramaacutetica com siacutembolo inicial S entatildeo Grsquo eacute uma gramaacutetica estendida para G com o novo siacutembolo inicial Srsquo e a produccedilatildeo Srsquo rarr S

O objetivo dessa nova produccedilatildeo eacute simplificar a identificaccedilatildeo de quando o reconhecedor sintaacutetico deve parar e anunciar a aceitaccedilatildeo da cadeia de entrada

Ou seja a aceitaccedilatildeo ocorre se e somente se o analisador estiver para reduzir por Srsquo rarr S

19 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Se I eacute um conj de itens para a gramaacutetica G entatildeo CLOSURE(I) eacute o conj de itens construiacutedos a partir de I pelas duas regras

1 Inicialmente acrescente todo item de I no CLOSURE(I)

2 Se A rarr αBβ estaacute em CLOSEURE(I) e B rarr γ eacute uma produccedilatildeo entatildeo adicione o item B rarr γ em CLOSURE(I) se ele ainda natildeo estaacute laacute

Ix

A rarr αBβ

B rarr γ

20 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Intuitivamente A rarr αBβ em CLOSURE(I) indica que em algum ponto no processo de reconhecimento os itens correspondentes as produccedilotildees-B devem ser acrescentados para dirigir a busca por B

A subcadeia derivaacutevel de Bβ na entrada teraacute um prefixo derivaacutevel de B aplicando umas das produccedilotildees-B

Portanto incluiacutemos itens para todas as produccedilotildees-B ou seja se B rarr γ eacute uma produccedilatildeo tambeacutem incluiacutemos B rarr γ em CLOSURE(I) este processo eacute conhecido como fechamento de estado

Ix

A rarr αBβ

B rarr γ

21 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

P ver como o fechamento de um estado eacute computado Ersquo rarr E eacute colocado em CLOSURE(I) pela regra (1)

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Acrescente todo item de I no CLOSURE(I)

I0

Ersquo rarr E

22 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Como existe um natildeo-terminal E agrave direita de um ponto acrescentamos as produccedilotildees-E com pontos mais agrave esquerda do lado direito dos itens ex

E rarr E + T e E rarr T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

23 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Agora existe um natildeo-terminal T imediatamente agrave direita de um ponto no segundo item incluiacutedo (E rarr T) de modo que acrescentamos as produccedilotildees-T T rarr T F e T rarr F

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

24 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Em seguida o natildeo-terminal F agrave direita de um ponto nos forccedila a incluir os itens Frarr (E) e F rarr id mas nenhum outro item precisa ser acrescentado

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr (E)

F rarr id

25 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Um modo conveniente de implementar a funccedilatildeo de fechamento (closure) eacute manter um arranjo booleano added indexado pelos natildeo-terminais de G de modo que added[B] seja definido como verdadeiro (true) se e quando incluirmos o item B rarr γ para cada produccedilatildeo-B B rarr γ

SetOfItems CLOSURE(I)

J=I

repeat

for (cada item A rarr αBβ em J)

for (cada produccedilatildeo B rarr γ de G)

if (B rarr γ natildeo estaacute em J)

Adicione B rarr γ em J

until mais nenhum item seja adicionado a J em um passo do loop

return J

Ix

A rarr αBβ

B rarr γ

26 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Observe que se uma produccedilatildeo-B for incluiacuteda no fechamento de I com o ponto mais agrave esquerda do seu lado direito entatildeo todas as produccedilotildees-B seratildeo igualmente incluiacutedas no fechamento Ex A rarr αBβ

Uma lista de natildeo-terminais B cujas produccedilotildees foram incluiacutedas dessa forma eacute suficiente Dividimos todos os conjuntos de itens de interesse em duas classes

1 Itens de base (kernel) o item inicial Srsquo rarr S e todos itens cujos pontos natildeo estatildeo mais agrave esquerda em seus lados direitos

2 Itens que natildeo satildeo de base todos os itens com seus pontos mais agrave esquerda em seus lados direitos exceto Srsquo rarr S Ex B rarr γ

Ix

A rarr αBβ

B rarr γ

27 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Aleacutem do mais cada conjunto de itens de interesse eacute formado a partir do fechamento de um conjunto de itens de base

Os itens adicionados no fechamento nunca podem ser itens de base naturalmente

Assim podemos representar os conjuntos de itens em que realmente estamos interessados com pouca memoacuteria se desprezarmos todos que natildeo satildeo itens de base sabendo que esses podem ser gerados novamente no processo de fechamento Ex B rarr γ exceto Srsquo rarr S

Ix

A rarr αBβ

B rarr γ

28 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

A segunda funccedilatildeo usada na construccedilatildeo da coleccedilatildeo canocircnica LR(0) eacute a funccedilatildeo de transiccedilatildeo GOTO(I X) onde I eacute o conjunto de itens de base e X eacute um siacutembolo da gramaacutetica

GOTO(I X) eacute definido como fechamento do conjunto de todos os itens [ArarrαXβ] tais que

[A rarr αXβ] estaacute em I

A funccedilatildeo de transiccedilatildeo GOTO eacute utilizada para definir as transaccedilotildees no autocircmato LR(0) para uma gramaacutetica

I1

Ersquo rarr E

E rarr E + T

I0

Ersquo rarr E

E rarr E + T

E

29 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Estados do autocircmato correspondem aos conjuntos de itens e GOTO(I +) especifica a transaccedilatildeo do estado I para um novo estado I sob a entrada X

Se I representa o conjunto com dois itens [Ersquo rarr E][E rarr E+T] entatildeo GOTO(I +) conteacutem os itens

Calculamos GOTO(I +) examinando os itens em I com o + imediatamente agrave direita do ponto

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

A rarr αXβ

A rarr αXβ

I1

Ersquo rarr E

E rarr E + T +

I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

30 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Calculamos GOTO(I +) examinando os itens em I com o + imediatamente agrave direita do ponto

O item Ersquo rarr E natildeo eacute desse tipo mas Ersquo rarr E + T sim

Movemos o ponto para imediatamente agrave direita de + e obtemos ErarrE + T

e entatildeo calculamos o fechamento desse conjunto unitaacuterio

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Itens em I

[Ersquo rarr E]

[E rarr E+T]

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I1

Ersquo rarr E

E rarr E + T +

31 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Agora estamos prontos para construir C a coleccedilatildeo canocircnica de conjuntos

de itens LR(0) para uma gramaacutetica estendida Grsquo

void Itens(Grsquo)

C = CLOSURE([Srsquo rarr S])

repeat

for (cada conjunto de itens I em C)

for (cada siacutembolo da gramaacutetica X)

if (GOTO(I X) natildeo eacute vazio e natildeo estaacute em C)

Adicione GOTO(I X) em C

until nenhum novo conjunto de itens seja adicionado em C em uma rodada

32 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

A ideia central por traacutes da anaacutelise ldquoLR Simplesrdquo ou SLR eacute a construccedilatildeo do autocircmato LR(0) a partir da gramaacutetica dada

Os estados desses autocircmatos satildeo os conjuntos de itens da coleccedilatildeo LR canocircnica e as transiccedilotildees satildeo dadas pela funccedilatildeo de transiccedilatildeo GOTO

O estado inicial do autocircmato LR eacute dado por CLOSURE([Srsquo rarr S]) onde Srsquo eacute o siacutembolo inicial da gramaacutetica estendida

Todos os estados satildeo estados de aceitaccedilatildeo Nos referimos ao ldquoestado jrdquo como o estado correspondente ao conjunto de itens Ij

33 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E

Aceitar $

I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

34 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Como os autocircmatos LR(0) podem ajudar-nos a decidir por uma das accedilotildees shift-reduce (veja as decisotildees entre shift-reduce a seguir)

Suponha que a cadeia γ dos siacutembolos da gramaacutetica leve o autocircmato LR(0) do estado inicial 0 para algum estado j

Desta forma avance sobre o proacuteximo siacutembolo a se o estado j possuir uma transaccedilatildeo sob a

Caso contraacuterio escolha reduzir

Os itens no estado j nos diratildeo qual produccedilatildeo usar

35 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

O algoritmo LR abaixo utiliza sua pilha para acompanhar os estados e tambeacutem os siacutembolos da gramaacutetica

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Na verdade

O siacutembolo da gramaacutetica pode ser

recuperado a parir do estado de

modo que a pilha possua estados

ao inveacutes de siacutembolos

36 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Usamos uma pilha

p conter os estados

Os siacutembolos que correspondem aos estados estatildeo na coluna ldquoSiacutembolosrdquo

A pilha da linha (1) tecircm o estado inicial 0 do autocircmato

37 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Portanto fazemos a transferecircncia

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

O siacutembolo da linha 1 eacute o marcador de fundo da pilha $

O proacuteximo siacutembolo de entrada eacute id e o estado 0 tem uma transiccedilatildeo sob id p o estado 5

38 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

A partir do item [F rarr id ] no estado 5 efetuamos uma reduccedilatildeo segundo a produccedilatildeo F rarr id

Na linha 2 o estado 5 eacute empilhado (siacutembolo id)

I5

F rarr id

Natildeo haacute transiccedilatildeo a partir do estado 5 sob a entrada por isso reduzimos

39 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o lado direito da produccedilatildeo da linha (2) eacute id correspondendo ao estado 5 e seu lado direito eacute o F

Com os estados ao desempilhar o estado 5 correspondendo ao siacutembolo id o estado 0 passa a ser o topo

0 F $

40 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id I3

T rarr F

F

Procuramos uma transiccedilatildeo sob F o lado esquerdo da produccedilatildeo

0 F $

O estado 0 possui uma transiccedilatildeo em F p o estado 3 onde empilhamos o estado 3 com o siacutembolo F Ver linha (3)

3

41 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I3

T rarr F

Natildeo haacute transiccedilatildeo a partir do estado 3 sob a entrada por isso reduzimos

A partir do item [T rarr F ] no estado 3 efetuamos uma reduccedilatildeo segundo a produccedilatildeo T rarr F

3

0

T $

42 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

I7

T rarr T F

F rarr ( E )

F rarr id

id

Como outro exemplo considere a linha (5) com o estado 7 referente ao siacutembolo no topo da pilha

Esse estado 7 possui uma transaccedilatildeo para o estado 5 sob a entrada id de modo que empilhamos o estado 5

43 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o estado 5 natildeo possui transiccedilotildees de modo que reduzimos segundo F rarr id

quando removemos da pilha o estado 5 correspondente ao lado direito id o estado 7 passa a ser o topo da pilha

44 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Como o estado 7 possui uma transaccedilatildeo sob F para o estado 10 empilhamos o estado 10 (siacutembolo F)

I7

T rarr T F

F rarr ( E )

F rarr id

I10

T rarr T F

F

45 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O algoritmo eacute o mesmo para todos

os analisadores sintaacuteticos LR

Soacute a tabela de anaacutelise eacute diferente

de um analisador para o outro

O algoritmo lecirc caracteres de um

buffer de entrada um de cada vez

46 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O analisador sintaacutetico shift-reduce

transfere um siacutembolo para pilha jaacute

o analisador sintaacutetico LR transfere

um estado

Cada estado resume a informaccedilatildeo

contida na pilha abaixo dele

47 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

A pilha conteacutem uma sequencia de

estados s0s1 sm onde sm estaacute

no topo

No meacutetodo SLR a pilha conteacutem

estados do autocircmato LR(0)

Por construccedilatildeo a cada estado eacute

associado 1 siacutembolo da gramaacutetica

48 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Lembrem-se de que os estados

correspondem a conj de itens e

que haacute uma transiccedilatildeo do estado i

para o estado j se GOTO(Ii X) = Ij

Todas as transiccedilotildees para o estado

j devem ser para o mesmo siacutembolo

da gramaacutetica X

49 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

Sm

Sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Desta forma cada estado exceto

o estado inicial 0 possui um uacutenico

siacutembolo da gramaacutetica associado a

ele

50 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

A tabela LR consiste em duas partes ACTION uma funccedilatildeo de accedilatildeo de anaacutelise e GOTO uma funccedilatildeo de transiccedilatildeo

1 A funccedilatildeo ACTION recebe como argumentos um estado i e um estado a (ou $) O valor de ACTION(i a) pode ter um dos quatro formatos

a) Shift j onde j eacute um estado

A accedilatildeo tomada pelo analisador sintaacutetico efetivamente transfere a entrada a para a pilha mas usa o estado j para representar a

51 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

b) Reduce Ararr β A accedilatildeo do analisador efetivamente reduz β no topo da pilha para A o lado esquerdo da produccedilatildeo

c) Accept O analisador aceita a entrada e termina a anaacutelise

d) Error O analisador descobre um erro em sua entrada passa o controle p o recuperador de erro que toma alguma accedilatildeo corretiva

2 Estendemos a funccedilatildeo GOTO definida sobre um conjunto de itens para os estados se GOTO(Ii A) = Ij entatildeo GOTO tambeacutem mapeia um estado i e um natildeo-terminal A para o estado j

52 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

Para descrever o comportamento de uma analisador LR eacute recomendaacutevel ter uma notaccedilatildeo representado o estado completo do analisador sua pilha e a entrada restante

Uma configuraccedilatildeo p um analisador LR eacute um par (s0s1sm aiai+1an $) O primeiro componente eacute o conteuacutedo da pilha com o topo agrave direita e o segundo componente representa a entrada restante

Essa configuraccedilatildeo representa a seguinte forma sentencial agrave direita (X0X1Xmaiai+1an) Assim como faria um analisador shift-reduce

53 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

A uacutenica diferenccedila eacute que em inveacutes de siacutembolos da gramaacutetica a pilha conteacutem estados a partir dos quais os siacutembolos da gramaacutetica podem ser recuperados

Ou seja Xi eacute o siacutembolo da gramaacutetica representado pelo estado si

Observe que s0 o estado inicial do analisador sintaacutetico natildeo representa um siacutembolo da gramaacutetica e serve como marcador de fundo da pilha aleacutem de desempenhar um papel importante na anaacutelise

54 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

O proacuteximo movimento do analisador a partir da configuraccedilatildeo dada eacute determinado pela leitura de ai o siacutembolo de entrada corrente e sm o estado do topo da pilha e entatildeo consultando a entrada ACTION[sm ai] na tabela de accedilatildeo de anaacutelise

As configuraccedilotildees restantes apoacutes cada um dos quatro tipos de movimentaccedilatildeo satildeo as seguintes

1 Se ACTION[Sm ai] = shift s o analisador sintaacutetico executa um movimento de transferecircncia (shift move) ele empilha o estado s e avanccedila da entrada resultando na configuraccedilatildeo (s0s1 sm ai+1an $)

55 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2 Se ACTION[Sm ai]=reduce Ararrβ entatildeo o analisador sintaacutetico executa um movimento de reduzir (reduce move) resultando na configuraccedilatildeo (s0s1 sm-rs aiai+1an $)

onde r eacute o comprimento de β e s = GOTO[sm-r A]

Aqui o analisador sintaacutetico incialmente desempilhou os r siacutembolos de estado da pilha expondo o estado sm-r

O analisador sintaacutetico entatildeo empilhou s a entrada para GOTO[sm-r A] na pilha O siacutembolo corrente da entrada natildeo eacute alterado em um movimento de reduzir

56 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2

Para os LR que construiremos Xm-r+1Xm a sequencia de siacutembolos da gramaacutetica correspondendo aos estados retirados da pilha sempre iratildeo casar com β o lado direito da produccedilatildeo sendo reduzida

A saiacuteda de um analisador LR eacute gerada apoacutes um movimento de reduzir executando a accedilatildeo semacircntica associada agrave produccedilatildeo que estaacute sendo reduzida

No momento vamos considerar que a saiacuteda consiste soacute na impressatildeo da produccedilatildeo de reduccedilatildeo

57 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

3 Se ACTION[sm ai] = accept a anaacutelise estaacute concluiacuteda

4 Se ACTION[sm ai] = error o analisador sintaacutetico descobriu um erro e ativa uma rotina para recuperaccedilatildeo de erro

Todos os analisadores sintaacuteticos LR se comportam dessa maneira

A uacutenica diferenccedila entre eles diz respeito a informaccedilatildeo contida nos campos ACTION e GOTO da tabela de anaacutelise

O algoritmo de anaacutelise LR eacute resumido nos proacuteximos slides

58 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

Entrada Uma cadeia de entrada w e uma tabela de anaacutelise com funccedilotildees ACTION e GOTO para uma gramaacutetica G

Saiacuteda Se w estaacute em L(G) os passos os passos de uma reduccedilatildeo de uma anaacutelise ascendente para w

Caso contraacuterio uma indicaccedilatildeo de erro

Meacutetodo Inicialmente o analisador sintaacutetico possui w$ no buffer de entrada e s0 em sua pilha onde s0 representa o estado inicial

O analisador sintaacutetico entatildeo executa o algoritmo

59 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

[PSEUDO] seja a o primeiro siacutembolo de w$ while (1) Seja s o estado no topo da pilha if (ACTION[s a] = shift t) empilha t na pilha seja a o proacuteximo siacutembolo da entrada else if (ACTION[s a] = reduce Ararr β) desempilha siacutembolos |β| da pilha faccedila o estado t agora ser o topo da pilha empilhe GOTO[t A] na pilha imprima a produccedilatildeo Ararr β else if (ACTION[s a] = accept) pare a anaacutelise terminou

else chame uma rotina de recuperaccedilatildeo de erros

60 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR ndash Exemplo

A tabela do proacuteximo slide monstra as funccedilotildees ACTION e GOTO de uma tabela de anaacutelise LR para a gramaacutetica de expressatildeo estudada nesta aula e repetida aqui com produccedilotildees numeradas

Os coacutedigos para as accedilotildees satildeo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

(1) E rarr E + T

(2) E rarr T

(3) T rarr T F

(4) T rarr F

(5) F rarr ( E )

(6) F rarr id

1 Si significa avanccedila na entrada e empilha o estado i na pilha

2 Rj significa reduce segundo a produccedilatildeo de nuacutemero j

3 Acc significa accept

4 Entrada em branco significa error

61 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Estado ACTION

id + ( ) $

0 s5 s4

1 S6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4

5 r6 r6 r6 r6

6 s5 s4

7 s5 s4

8 r6 s11

9 s1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

GOTO

E T F

1 2 3

8 2 3

9 3

10

O valor de GOTO(s a) para o

terminal a estaacute em ACTION da

tabela de anaacutelise conectado agrave

accedilatildeo de transferecircncia sob a

entrada a e o estado s

O GOTO fornece o GOTO[s a]

para os natildeo-terminais A

Ok

Mas como eu consigo os dados

desta tabela

62 Geovane Griesang

A sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

FOLLOW(E) = FOLLOW(Ersquo) = ) $

FOLLOW(T) = FOLLOW(Trsquo) = + ) $

FOLLOW(F) = + ) $

63 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Construindo tabelas de anaacutelise SLR

Esse meacutetodo eacute o mais simples dos LRs Vamos nos referir a tabela de anaacutelise construiacuteda por este meacutetodo como uma tabela SLR e o analisador LR usando uma tabela SLR como um analisador sintaacutetico SLR

O meacutetodo SLR comeccedila com os itens LR(0) e autocircmatos LR(0) ou seja dada uma gramaacutetica G estendemos G para produzir Grsquo com o novo siacutembolo inicial Srsquo A partir de Grsquo construiacutemos C a coleccedilatildeo canocircnica de conj de itens para Grsquo junto com a funccedilatildeo GOTO

Para construir as entradas ACTION e GOTO da tabela de anaacutelise usando o algoritmo a seguir eacute preciso que conheccedilamos FOLLOW(A) para cada natildeo-terminal A de uma gramaacutetica

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 5: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

5 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR

Os analisadores sintaacuteticos LR satildeo controlados por uma tabela de modo muito parecido com os analisadores LL natildeo-recursivos

Para uma gramaacutetica ser LR eacute suficiente que uma analisador shift-reduce seja capaz de reconhecer o handle quando ele aparecer no topo da pilha

6 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR

O uso desse tipo de analisador eacute atraente por vaacuterios motivos

Os analisadores LR satildeo capazes de reconhecer praticamente todas as construccedilotildees sintaacuteticas definidas por Gramaacuteticas Livre de Contexto (GLC) da maioria das linguagens de programaccedilatildeo

Existem gramaacuteticas que natildeo satildeo LR mas geralmente elas podem ser evitadas para construccedilotildees tiacutepicas das ling de programaccedilatildeo

7 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR

O LR aleacutem de ser o meacutetodo de anaacutelise shift-reduce sem retrocesso mais geral pode ser implementado com o mesmo grau de eficiecircncia espaccedilo e tamanho que outro meacutetodos shift-reduce

Um analisador LR detecta um erro sintaacutetico tatildeo logo ele aparece na cadeia de entrada em uma escansatildeo da entrada da esquerda para direita

8 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR

A classe de gramaacuteticas que podem ser reconhecidas com o uso dos meacutetodos LR eacute um superconjunto proacuteprio da classe de gramaacuteticas que podem ser reconhecidas com os meacutetodos preditivos e LL

Para uma gramaacutetica ser LR(k) ela deve ser capaz de reconhecer a ocorrecircncia do lado direito de uma produccedilatildeo em forma sentencial mais agrave direita com k siacutembolos a frente da entrada

Esse requisito eacute menos rigoroso que aquele das gramaacuteticas LL(k)

9 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR

Relembrando

Na LL(k) para reconhecer o uso de uma produccedilatildeo o analisador vecirc apenas os k primeiros siacutembolos que o seu lado direito deriva

Assim natildeo eacute surpresa que as gramaacuteticas LR possam descrever mais linguagens do que as gramaacuteticas LL

Para uma gramaacutetica ser LR(k) ela deve ser capaz de reconhecer

a ocorrecircncia do lado direito de uma produccedilatildeo em forma sentencial

mais agrave direita com k siacutembolos a frente da entrada

10 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR

A principal desvantagem do meacutetodo LR estaacute relacionada com a geraccedilatildeo do analisador sua construccedilatildeo a matildeo p uma linguagem de programaccedilatildeo tiacutepica eacute muito trabalhosa

Portanto eacute necessaacuterio o uso de uma ferramenta especializada um gerador de analisador LR

Felizmente muitos desses geradores estatildeo disponiacuteveis como por exemplo o Yacc Esse gerador recebe como entrada um GLC e produz automaticamente como saiacuteda um analisador sintaacutetico para esta gramaacutetica

11 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Reduccedilotildees - Exemplo

A derivaccedilatildeo segue a seguinte sequencia de cadeias

id id F id T id T F T E

Entrada id id

Neste ponto temos duas opccedilotildees de reduccedilatildeo podemos reduzir a cadeia T para E segundo a produccedilatildeo E rarr T e a cadeia consistindo no segundo id que representa o lado direito de F rarr id Escolhemos a segunda opccedilatildeo e reduzimos id para F produzindo a cadeia T F

id id

F rarr id F id

T rarr F T id

E rarr T E id ou F rarr id T F

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

12 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Itens e o autocircmato LR

Como o analisador sintaacutetico shift-reduce sabe quando transferir p a pilha e quando reduzir

Ex Dado o conteuacutedo de pilha $T e o proacuteximo siacutembolo da entrada como o analisador sabe que T no topo da pilha natildeo eacute um handle de modo que a accedilatildeo apropriada seja transferir o ldquordquo para a pilha e natildeo reduzir T para E

Entrada id id E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

id id

F rarr id F id

T rarr F T id

E rarr T E id ou F rarr id T F

13 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Itens e o autocircmato LR

Um analisador LR decide sobre as accedilotildees shift-reduce mantendo estados para acompanhar onde se encontra a anaacutelise

Os estados representam conjuntos de ldquoitensrdquo

Um item LR(0) de uma gramaacutetica G eacute a produccedilatildeo de G com um ponto em alguma posiccedilatildeo do seu lado direito

A produccedilatildeo A rarr XYZ gera os quatro itens A rarr XYZ

A rarr XYZ

A rarr XYZ

A rarr XYZ A produccedilatildeo A rarr 120576 gera apenas um item A rarr

14 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR - Itens e o autocircmato LR Representaccedilatildeo dos conjuntos de itens

Um gerador de analisadores sintaacuteticos que produz um analisador ascendente

deve representar os itens e conjunto de itens convenientemente

Um item pode ser representado por um par de inteiros onde o primeiro

representa o nuacutemero de uma das produccedilotildees da gramaacutetica subjacente e o

segundo indica a posiccedilatildeo do ponto

Conjuntos de itens podem ser representados por uma lista desses pares

A rarr XYZ

A rarr XYZ

A rarr XYZ

A rarr XYZ

15 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR - Itens e o autocircmato LR Representaccedilatildeo dos conjuntos de itens

O conjunto de itens necessaacuterios frequentemente incluem itens de

ldquofechamentordquo (ldquoclosurerdquo) onde o ponto estaacute no iniacutecio do corpo

Esses itens sempre podem ser reconstruiacutedos a partir dos outros itens no

conjunto e natildeo temos de incluiacute-los na lista

A rarr XYZ

A rarr XYZ

A rarr XYZ

A rarr XYZ

16 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Itens e o autocircmato LR

Um item indica quanto de uma produccedilatildeo jaacute foi visto em determinado ponto no processo de reconhecimento sintaacutetico Ex

O item ArarrXYZ indica o iniacutecio da busca de uma cadeia derivaacutevel de XYZ na entrada

O item A rarr XYZ indica que no ponto atual onde se encontra a anaacutelise uma cadeia X jaacute foi encontrada e que esperamos em seguida ver uma cadeia derivaacutevel de YZ

O item A rarr XYZ indica o fim da busca ou seja jaacute derivamos o lado direito XYZ de A e que pode ser o momento de reduzir XYZ para A

A rarr XYZ

A rarr XYZ

A rarr XYZ

A rarr XYZ

17 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Itens e o autocircmato LR

Uma coleccedilatildeo de conj de itens LR(0) chamada coleccedilatildeo LR(0) canocircnica oferece a base para construccedilatildeo de um autocircmato finito determinista que eacute usado para dirigir as decisotildees durante a anaacutelise

Esse autocircmato eacute chamado de autocircmato LR(0)

Em particular cada estado do autocircmato LR(0) representa um conjunto de itens na coleccedilatildeo LR(0) canocircnica

18 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Exemplo Para construir a coleccedilatildeo LR(0) canocircnica para uma gramaacutetica definimos uma gramaacutetica estendida e duas funccedilotildees

funccedilatildeo de fechamento (function CLOSURE)

funccedilatildeo de transiccedilatildeo (function GOTO)

Se G eacute uma gramaacutetica com siacutembolo inicial S entatildeo Grsquo eacute uma gramaacutetica estendida para G com o novo siacutembolo inicial Srsquo e a produccedilatildeo Srsquo rarr S

O objetivo dessa nova produccedilatildeo eacute simplificar a identificaccedilatildeo de quando o reconhecedor sintaacutetico deve parar e anunciar a aceitaccedilatildeo da cadeia de entrada

Ou seja a aceitaccedilatildeo ocorre se e somente se o analisador estiver para reduzir por Srsquo rarr S

19 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Se I eacute um conj de itens para a gramaacutetica G entatildeo CLOSURE(I) eacute o conj de itens construiacutedos a partir de I pelas duas regras

1 Inicialmente acrescente todo item de I no CLOSURE(I)

2 Se A rarr αBβ estaacute em CLOSEURE(I) e B rarr γ eacute uma produccedilatildeo entatildeo adicione o item B rarr γ em CLOSURE(I) se ele ainda natildeo estaacute laacute

Ix

A rarr αBβ

B rarr γ

20 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Intuitivamente A rarr αBβ em CLOSURE(I) indica que em algum ponto no processo de reconhecimento os itens correspondentes as produccedilotildees-B devem ser acrescentados para dirigir a busca por B

A subcadeia derivaacutevel de Bβ na entrada teraacute um prefixo derivaacutevel de B aplicando umas das produccedilotildees-B

Portanto incluiacutemos itens para todas as produccedilotildees-B ou seja se B rarr γ eacute uma produccedilatildeo tambeacutem incluiacutemos B rarr γ em CLOSURE(I) este processo eacute conhecido como fechamento de estado

Ix

A rarr αBβ

B rarr γ

21 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

P ver como o fechamento de um estado eacute computado Ersquo rarr E eacute colocado em CLOSURE(I) pela regra (1)

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Acrescente todo item de I no CLOSURE(I)

I0

Ersquo rarr E

22 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Como existe um natildeo-terminal E agrave direita de um ponto acrescentamos as produccedilotildees-E com pontos mais agrave esquerda do lado direito dos itens ex

E rarr E + T e E rarr T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

23 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Agora existe um natildeo-terminal T imediatamente agrave direita de um ponto no segundo item incluiacutedo (E rarr T) de modo que acrescentamos as produccedilotildees-T T rarr T F e T rarr F

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

24 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Em seguida o natildeo-terminal F agrave direita de um ponto nos forccedila a incluir os itens Frarr (E) e F rarr id mas nenhum outro item precisa ser acrescentado

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr (E)

F rarr id

25 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Um modo conveniente de implementar a funccedilatildeo de fechamento (closure) eacute manter um arranjo booleano added indexado pelos natildeo-terminais de G de modo que added[B] seja definido como verdadeiro (true) se e quando incluirmos o item B rarr γ para cada produccedilatildeo-B B rarr γ

SetOfItems CLOSURE(I)

J=I

repeat

for (cada item A rarr αBβ em J)

for (cada produccedilatildeo B rarr γ de G)

if (B rarr γ natildeo estaacute em J)

Adicione B rarr γ em J

until mais nenhum item seja adicionado a J em um passo do loop

return J

Ix

A rarr αBβ

B rarr γ

26 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Observe que se uma produccedilatildeo-B for incluiacuteda no fechamento de I com o ponto mais agrave esquerda do seu lado direito entatildeo todas as produccedilotildees-B seratildeo igualmente incluiacutedas no fechamento Ex A rarr αBβ

Uma lista de natildeo-terminais B cujas produccedilotildees foram incluiacutedas dessa forma eacute suficiente Dividimos todos os conjuntos de itens de interesse em duas classes

1 Itens de base (kernel) o item inicial Srsquo rarr S e todos itens cujos pontos natildeo estatildeo mais agrave esquerda em seus lados direitos

2 Itens que natildeo satildeo de base todos os itens com seus pontos mais agrave esquerda em seus lados direitos exceto Srsquo rarr S Ex B rarr γ

Ix

A rarr αBβ

B rarr γ

27 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Aleacutem do mais cada conjunto de itens de interesse eacute formado a partir do fechamento de um conjunto de itens de base

Os itens adicionados no fechamento nunca podem ser itens de base naturalmente

Assim podemos representar os conjuntos de itens em que realmente estamos interessados com pouca memoacuteria se desprezarmos todos que natildeo satildeo itens de base sabendo que esses podem ser gerados novamente no processo de fechamento Ex B rarr γ exceto Srsquo rarr S

Ix

A rarr αBβ

B rarr γ

28 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

A segunda funccedilatildeo usada na construccedilatildeo da coleccedilatildeo canocircnica LR(0) eacute a funccedilatildeo de transiccedilatildeo GOTO(I X) onde I eacute o conjunto de itens de base e X eacute um siacutembolo da gramaacutetica

GOTO(I X) eacute definido como fechamento do conjunto de todos os itens [ArarrαXβ] tais que

[A rarr αXβ] estaacute em I

A funccedilatildeo de transiccedilatildeo GOTO eacute utilizada para definir as transaccedilotildees no autocircmato LR(0) para uma gramaacutetica

I1

Ersquo rarr E

E rarr E + T

I0

Ersquo rarr E

E rarr E + T

E

29 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Estados do autocircmato correspondem aos conjuntos de itens e GOTO(I +) especifica a transaccedilatildeo do estado I para um novo estado I sob a entrada X

Se I representa o conjunto com dois itens [Ersquo rarr E][E rarr E+T] entatildeo GOTO(I +) conteacutem os itens

Calculamos GOTO(I +) examinando os itens em I com o + imediatamente agrave direita do ponto

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

A rarr αXβ

A rarr αXβ

I1

Ersquo rarr E

E rarr E + T +

I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

30 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Calculamos GOTO(I +) examinando os itens em I com o + imediatamente agrave direita do ponto

O item Ersquo rarr E natildeo eacute desse tipo mas Ersquo rarr E + T sim

Movemos o ponto para imediatamente agrave direita de + e obtemos ErarrE + T

e entatildeo calculamos o fechamento desse conjunto unitaacuterio

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Itens em I

[Ersquo rarr E]

[E rarr E+T]

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I1

Ersquo rarr E

E rarr E + T +

31 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Agora estamos prontos para construir C a coleccedilatildeo canocircnica de conjuntos

de itens LR(0) para uma gramaacutetica estendida Grsquo

void Itens(Grsquo)

C = CLOSURE([Srsquo rarr S])

repeat

for (cada conjunto de itens I em C)

for (cada siacutembolo da gramaacutetica X)

if (GOTO(I X) natildeo eacute vazio e natildeo estaacute em C)

Adicione GOTO(I X) em C

until nenhum novo conjunto de itens seja adicionado em C em uma rodada

32 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

A ideia central por traacutes da anaacutelise ldquoLR Simplesrdquo ou SLR eacute a construccedilatildeo do autocircmato LR(0) a partir da gramaacutetica dada

Os estados desses autocircmatos satildeo os conjuntos de itens da coleccedilatildeo LR canocircnica e as transiccedilotildees satildeo dadas pela funccedilatildeo de transiccedilatildeo GOTO

O estado inicial do autocircmato LR eacute dado por CLOSURE([Srsquo rarr S]) onde Srsquo eacute o siacutembolo inicial da gramaacutetica estendida

Todos os estados satildeo estados de aceitaccedilatildeo Nos referimos ao ldquoestado jrdquo como o estado correspondente ao conjunto de itens Ij

33 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E

Aceitar $

I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

34 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Como os autocircmatos LR(0) podem ajudar-nos a decidir por uma das accedilotildees shift-reduce (veja as decisotildees entre shift-reduce a seguir)

Suponha que a cadeia γ dos siacutembolos da gramaacutetica leve o autocircmato LR(0) do estado inicial 0 para algum estado j

Desta forma avance sobre o proacuteximo siacutembolo a se o estado j possuir uma transaccedilatildeo sob a

Caso contraacuterio escolha reduzir

Os itens no estado j nos diratildeo qual produccedilatildeo usar

35 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

O algoritmo LR abaixo utiliza sua pilha para acompanhar os estados e tambeacutem os siacutembolos da gramaacutetica

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Na verdade

O siacutembolo da gramaacutetica pode ser

recuperado a parir do estado de

modo que a pilha possua estados

ao inveacutes de siacutembolos

36 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Usamos uma pilha

p conter os estados

Os siacutembolos que correspondem aos estados estatildeo na coluna ldquoSiacutembolosrdquo

A pilha da linha (1) tecircm o estado inicial 0 do autocircmato

37 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Portanto fazemos a transferecircncia

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

O siacutembolo da linha 1 eacute o marcador de fundo da pilha $

O proacuteximo siacutembolo de entrada eacute id e o estado 0 tem uma transiccedilatildeo sob id p o estado 5

38 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

A partir do item [F rarr id ] no estado 5 efetuamos uma reduccedilatildeo segundo a produccedilatildeo F rarr id

Na linha 2 o estado 5 eacute empilhado (siacutembolo id)

I5

F rarr id

Natildeo haacute transiccedilatildeo a partir do estado 5 sob a entrada por isso reduzimos

39 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o lado direito da produccedilatildeo da linha (2) eacute id correspondendo ao estado 5 e seu lado direito eacute o F

Com os estados ao desempilhar o estado 5 correspondendo ao siacutembolo id o estado 0 passa a ser o topo

0 F $

40 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id I3

T rarr F

F

Procuramos uma transiccedilatildeo sob F o lado esquerdo da produccedilatildeo

0 F $

O estado 0 possui uma transiccedilatildeo em F p o estado 3 onde empilhamos o estado 3 com o siacutembolo F Ver linha (3)

3

41 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I3

T rarr F

Natildeo haacute transiccedilatildeo a partir do estado 3 sob a entrada por isso reduzimos

A partir do item [T rarr F ] no estado 3 efetuamos uma reduccedilatildeo segundo a produccedilatildeo T rarr F

3

0

T $

42 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

I7

T rarr T F

F rarr ( E )

F rarr id

id

Como outro exemplo considere a linha (5) com o estado 7 referente ao siacutembolo no topo da pilha

Esse estado 7 possui uma transaccedilatildeo para o estado 5 sob a entrada id de modo que empilhamos o estado 5

43 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o estado 5 natildeo possui transiccedilotildees de modo que reduzimos segundo F rarr id

quando removemos da pilha o estado 5 correspondente ao lado direito id o estado 7 passa a ser o topo da pilha

44 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Como o estado 7 possui uma transaccedilatildeo sob F para o estado 10 empilhamos o estado 10 (siacutembolo F)

I7

T rarr T F

F rarr ( E )

F rarr id

I10

T rarr T F

F

45 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O algoritmo eacute o mesmo para todos

os analisadores sintaacuteticos LR

Soacute a tabela de anaacutelise eacute diferente

de um analisador para o outro

O algoritmo lecirc caracteres de um

buffer de entrada um de cada vez

46 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O analisador sintaacutetico shift-reduce

transfere um siacutembolo para pilha jaacute

o analisador sintaacutetico LR transfere

um estado

Cada estado resume a informaccedilatildeo

contida na pilha abaixo dele

47 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

A pilha conteacutem uma sequencia de

estados s0s1 sm onde sm estaacute

no topo

No meacutetodo SLR a pilha conteacutem

estados do autocircmato LR(0)

Por construccedilatildeo a cada estado eacute

associado 1 siacutembolo da gramaacutetica

48 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Lembrem-se de que os estados

correspondem a conj de itens e

que haacute uma transiccedilatildeo do estado i

para o estado j se GOTO(Ii X) = Ij

Todas as transiccedilotildees para o estado

j devem ser para o mesmo siacutembolo

da gramaacutetica X

49 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

Sm

Sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Desta forma cada estado exceto

o estado inicial 0 possui um uacutenico

siacutembolo da gramaacutetica associado a

ele

50 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

A tabela LR consiste em duas partes ACTION uma funccedilatildeo de accedilatildeo de anaacutelise e GOTO uma funccedilatildeo de transiccedilatildeo

1 A funccedilatildeo ACTION recebe como argumentos um estado i e um estado a (ou $) O valor de ACTION(i a) pode ter um dos quatro formatos

a) Shift j onde j eacute um estado

A accedilatildeo tomada pelo analisador sintaacutetico efetivamente transfere a entrada a para a pilha mas usa o estado j para representar a

51 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

b) Reduce Ararr β A accedilatildeo do analisador efetivamente reduz β no topo da pilha para A o lado esquerdo da produccedilatildeo

c) Accept O analisador aceita a entrada e termina a anaacutelise

d) Error O analisador descobre um erro em sua entrada passa o controle p o recuperador de erro que toma alguma accedilatildeo corretiva

2 Estendemos a funccedilatildeo GOTO definida sobre um conjunto de itens para os estados se GOTO(Ii A) = Ij entatildeo GOTO tambeacutem mapeia um estado i e um natildeo-terminal A para o estado j

52 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

Para descrever o comportamento de uma analisador LR eacute recomendaacutevel ter uma notaccedilatildeo representado o estado completo do analisador sua pilha e a entrada restante

Uma configuraccedilatildeo p um analisador LR eacute um par (s0s1sm aiai+1an $) O primeiro componente eacute o conteuacutedo da pilha com o topo agrave direita e o segundo componente representa a entrada restante

Essa configuraccedilatildeo representa a seguinte forma sentencial agrave direita (X0X1Xmaiai+1an) Assim como faria um analisador shift-reduce

53 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

A uacutenica diferenccedila eacute que em inveacutes de siacutembolos da gramaacutetica a pilha conteacutem estados a partir dos quais os siacutembolos da gramaacutetica podem ser recuperados

Ou seja Xi eacute o siacutembolo da gramaacutetica representado pelo estado si

Observe que s0 o estado inicial do analisador sintaacutetico natildeo representa um siacutembolo da gramaacutetica e serve como marcador de fundo da pilha aleacutem de desempenhar um papel importante na anaacutelise

54 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

O proacuteximo movimento do analisador a partir da configuraccedilatildeo dada eacute determinado pela leitura de ai o siacutembolo de entrada corrente e sm o estado do topo da pilha e entatildeo consultando a entrada ACTION[sm ai] na tabela de accedilatildeo de anaacutelise

As configuraccedilotildees restantes apoacutes cada um dos quatro tipos de movimentaccedilatildeo satildeo as seguintes

1 Se ACTION[Sm ai] = shift s o analisador sintaacutetico executa um movimento de transferecircncia (shift move) ele empilha o estado s e avanccedila da entrada resultando na configuraccedilatildeo (s0s1 sm ai+1an $)

55 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2 Se ACTION[Sm ai]=reduce Ararrβ entatildeo o analisador sintaacutetico executa um movimento de reduzir (reduce move) resultando na configuraccedilatildeo (s0s1 sm-rs aiai+1an $)

onde r eacute o comprimento de β e s = GOTO[sm-r A]

Aqui o analisador sintaacutetico incialmente desempilhou os r siacutembolos de estado da pilha expondo o estado sm-r

O analisador sintaacutetico entatildeo empilhou s a entrada para GOTO[sm-r A] na pilha O siacutembolo corrente da entrada natildeo eacute alterado em um movimento de reduzir

56 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2

Para os LR que construiremos Xm-r+1Xm a sequencia de siacutembolos da gramaacutetica correspondendo aos estados retirados da pilha sempre iratildeo casar com β o lado direito da produccedilatildeo sendo reduzida

A saiacuteda de um analisador LR eacute gerada apoacutes um movimento de reduzir executando a accedilatildeo semacircntica associada agrave produccedilatildeo que estaacute sendo reduzida

No momento vamos considerar que a saiacuteda consiste soacute na impressatildeo da produccedilatildeo de reduccedilatildeo

57 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

3 Se ACTION[sm ai] = accept a anaacutelise estaacute concluiacuteda

4 Se ACTION[sm ai] = error o analisador sintaacutetico descobriu um erro e ativa uma rotina para recuperaccedilatildeo de erro

Todos os analisadores sintaacuteticos LR se comportam dessa maneira

A uacutenica diferenccedila entre eles diz respeito a informaccedilatildeo contida nos campos ACTION e GOTO da tabela de anaacutelise

O algoritmo de anaacutelise LR eacute resumido nos proacuteximos slides

58 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

Entrada Uma cadeia de entrada w e uma tabela de anaacutelise com funccedilotildees ACTION e GOTO para uma gramaacutetica G

Saiacuteda Se w estaacute em L(G) os passos os passos de uma reduccedilatildeo de uma anaacutelise ascendente para w

Caso contraacuterio uma indicaccedilatildeo de erro

Meacutetodo Inicialmente o analisador sintaacutetico possui w$ no buffer de entrada e s0 em sua pilha onde s0 representa o estado inicial

O analisador sintaacutetico entatildeo executa o algoritmo

59 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

[PSEUDO] seja a o primeiro siacutembolo de w$ while (1) Seja s o estado no topo da pilha if (ACTION[s a] = shift t) empilha t na pilha seja a o proacuteximo siacutembolo da entrada else if (ACTION[s a] = reduce Ararr β) desempilha siacutembolos |β| da pilha faccedila o estado t agora ser o topo da pilha empilhe GOTO[t A] na pilha imprima a produccedilatildeo Ararr β else if (ACTION[s a] = accept) pare a anaacutelise terminou

else chame uma rotina de recuperaccedilatildeo de erros

60 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR ndash Exemplo

A tabela do proacuteximo slide monstra as funccedilotildees ACTION e GOTO de uma tabela de anaacutelise LR para a gramaacutetica de expressatildeo estudada nesta aula e repetida aqui com produccedilotildees numeradas

Os coacutedigos para as accedilotildees satildeo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

(1) E rarr E + T

(2) E rarr T

(3) T rarr T F

(4) T rarr F

(5) F rarr ( E )

(6) F rarr id

1 Si significa avanccedila na entrada e empilha o estado i na pilha

2 Rj significa reduce segundo a produccedilatildeo de nuacutemero j

3 Acc significa accept

4 Entrada em branco significa error

61 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Estado ACTION

id + ( ) $

0 s5 s4

1 S6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4

5 r6 r6 r6 r6

6 s5 s4

7 s5 s4

8 r6 s11

9 s1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

GOTO

E T F

1 2 3

8 2 3

9 3

10

O valor de GOTO(s a) para o

terminal a estaacute em ACTION da

tabela de anaacutelise conectado agrave

accedilatildeo de transferecircncia sob a

entrada a e o estado s

O GOTO fornece o GOTO[s a]

para os natildeo-terminais A

Ok

Mas como eu consigo os dados

desta tabela

62 Geovane Griesang

A sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

FOLLOW(E) = FOLLOW(Ersquo) = ) $

FOLLOW(T) = FOLLOW(Trsquo) = + ) $

FOLLOW(F) = + ) $

63 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Construindo tabelas de anaacutelise SLR

Esse meacutetodo eacute o mais simples dos LRs Vamos nos referir a tabela de anaacutelise construiacuteda por este meacutetodo como uma tabela SLR e o analisador LR usando uma tabela SLR como um analisador sintaacutetico SLR

O meacutetodo SLR comeccedila com os itens LR(0) e autocircmatos LR(0) ou seja dada uma gramaacutetica G estendemos G para produzir Grsquo com o novo siacutembolo inicial Srsquo A partir de Grsquo construiacutemos C a coleccedilatildeo canocircnica de conj de itens para Grsquo junto com a funccedilatildeo GOTO

Para construir as entradas ACTION e GOTO da tabela de anaacutelise usando o algoritmo a seguir eacute preciso que conheccedilamos FOLLOW(A) para cada natildeo-terminal A de uma gramaacutetica

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 6: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

6 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR

O uso desse tipo de analisador eacute atraente por vaacuterios motivos

Os analisadores LR satildeo capazes de reconhecer praticamente todas as construccedilotildees sintaacuteticas definidas por Gramaacuteticas Livre de Contexto (GLC) da maioria das linguagens de programaccedilatildeo

Existem gramaacuteticas que natildeo satildeo LR mas geralmente elas podem ser evitadas para construccedilotildees tiacutepicas das ling de programaccedilatildeo

7 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR

O LR aleacutem de ser o meacutetodo de anaacutelise shift-reduce sem retrocesso mais geral pode ser implementado com o mesmo grau de eficiecircncia espaccedilo e tamanho que outro meacutetodos shift-reduce

Um analisador LR detecta um erro sintaacutetico tatildeo logo ele aparece na cadeia de entrada em uma escansatildeo da entrada da esquerda para direita

8 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR

A classe de gramaacuteticas que podem ser reconhecidas com o uso dos meacutetodos LR eacute um superconjunto proacuteprio da classe de gramaacuteticas que podem ser reconhecidas com os meacutetodos preditivos e LL

Para uma gramaacutetica ser LR(k) ela deve ser capaz de reconhecer a ocorrecircncia do lado direito de uma produccedilatildeo em forma sentencial mais agrave direita com k siacutembolos a frente da entrada

Esse requisito eacute menos rigoroso que aquele das gramaacuteticas LL(k)

9 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR

Relembrando

Na LL(k) para reconhecer o uso de uma produccedilatildeo o analisador vecirc apenas os k primeiros siacutembolos que o seu lado direito deriva

Assim natildeo eacute surpresa que as gramaacuteticas LR possam descrever mais linguagens do que as gramaacuteticas LL

Para uma gramaacutetica ser LR(k) ela deve ser capaz de reconhecer

a ocorrecircncia do lado direito de uma produccedilatildeo em forma sentencial

mais agrave direita com k siacutembolos a frente da entrada

10 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR

A principal desvantagem do meacutetodo LR estaacute relacionada com a geraccedilatildeo do analisador sua construccedilatildeo a matildeo p uma linguagem de programaccedilatildeo tiacutepica eacute muito trabalhosa

Portanto eacute necessaacuterio o uso de uma ferramenta especializada um gerador de analisador LR

Felizmente muitos desses geradores estatildeo disponiacuteveis como por exemplo o Yacc Esse gerador recebe como entrada um GLC e produz automaticamente como saiacuteda um analisador sintaacutetico para esta gramaacutetica

11 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Reduccedilotildees - Exemplo

A derivaccedilatildeo segue a seguinte sequencia de cadeias

id id F id T id T F T E

Entrada id id

Neste ponto temos duas opccedilotildees de reduccedilatildeo podemos reduzir a cadeia T para E segundo a produccedilatildeo E rarr T e a cadeia consistindo no segundo id que representa o lado direito de F rarr id Escolhemos a segunda opccedilatildeo e reduzimos id para F produzindo a cadeia T F

id id

F rarr id F id

T rarr F T id

E rarr T E id ou F rarr id T F

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

12 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Itens e o autocircmato LR

Como o analisador sintaacutetico shift-reduce sabe quando transferir p a pilha e quando reduzir

Ex Dado o conteuacutedo de pilha $T e o proacuteximo siacutembolo da entrada como o analisador sabe que T no topo da pilha natildeo eacute um handle de modo que a accedilatildeo apropriada seja transferir o ldquordquo para a pilha e natildeo reduzir T para E

Entrada id id E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

id id

F rarr id F id

T rarr F T id

E rarr T E id ou F rarr id T F

13 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Itens e o autocircmato LR

Um analisador LR decide sobre as accedilotildees shift-reduce mantendo estados para acompanhar onde se encontra a anaacutelise

Os estados representam conjuntos de ldquoitensrdquo

Um item LR(0) de uma gramaacutetica G eacute a produccedilatildeo de G com um ponto em alguma posiccedilatildeo do seu lado direito

A produccedilatildeo A rarr XYZ gera os quatro itens A rarr XYZ

A rarr XYZ

A rarr XYZ

A rarr XYZ A produccedilatildeo A rarr 120576 gera apenas um item A rarr

14 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR - Itens e o autocircmato LR Representaccedilatildeo dos conjuntos de itens

Um gerador de analisadores sintaacuteticos que produz um analisador ascendente

deve representar os itens e conjunto de itens convenientemente

Um item pode ser representado por um par de inteiros onde o primeiro

representa o nuacutemero de uma das produccedilotildees da gramaacutetica subjacente e o

segundo indica a posiccedilatildeo do ponto

Conjuntos de itens podem ser representados por uma lista desses pares

A rarr XYZ

A rarr XYZ

A rarr XYZ

A rarr XYZ

15 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR - Itens e o autocircmato LR Representaccedilatildeo dos conjuntos de itens

O conjunto de itens necessaacuterios frequentemente incluem itens de

ldquofechamentordquo (ldquoclosurerdquo) onde o ponto estaacute no iniacutecio do corpo

Esses itens sempre podem ser reconstruiacutedos a partir dos outros itens no

conjunto e natildeo temos de incluiacute-los na lista

A rarr XYZ

A rarr XYZ

A rarr XYZ

A rarr XYZ

16 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Itens e o autocircmato LR

Um item indica quanto de uma produccedilatildeo jaacute foi visto em determinado ponto no processo de reconhecimento sintaacutetico Ex

O item ArarrXYZ indica o iniacutecio da busca de uma cadeia derivaacutevel de XYZ na entrada

O item A rarr XYZ indica que no ponto atual onde se encontra a anaacutelise uma cadeia X jaacute foi encontrada e que esperamos em seguida ver uma cadeia derivaacutevel de YZ

O item A rarr XYZ indica o fim da busca ou seja jaacute derivamos o lado direito XYZ de A e que pode ser o momento de reduzir XYZ para A

A rarr XYZ

A rarr XYZ

A rarr XYZ

A rarr XYZ

17 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Itens e o autocircmato LR

Uma coleccedilatildeo de conj de itens LR(0) chamada coleccedilatildeo LR(0) canocircnica oferece a base para construccedilatildeo de um autocircmato finito determinista que eacute usado para dirigir as decisotildees durante a anaacutelise

Esse autocircmato eacute chamado de autocircmato LR(0)

Em particular cada estado do autocircmato LR(0) representa um conjunto de itens na coleccedilatildeo LR(0) canocircnica

18 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Exemplo Para construir a coleccedilatildeo LR(0) canocircnica para uma gramaacutetica definimos uma gramaacutetica estendida e duas funccedilotildees

funccedilatildeo de fechamento (function CLOSURE)

funccedilatildeo de transiccedilatildeo (function GOTO)

Se G eacute uma gramaacutetica com siacutembolo inicial S entatildeo Grsquo eacute uma gramaacutetica estendida para G com o novo siacutembolo inicial Srsquo e a produccedilatildeo Srsquo rarr S

O objetivo dessa nova produccedilatildeo eacute simplificar a identificaccedilatildeo de quando o reconhecedor sintaacutetico deve parar e anunciar a aceitaccedilatildeo da cadeia de entrada

Ou seja a aceitaccedilatildeo ocorre se e somente se o analisador estiver para reduzir por Srsquo rarr S

19 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Se I eacute um conj de itens para a gramaacutetica G entatildeo CLOSURE(I) eacute o conj de itens construiacutedos a partir de I pelas duas regras

1 Inicialmente acrescente todo item de I no CLOSURE(I)

2 Se A rarr αBβ estaacute em CLOSEURE(I) e B rarr γ eacute uma produccedilatildeo entatildeo adicione o item B rarr γ em CLOSURE(I) se ele ainda natildeo estaacute laacute

Ix

A rarr αBβ

B rarr γ

20 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Intuitivamente A rarr αBβ em CLOSURE(I) indica que em algum ponto no processo de reconhecimento os itens correspondentes as produccedilotildees-B devem ser acrescentados para dirigir a busca por B

A subcadeia derivaacutevel de Bβ na entrada teraacute um prefixo derivaacutevel de B aplicando umas das produccedilotildees-B

Portanto incluiacutemos itens para todas as produccedilotildees-B ou seja se B rarr γ eacute uma produccedilatildeo tambeacutem incluiacutemos B rarr γ em CLOSURE(I) este processo eacute conhecido como fechamento de estado

Ix

A rarr αBβ

B rarr γ

21 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

P ver como o fechamento de um estado eacute computado Ersquo rarr E eacute colocado em CLOSURE(I) pela regra (1)

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Acrescente todo item de I no CLOSURE(I)

I0

Ersquo rarr E

22 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Como existe um natildeo-terminal E agrave direita de um ponto acrescentamos as produccedilotildees-E com pontos mais agrave esquerda do lado direito dos itens ex

E rarr E + T e E rarr T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

23 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Agora existe um natildeo-terminal T imediatamente agrave direita de um ponto no segundo item incluiacutedo (E rarr T) de modo que acrescentamos as produccedilotildees-T T rarr T F e T rarr F

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

24 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Em seguida o natildeo-terminal F agrave direita de um ponto nos forccedila a incluir os itens Frarr (E) e F rarr id mas nenhum outro item precisa ser acrescentado

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr (E)

F rarr id

25 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Um modo conveniente de implementar a funccedilatildeo de fechamento (closure) eacute manter um arranjo booleano added indexado pelos natildeo-terminais de G de modo que added[B] seja definido como verdadeiro (true) se e quando incluirmos o item B rarr γ para cada produccedilatildeo-B B rarr γ

SetOfItems CLOSURE(I)

J=I

repeat

for (cada item A rarr αBβ em J)

for (cada produccedilatildeo B rarr γ de G)

if (B rarr γ natildeo estaacute em J)

Adicione B rarr γ em J

until mais nenhum item seja adicionado a J em um passo do loop

return J

Ix

A rarr αBβ

B rarr γ

26 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Observe que se uma produccedilatildeo-B for incluiacuteda no fechamento de I com o ponto mais agrave esquerda do seu lado direito entatildeo todas as produccedilotildees-B seratildeo igualmente incluiacutedas no fechamento Ex A rarr αBβ

Uma lista de natildeo-terminais B cujas produccedilotildees foram incluiacutedas dessa forma eacute suficiente Dividimos todos os conjuntos de itens de interesse em duas classes

1 Itens de base (kernel) o item inicial Srsquo rarr S e todos itens cujos pontos natildeo estatildeo mais agrave esquerda em seus lados direitos

2 Itens que natildeo satildeo de base todos os itens com seus pontos mais agrave esquerda em seus lados direitos exceto Srsquo rarr S Ex B rarr γ

Ix

A rarr αBβ

B rarr γ

27 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Aleacutem do mais cada conjunto de itens de interesse eacute formado a partir do fechamento de um conjunto de itens de base

Os itens adicionados no fechamento nunca podem ser itens de base naturalmente

Assim podemos representar os conjuntos de itens em que realmente estamos interessados com pouca memoacuteria se desprezarmos todos que natildeo satildeo itens de base sabendo que esses podem ser gerados novamente no processo de fechamento Ex B rarr γ exceto Srsquo rarr S

Ix

A rarr αBβ

B rarr γ

28 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

A segunda funccedilatildeo usada na construccedilatildeo da coleccedilatildeo canocircnica LR(0) eacute a funccedilatildeo de transiccedilatildeo GOTO(I X) onde I eacute o conjunto de itens de base e X eacute um siacutembolo da gramaacutetica

GOTO(I X) eacute definido como fechamento do conjunto de todos os itens [ArarrαXβ] tais que

[A rarr αXβ] estaacute em I

A funccedilatildeo de transiccedilatildeo GOTO eacute utilizada para definir as transaccedilotildees no autocircmato LR(0) para uma gramaacutetica

I1

Ersquo rarr E

E rarr E + T

I0

Ersquo rarr E

E rarr E + T

E

29 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Estados do autocircmato correspondem aos conjuntos de itens e GOTO(I +) especifica a transaccedilatildeo do estado I para um novo estado I sob a entrada X

Se I representa o conjunto com dois itens [Ersquo rarr E][E rarr E+T] entatildeo GOTO(I +) conteacutem os itens

Calculamos GOTO(I +) examinando os itens em I com o + imediatamente agrave direita do ponto

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

A rarr αXβ

A rarr αXβ

I1

Ersquo rarr E

E rarr E + T +

I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

30 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Calculamos GOTO(I +) examinando os itens em I com o + imediatamente agrave direita do ponto

O item Ersquo rarr E natildeo eacute desse tipo mas Ersquo rarr E + T sim

Movemos o ponto para imediatamente agrave direita de + e obtemos ErarrE + T

e entatildeo calculamos o fechamento desse conjunto unitaacuterio

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Itens em I

[Ersquo rarr E]

[E rarr E+T]

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I1

Ersquo rarr E

E rarr E + T +

31 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Agora estamos prontos para construir C a coleccedilatildeo canocircnica de conjuntos

de itens LR(0) para uma gramaacutetica estendida Grsquo

void Itens(Grsquo)

C = CLOSURE([Srsquo rarr S])

repeat

for (cada conjunto de itens I em C)

for (cada siacutembolo da gramaacutetica X)

if (GOTO(I X) natildeo eacute vazio e natildeo estaacute em C)

Adicione GOTO(I X) em C

until nenhum novo conjunto de itens seja adicionado em C em uma rodada

32 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

A ideia central por traacutes da anaacutelise ldquoLR Simplesrdquo ou SLR eacute a construccedilatildeo do autocircmato LR(0) a partir da gramaacutetica dada

Os estados desses autocircmatos satildeo os conjuntos de itens da coleccedilatildeo LR canocircnica e as transiccedilotildees satildeo dadas pela funccedilatildeo de transiccedilatildeo GOTO

O estado inicial do autocircmato LR eacute dado por CLOSURE([Srsquo rarr S]) onde Srsquo eacute o siacutembolo inicial da gramaacutetica estendida

Todos os estados satildeo estados de aceitaccedilatildeo Nos referimos ao ldquoestado jrdquo como o estado correspondente ao conjunto de itens Ij

33 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E

Aceitar $

I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

34 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Como os autocircmatos LR(0) podem ajudar-nos a decidir por uma das accedilotildees shift-reduce (veja as decisotildees entre shift-reduce a seguir)

Suponha que a cadeia γ dos siacutembolos da gramaacutetica leve o autocircmato LR(0) do estado inicial 0 para algum estado j

Desta forma avance sobre o proacuteximo siacutembolo a se o estado j possuir uma transaccedilatildeo sob a

Caso contraacuterio escolha reduzir

Os itens no estado j nos diratildeo qual produccedilatildeo usar

35 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

O algoritmo LR abaixo utiliza sua pilha para acompanhar os estados e tambeacutem os siacutembolos da gramaacutetica

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Na verdade

O siacutembolo da gramaacutetica pode ser

recuperado a parir do estado de

modo que a pilha possua estados

ao inveacutes de siacutembolos

36 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Usamos uma pilha

p conter os estados

Os siacutembolos que correspondem aos estados estatildeo na coluna ldquoSiacutembolosrdquo

A pilha da linha (1) tecircm o estado inicial 0 do autocircmato

37 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Portanto fazemos a transferecircncia

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

O siacutembolo da linha 1 eacute o marcador de fundo da pilha $

O proacuteximo siacutembolo de entrada eacute id e o estado 0 tem uma transiccedilatildeo sob id p o estado 5

38 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

A partir do item [F rarr id ] no estado 5 efetuamos uma reduccedilatildeo segundo a produccedilatildeo F rarr id

Na linha 2 o estado 5 eacute empilhado (siacutembolo id)

I5

F rarr id

Natildeo haacute transiccedilatildeo a partir do estado 5 sob a entrada por isso reduzimos

39 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o lado direito da produccedilatildeo da linha (2) eacute id correspondendo ao estado 5 e seu lado direito eacute o F

Com os estados ao desempilhar o estado 5 correspondendo ao siacutembolo id o estado 0 passa a ser o topo

0 F $

40 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id I3

T rarr F

F

Procuramos uma transiccedilatildeo sob F o lado esquerdo da produccedilatildeo

0 F $

O estado 0 possui uma transiccedilatildeo em F p o estado 3 onde empilhamos o estado 3 com o siacutembolo F Ver linha (3)

3

41 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I3

T rarr F

Natildeo haacute transiccedilatildeo a partir do estado 3 sob a entrada por isso reduzimos

A partir do item [T rarr F ] no estado 3 efetuamos uma reduccedilatildeo segundo a produccedilatildeo T rarr F

3

0

T $

42 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

I7

T rarr T F

F rarr ( E )

F rarr id

id

Como outro exemplo considere a linha (5) com o estado 7 referente ao siacutembolo no topo da pilha

Esse estado 7 possui uma transaccedilatildeo para o estado 5 sob a entrada id de modo que empilhamos o estado 5

43 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o estado 5 natildeo possui transiccedilotildees de modo que reduzimos segundo F rarr id

quando removemos da pilha o estado 5 correspondente ao lado direito id o estado 7 passa a ser o topo da pilha

44 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Como o estado 7 possui uma transaccedilatildeo sob F para o estado 10 empilhamos o estado 10 (siacutembolo F)

I7

T rarr T F

F rarr ( E )

F rarr id

I10

T rarr T F

F

45 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O algoritmo eacute o mesmo para todos

os analisadores sintaacuteticos LR

Soacute a tabela de anaacutelise eacute diferente

de um analisador para o outro

O algoritmo lecirc caracteres de um

buffer de entrada um de cada vez

46 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O analisador sintaacutetico shift-reduce

transfere um siacutembolo para pilha jaacute

o analisador sintaacutetico LR transfere

um estado

Cada estado resume a informaccedilatildeo

contida na pilha abaixo dele

47 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

A pilha conteacutem uma sequencia de

estados s0s1 sm onde sm estaacute

no topo

No meacutetodo SLR a pilha conteacutem

estados do autocircmato LR(0)

Por construccedilatildeo a cada estado eacute

associado 1 siacutembolo da gramaacutetica

48 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Lembrem-se de que os estados

correspondem a conj de itens e

que haacute uma transiccedilatildeo do estado i

para o estado j se GOTO(Ii X) = Ij

Todas as transiccedilotildees para o estado

j devem ser para o mesmo siacutembolo

da gramaacutetica X

49 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

Sm

Sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Desta forma cada estado exceto

o estado inicial 0 possui um uacutenico

siacutembolo da gramaacutetica associado a

ele

50 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

A tabela LR consiste em duas partes ACTION uma funccedilatildeo de accedilatildeo de anaacutelise e GOTO uma funccedilatildeo de transiccedilatildeo

1 A funccedilatildeo ACTION recebe como argumentos um estado i e um estado a (ou $) O valor de ACTION(i a) pode ter um dos quatro formatos

a) Shift j onde j eacute um estado

A accedilatildeo tomada pelo analisador sintaacutetico efetivamente transfere a entrada a para a pilha mas usa o estado j para representar a

51 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

b) Reduce Ararr β A accedilatildeo do analisador efetivamente reduz β no topo da pilha para A o lado esquerdo da produccedilatildeo

c) Accept O analisador aceita a entrada e termina a anaacutelise

d) Error O analisador descobre um erro em sua entrada passa o controle p o recuperador de erro que toma alguma accedilatildeo corretiva

2 Estendemos a funccedilatildeo GOTO definida sobre um conjunto de itens para os estados se GOTO(Ii A) = Ij entatildeo GOTO tambeacutem mapeia um estado i e um natildeo-terminal A para o estado j

52 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

Para descrever o comportamento de uma analisador LR eacute recomendaacutevel ter uma notaccedilatildeo representado o estado completo do analisador sua pilha e a entrada restante

Uma configuraccedilatildeo p um analisador LR eacute um par (s0s1sm aiai+1an $) O primeiro componente eacute o conteuacutedo da pilha com o topo agrave direita e o segundo componente representa a entrada restante

Essa configuraccedilatildeo representa a seguinte forma sentencial agrave direita (X0X1Xmaiai+1an) Assim como faria um analisador shift-reduce

53 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

A uacutenica diferenccedila eacute que em inveacutes de siacutembolos da gramaacutetica a pilha conteacutem estados a partir dos quais os siacutembolos da gramaacutetica podem ser recuperados

Ou seja Xi eacute o siacutembolo da gramaacutetica representado pelo estado si

Observe que s0 o estado inicial do analisador sintaacutetico natildeo representa um siacutembolo da gramaacutetica e serve como marcador de fundo da pilha aleacutem de desempenhar um papel importante na anaacutelise

54 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

O proacuteximo movimento do analisador a partir da configuraccedilatildeo dada eacute determinado pela leitura de ai o siacutembolo de entrada corrente e sm o estado do topo da pilha e entatildeo consultando a entrada ACTION[sm ai] na tabela de accedilatildeo de anaacutelise

As configuraccedilotildees restantes apoacutes cada um dos quatro tipos de movimentaccedilatildeo satildeo as seguintes

1 Se ACTION[Sm ai] = shift s o analisador sintaacutetico executa um movimento de transferecircncia (shift move) ele empilha o estado s e avanccedila da entrada resultando na configuraccedilatildeo (s0s1 sm ai+1an $)

55 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2 Se ACTION[Sm ai]=reduce Ararrβ entatildeo o analisador sintaacutetico executa um movimento de reduzir (reduce move) resultando na configuraccedilatildeo (s0s1 sm-rs aiai+1an $)

onde r eacute o comprimento de β e s = GOTO[sm-r A]

Aqui o analisador sintaacutetico incialmente desempilhou os r siacutembolos de estado da pilha expondo o estado sm-r

O analisador sintaacutetico entatildeo empilhou s a entrada para GOTO[sm-r A] na pilha O siacutembolo corrente da entrada natildeo eacute alterado em um movimento de reduzir

56 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2

Para os LR que construiremos Xm-r+1Xm a sequencia de siacutembolos da gramaacutetica correspondendo aos estados retirados da pilha sempre iratildeo casar com β o lado direito da produccedilatildeo sendo reduzida

A saiacuteda de um analisador LR eacute gerada apoacutes um movimento de reduzir executando a accedilatildeo semacircntica associada agrave produccedilatildeo que estaacute sendo reduzida

No momento vamos considerar que a saiacuteda consiste soacute na impressatildeo da produccedilatildeo de reduccedilatildeo

57 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

3 Se ACTION[sm ai] = accept a anaacutelise estaacute concluiacuteda

4 Se ACTION[sm ai] = error o analisador sintaacutetico descobriu um erro e ativa uma rotina para recuperaccedilatildeo de erro

Todos os analisadores sintaacuteticos LR se comportam dessa maneira

A uacutenica diferenccedila entre eles diz respeito a informaccedilatildeo contida nos campos ACTION e GOTO da tabela de anaacutelise

O algoritmo de anaacutelise LR eacute resumido nos proacuteximos slides

58 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

Entrada Uma cadeia de entrada w e uma tabela de anaacutelise com funccedilotildees ACTION e GOTO para uma gramaacutetica G

Saiacuteda Se w estaacute em L(G) os passos os passos de uma reduccedilatildeo de uma anaacutelise ascendente para w

Caso contraacuterio uma indicaccedilatildeo de erro

Meacutetodo Inicialmente o analisador sintaacutetico possui w$ no buffer de entrada e s0 em sua pilha onde s0 representa o estado inicial

O analisador sintaacutetico entatildeo executa o algoritmo

59 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

[PSEUDO] seja a o primeiro siacutembolo de w$ while (1) Seja s o estado no topo da pilha if (ACTION[s a] = shift t) empilha t na pilha seja a o proacuteximo siacutembolo da entrada else if (ACTION[s a] = reduce Ararr β) desempilha siacutembolos |β| da pilha faccedila o estado t agora ser o topo da pilha empilhe GOTO[t A] na pilha imprima a produccedilatildeo Ararr β else if (ACTION[s a] = accept) pare a anaacutelise terminou

else chame uma rotina de recuperaccedilatildeo de erros

60 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR ndash Exemplo

A tabela do proacuteximo slide monstra as funccedilotildees ACTION e GOTO de uma tabela de anaacutelise LR para a gramaacutetica de expressatildeo estudada nesta aula e repetida aqui com produccedilotildees numeradas

Os coacutedigos para as accedilotildees satildeo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

(1) E rarr E + T

(2) E rarr T

(3) T rarr T F

(4) T rarr F

(5) F rarr ( E )

(6) F rarr id

1 Si significa avanccedila na entrada e empilha o estado i na pilha

2 Rj significa reduce segundo a produccedilatildeo de nuacutemero j

3 Acc significa accept

4 Entrada em branco significa error

61 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Estado ACTION

id + ( ) $

0 s5 s4

1 S6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4

5 r6 r6 r6 r6

6 s5 s4

7 s5 s4

8 r6 s11

9 s1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

GOTO

E T F

1 2 3

8 2 3

9 3

10

O valor de GOTO(s a) para o

terminal a estaacute em ACTION da

tabela de anaacutelise conectado agrave

accedilatildeo de transferecircncia sob a

entrada a e o estado s

O GOTO fornece o GOTO[s a]

para os natildeo-terminais A

Ok

Mas como eu consigo os dados

desta tabela

62 Geovane Griesang

A sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

FOLLOW(E) = FOLLOW(Ersquo) = ) $

FOLLOW(T) = FOLLOW(Trsquo) = + ) $

FOLLOW(F) = + ) $

63 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Construindo tabelas de anaacutelise SLR

Esse meacutetodo eacute o mais simples dos LRs Vamos nos referir a tabela de anaacutelise construiacuteda por este meacutetodo como uma tabela SLR e o analisador LR usando uma tabela SLR como um analisador sintaacutetico SLR

O meacutetodo SLR comeccedila com os itens LR(0) e autocircmatos LR(0) ou seja dada uma gramaacutetica G estendemos G para produzir Grsquo com o novo siacutembolo inicial Srsquo A partir de Grsquo construiacutemos C a coleccedilatildeo canocircnica de conj de itens para Grsquo junto com a funccedilatildeo GOTO

Para construir as entradas ACTION e GOTO da tabela de anaacutelise usando o algoritmo a seguir eacute preciso que conheccedilamos FOLLOW(A) para cada natildeo-terminal A de uma gramaacutetica

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 7: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

7 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR

O LR aleacutem de ser o meacutetodo de anaacutelise shift-reduce sem retrocesso mais geral pode ser implementado com o mesmo grau de eficiecircncia espaccedilo e tamanho que outro meacutetodos shift-reduce

Um analisador LR detecta um erro sintaacutetico tatildeo logo ele aparece na cadeia de entrada em uma escansatildeo da entrada da esquerda para direita

8 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR

A classe de gramaacuteticas que podem ser reconhecidas com o uso dos meacutetodos LR eacute um superconjunto proacuteprio da classe de gramaacuteticas que podem ser reconhecidas com os meacutetodos preditivos e LL

Para uma gramaacutetica ser LR(k) ela deve ser capaz de reconhecer a ocorrecircncia do lado direito de uma produccedilatildeo em forma sentencial mais agrave direita com k siacutembolos a frente da entrada

Esse requisito eacute menos rigoroso que aquele das gramaacuteticas LL(k)

9 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR

Relembrando

Na LL(k) para reconhecer o uso de uma produccedilatildeo o analisador vecirc apenas os k primeiros siacutembolos que o seu lado direito deriva

Assim natildeo eacute surpresa que as gramaacuteticas LR possam descrever mais linguagens do que as gramaacuteticas LL

Para uma gramaacutetica ser LR(k) ela deve ser capaz de reconhecer

a ocorrecircncia do lado direito de uma produccedilatildeo em forma sentencial

mais agrave direita com k siacutembolos a frente da entrada

10 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR

A principal desvantagem do meacutetodo LR estaacute relacionada com a geraccedilatildeo do analisador sua construccedilatildeo a matildeo p uma linguagem de programaccedilatildeo tiacutepica eacute muito trabalhosa

Portanto eacute necessaacuterio o uso de uma ferramenta especializada um gerador de analisador LR

Felizmente muitos desses geradores estatildeo disponiacuteveis como por exemplo o Yacc Esse gerador recebe como entrada um GLC e produz automaticamente como saiacuteda um analisador sintaacutetico para esta gramaacutetica

11 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Reduccedilotildees - Exemplo

A derivaccedilatildeo segue a seguinte sequencia de cadeias

id id F id T id T F T E

Entrada id id

Neste ponto temos duas opccedilotildees de reduccedilatildeo podemos reduzir a cadeia T para E segundo a produccedilatildeo E rarr T e a cadeia consistindo no segundo id que representa o lado direito de F rarr id Escolhemos a segunda opccedilatildeo e reduzimos id para F produzindo a cadeia T F

id id

F rarr id F id

T rarr F T id

E rarr T E id ou F rarr id T F

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

12 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Itens e o autocircmato LR

Como o analisador sintaacutetico shift-reduce sabe quando transferir p a pilha e quando reduzir

Ex Dado o conteuacutedo de pilha $T e o proacuteximo siacutembolo da entrada como o analisador sabe que T no topo da pilha natildeo eacute um handle de modo que a accedilatildeo apropriada seja transferir o ldquordquo para a pilha e natildeo reduzir T para E

Entrada id id E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

id id

F rarr id F id

T rarr F T id

E rarr T E id ou F rarr id T F

13 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Itens e o autocircmato LR

Um analisador LR decide sobre as accedilotildees shift-reduce mantendo estados para acompanhar onde se encontra a anaacutelise

Os estados representam conjuntos de ldquoitensrdquo

Um item LR(0) de uma gramaacutetica G eacute a produccedilatildeo de G com um ponto em alguma posiccedilatildeo do seu lado direito

A produccedilatildeo A rarr XYZ gera os quatro itens A rarr XYZ

A rarr XYZ

A rarr XYZ

A rarr XYZ A produccedilatildeo A rarr 120576 gera apenas um item A rarr

14 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR - Itens e o autocircmato LR Representaccedilatildeo dos conjuntos de itens

Um gerador de analisadores sintaacuteticos que produz um analisador ascendente

deve representar os itens e conjunto de itens convenientemente

Um item pode ser representado por um par de inteiros onde o primeiro

representa o nuacutemero de uma das produccedilotildees da gramaacutetica subjacente e o

segundo indica a posiccedilatildeo do ponto

Conjuntos de itens podem ser representados por uma lista desses pares

A rarr XYZ

A rarr XYZ

A rarr XYZ

A rarr XYZ

15 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR - Itens e o autocircmato LR Representaccedilatildeo dos conjuntos de itens

O conjunto de itens necessaacuterios frequentemente incluem itens de

ldquofechamentordquo (ldquoclosurerdquo) onde o ponto estaacute no iniacutecio do corpo

Esses itens sempre podem ser reconstruiacutedos a partir dos outros itens no

conjunto e natildeo temos de incluiacute-los na lista

A rarr XYZ

A rarr XYZ

A rarr XYZ

A rarr XYZ

16 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Itens e o autocircmato LR

Um item indica quanto de uma produccedilatildeo jaacute foi visto em determinado ponto no processo de reconhecimento sintaacutetico Ex

O item ArarrXYZ indica o iniacutecio da busca de uma cadeia derivaacutevel de XYZ na entrada

O item A rarr XYZ indica que no ponto atual onde se encontra a anaacutelise uma cadeia X jaacute foi encontrada e que esperamos em seguida ver uma cadeia derivaacutevel de YZ

O item A rarr XYZ indica o fim da busca ou seja jaacute derivamos o lado direito XYZ de A e que pode ser o momento de reduzir XYZ para A

A rarr XYZ

A rarr XYZ

A rarr XYZ

A rarr XYZ

17 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Itens e o autocircmato LR

Uma coleccedilatildeo de conj de itens LR(0) chamada coleccedilatildeo LR(0) canocircnica oferece a base para construccedilatildeo de um autocircmato finito determinista que eacute usado para dirigir as decisotildees durante a anaacutelise

Esse autocircmato eacute chamado de autocircmato LR(0)

Em particular cada estado do autocircmato LR(0) representa um conjunto de itens na coleccedilatildeo LR(0) canocircnica

18 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Exemplo Para construir a coleccedilatildeo LR(0) canocircnica para uma gramaacutetica definimos uma gramaacutetica estendida e duas funccedilotildees

funccedilatildeo de fechamento (function CLOSURE)

funccedilatildeo de transiccedilatildeo (function GOTO)

Se G eacute uma gramaacutetica com siacutembolo inicial S entatildeo Grsquo eacute uma gramaacutetica estendida para G com o novo siacutembolo inicial Srsquo e a produccedilatildeo Srsquo rarr S

O objetivo dessa nova produccedilatildeo eacute simplificar a identificaccedilatildeo de quando o reconhecedor sintaacutetico deve parar e anunciar a aceitaccedilatildeo da cadeia de entrada

Ou seja a aceitaccedilatildeo ocorre se e somente se o analisador estiver para reduzir por Srsquo rarr S

19 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Se I eacute um conj de itens para a gramaacutetica G entatildeo CLOSURE(I) eacute o conj de itens construiacutedos a partir de I pelas duas regras

1 Inicialmente acrescente todo item de I no CLOSURE(I)

2 Se A rarr αBβ estaacute em CLOSEURE(I) e B rarr γ eacute uma produccedilatildeo entatildeo adicione o item B rarr γ em CLOSURE(I) se ele ainda natildeo estaacute laacute

Ix

A rarr αBβ

B rarr γ

20 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Intuitivamente A rarr αBβ em CLOSURE(I) indica que em algum ponto no processo de reconhecimento os itens correspondentes as produccedilotildees-B devem ser acrescentados para dirigir a busca por B

A subcadeia derivaacutevel de Bβ na entrada teraacute um prefixo derivaacutevel de B aplicando umas das produccedilotildees-B

Portanto incluiacutemos itens para todas as produccedilotildees-B ou seja se B rarr γ eacute uma produccedilatildeo tambeacutem incluiacutemos B rarr γ em CLOSURE(I) este processo eacute conhecido como fechamento de estado

Ix

A rarr αBβ

B rarr γ

21 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

P ver como o fechamento de um estado eacute computado Ersquo rarr E eacute colocado em CLOSURE(I) pela regra (1)

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Acrescente todo item de I no CLOSURE(I)

I0

Ersquo rarr E

22 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Como existe um natildeo-terminal E agrave direita de um ponto acrescentamos as produccedilotildees-E com pontos mais agrave esquerda do lado direito dos itens ex

E rarr E + T e E rarr T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

23 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Agora existe um natildeo-terminal T imediatamente agrave direita de um ponto no segundo item incluiacutedo (E rarr T) de modo que acrescentamos as produccedilotildees-T T rarr T F e T rarr F

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

24 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Em seguida o natildeo-terminal F agrave direita de um ponto nos forccedila a incluir os itens Frarr (E) e F rarr id mas nenhum outro item precisa ser acrescentado

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr (E)

F rarr id

25 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Um modo conveniente de implementar a funccedilatildeo de fechamento (closure) eacute manter um arranjo booleano added indexado pelos natildeo-terminais de G de modo que added[B] seja definido como verdadeiro (true) se e quando incluirmos o item B rarr γ para cada produccedilatildeo-B B rarr γ

SetOfItems CLOSURE(I)

J=I

repeat

for (cada item A rarr αBβ em J)

for (cada produccedilatildeo B rarr γ de G)

if (B rarr γ natildeo estaacute em J)

Adicione B rarr γ em J

until mais nenhum item seja adicionado a J em um passo do loop

return J

Ix

A rarr αBβ

B rarr γ

26 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Observe que se uma produccedilatildeo-B for incluiacuteda no fechamento de I com o ponto mais agrave esquerda do seu lado direito entatildeo todas as produccedilotildees-B seratildeo igualmente incluiacutedas no fechamento Ex A rarr αBβ

Uma lista de natildeo-terminais B cujas produccedilotildees foram incluiacutedas dessa forma eacute suficiente Dividimos todos os conjuntos de itens de interesse em duas classes

1 Itens de base (kernel) o item inicial Srsquo rarr S e todos itens cujos pontos natildeo estatildeo mais agrave esquerda em seus lados direitos

2 Itens que natildeo satildeo de base todos os itens com seus pontos mais agrave esquerda em seus lados direitos exceto Srsquo rarr S Ex B rarr γ

Ix

A rarr αBβ

B rarr γ

27 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Aleacutem do mais cada conjunto de itens de interesse eacute formado a partir do fechamento de um conjunto de itens de base

Os itens adicionados no fechamento nunca podem ser itens de base naturalmente

Assim podemos representar os conjuntos de itens em que realmente estamos interessados com pouca memoacuteria se desprezarmos todos que natildeo satildeo itens de base sabendo que esses podem ser gerados novamente no processo de fechamento Ex B rarr γ exceto Srsquo rarr S

Ix

A rarr αBβ

B rarr γ

28 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

A segunda funccedilatildeo usada na construccedilatildeo da coleccedilatildeo canocircnica LR(0) eacute a funccedilatildeo de transiccedilatildeo GOTO(I X) onde I eacute o conjunto de itens de base e X eacute um siacutembolo da gramaacutetica

GOTO(I X) eacute definido como fechamento do conjunto de todos os itens [ArarrαXβ] tais que

[A rarr αXβ] estaacute em I

A funccedilatildeo de transiccedilatildeo GOTO eacute utilizada para definir as transaccedilotildees no autocircmato LR(0) para uma gramaacutetica

I1

Ersquo rarr E

E rarr E + T

I0

Ersquo rarr E

E rarr E + T

E

29 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Estados do autocircmato correspondem aos conjuntos de itens e GOTO(I +) especifica a transaccedilatildeo do estado I para um novo estado I sob a entrada X

Se I representa o conjunto com dois itens [Ersquo rarr E][E rarr E+T] entatildeo GOTO(I +) conteacutem os itens

Calculamos GOTO(I +) examinando os itens em I com o + imediatamente agrave direita do ponto

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

A rarr αXβ

A rarr αXβ

I1

Ersquo rarr E

E rarr E + T +

I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

30 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Calculamos GOTO(I +) examinando os itens em I com o + imediatamente agrave direita do ponto

O item Ersquo rarr E natildeo eacute desse tipo mas Ersquo rarr E + T sim

Movemos o ponto para imediatamente agrave direita de + e obtemos ErarrE + T

e entatildeo calculamos o fechamento desse conjunto unitaacuterio

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Itens em I

[Ersquo rarr E]

[E rarr E+T]

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I1

Ersquo rarr E

E rarr E + T +

31 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Agora estamos prontos para construir C a coleccedilatildeo canocircnica de conjuntos

de itens LR(0) para uma gramaacutetica estendida Grsquo

void Itens(Grsquo)

C = CLOSURE([Srsquo rarr S])

repeat

for (cada conjunto de itens I em C)

for (cada siacutembolo da gramaacutetica X)

if (GOTO(I X) natildeo eacute vazio e natildeo estaacute em C)

Adicione GOTO(I X) em C

until nenhum novo conjunto de itens seja adicionado em C em uma rodada

32 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

A ideia central por traacutes da anaacutelise ldquoLR Simplesrdquo ou SLR eacute a construccedilatildeo do autocircmato LR(0) a partir da gramaacutetica dada

Os estados desses autocircmatos satildeo os conjuntos de itens da coleccedilatildeo LR canocircnica e as transiccedilotildees satildeo dadas pela funccedilatildeo de transiccedilatildeo GOTO

O estado inicial do autocircmato LR eacute dado por CLOSURE([Srsquo rarr S]) onde Srsquo eacute o siacutembolo inicial da gramaacutetica estendida

Todos os estados satildeo estados de aceitaccedilatildeo Nos referimos ao ldquoestado jrdquo como o estado correspondente ao conjunto de itens Ij

33 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E

Aceitar $

I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

34 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Como os autocircmatos LR(0) podem ajudar-nos a decidir por uma das accedilotildees shift-reduce (veja as decisotildees entre shift-reduce a seguir)

Suponha que a cadeia γ dos siacutembolos da gramaacutetica leve o autocircmato LR(0) do estado inicial 0 para algum estado j

Desta forma avance sobre o proacuteximo siacutembolo a se o estado j possuir uma transaccedilatildeo sob a

Caso contraacuterio escolha reduzir

Os itens no estado j nos diratildeo qual produccedilatildeo usar

35 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

O algoritmo LR abaixo utiliza sua pilha para acompanhar os estados e tambeacutem os siacutembolos da gramaacutetica

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Na verdade

O siacutembolo da gramaacutetica pode ser

recuperado a parir do estado de

modo que a pilha possua estados

ao inveacutes de siacutembolos

36 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Usamos uma pilha

p conter os estados

Os siacutembolos que correspondem aos estados estatildeo na coluna ldquoSiacutembolosrdquo

A pilha da linha (1) tecircm o estado inicial 0 do autocircmato

37 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Portanto fazemos a transferecircncia

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

O siacutembolo da linha 1 eacute o marcador de fundo da pilha $

O proacuteximo siacutembolo de entrada eacute id e o estado 0 tem uma transiccedilatildeo sob id p o estado 5

38 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

A partir do item [F rarr id ] no estado 5 efetuamos uma reduccedilatildeo segundo a produccedilatildeo F rarr id

Na linha 2 o estado 5 eacute empilhado (siacutembolo id)

I5

F rarr id

Natildeo haacute transiccedilatildeo a partir do estado 5 sob a entrada por isso reduzimos

39 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o lado direito da produccedilatildeo da linha (2) eacute id correspondendo ao estado 5 e seu lado direito eacute o F

Com os estados ao desempilhar o estado 5 correspondendo ao siacutembolo id o estado 0 passa a ser o topo

0 F $

40 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id I3

T rarr F

F

Procuramos uma transiccedilatildeo sob F o lado esquerdo da produccedilatildeo

0 F $

O estado 0 possui uma transiccedilatildeo em F p o estado 3 onde empilhamos o estado 3 com o siacutembolo F Ver linha (3)

3

41 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I3

T rarr F

Natildeo haacute transiccedilatildeo a partir do estado 3 sob a entrada por isso reduzimos

A partir do item [T rarr F ] no estado 3 efetuamos uma reduccedilatildeo segundo a produccedilatildeo T rarr F

3

0

T $

42 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

I7

T rarr T F

F rarr ( E )

F rarr id

id

Como outro exemplo considere a linha (5) com o estado 7 referente ao siacutembolo no topo da pilha

Esse estado 7 possui uma transaccedilatildeo para o estado 5 sob a entrada id de modo que empilhamos o estado 5

43 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o estado 5 natildeo possui transiccedilotildees de modo que reduzimos segundo F rarr id

quando removemos da pilha o estado 5 correspondente ao lado direito id o estado 7 passa a ser o topo da pilha

44 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Como o estado 7 possui uma transaccedilatildeo sob F para o estado 10 empilhamos o estado 10 (siacutembolo F)

I7

T rarr T F

F rarr ( E )

F rarr id

I10

T rarr T F

F

45 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O algoritmo eacute o mesmo para todos

os analisadores sintaacuteticos LR

Soacute a tabela de anaacutelise eacute diferente

de um analisador para o outro

O algoritmo lecirc caracteres de um

buffer de entrada um de cada vez

46 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O analisador sintaacutetico shift-reduce

transfere um siacutembolo para pilha jaacute

o analisador sintaacutetico LR transfere

um estado

Cada estado resume a informaccedilatildeo

contida na pilha abaixo dele

47 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

A pilha conteacutem uma sequencia de

estados s0s1 sm onde sm estaacute

no topo

No meacutetodo SLR a pilha conteacutem

estados do autocircmato LR(0)

Por construccedilatildeo a cada estado eacute

associado 1 siacutembolo da gramaacutetica

48 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Lembrem-se de que os estados

correspondem a conj de itens e

que haacute uma transiccedilatildeo do estado i

para o estado j se GOTO(Ii X) = Ij

Todas as transiccedilotildees para o estado

j devem ser para o mesmo siacutembolo

da gramaacutetica X

49 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

Sm

Sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Desta forma cada estado exceto

o estado inicial 0 possui um uacutenico

siacutembolo da gramaacutetica associado a

ele

50 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

A tabela LR consiste em duas partes ACTION uma funccedilatildeo de accedilatildeo de anaacutelise e GOTO uma funccedilatildeo de transiccedilatildeo

1 A funccedilatildeo ACTION recebe como argumentos um estado i e um estado a (ou $) O valor de ACTION(i a) pode ter um dos quatro formatos

a) Shift j onde j eacute um estado

A accedilatildeo tomada pelo analisador sintaacutetico efetivamente transfere a entrada a para a pilha mas usa o estado j para representar a

51 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

b) Reduce Ararr β A accedilatildeo do analisador efetivamente reduz β no topo da pilha para A o lado esquerdo da produccedilatildeo

c) Accept O analisador aceita a entrada e termina a anaacutelise

d) Error O analisador descobre um erro em sua entrada passa o controle p o recuperador de erro que toma alguma accedilatildeo corretiva

2 Estendemos a funccedilatildeo GOTO definida sobre um conjunto de itens para os estados se GOTO(Ii A) = Ij entatildeo GOTO tambeacutem mapeia um estado i e um natildeo-terminal A para o estado j

52 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

Para descrever o comportamento de uma analisador LR eacute recomendaacutevel ter uma notaccedilatildeo representado o estado completo do analisador sua pilha e a entrada restante

Uma configuraccedilatildeo p um analisador LR eacute um par (s0s1sm aiai+1an $) O primeiro componente eacute o conteuacutedo da pilha com o topo agrave direita e o segundo componente representa a entrada restante

Essa configuraccedilatildeo representa a seguinte forma sentencial agrave direita (X0X1Xmaiai+1an) Assim como faria um analisador shift-reduce

53 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

A uacutenica diferenccedila eacute que em inveacutes de siacutembolos da gramaacutetica a pilha conteacutem estados a partir dos quais os siacutembolos da gramaacutetica podem ser recuperados

Ou seja Xi eacute o siacutembolo da gramaacutetica representado pelo estado si

Observe que s0 o estado inicial do analisador sintaacutetico natildeo representa um siacutembolo da gramaacutetica e serve como marcador de fundo da pilha aleacutem de desempenhar um papel importante na anaacutelise

54 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

O proacuteximo movimento do analisador a partir da configuraccedilatildeo dada eacute determinado pela leitura de ai o siacutembolo de entrada corrente e sm o estado do topo da pilha e entatildeo consultando a entrada ACTION[sm ai] na tabela de accedilatildeo de anaacutelise

As configuraccedilotildees restantes apoacutes cada um dos quatro tipos de movimentaccedilatildeo satildeo as seguintes

1 Se ACTION[Sm ai] = shift s o analisador sintaacutetico executa um movimento de transferecircncia (shift move) ele empilha o estado s e avanccedila da entrada resultando na configuraccedilatildeo (s0s1 sm ai+1an $)

55 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2 Se ACTION[Sm ai]=reduce Ararrβ entatildeo o analisador sintaacutetico executa um movimento de reduzir (reduce move) resultando na configuraccedilatildeo (s0s1 sm-rs aiai+1an $)

onde r eacute o comprimento de β e s = GOTO[sm-r A]

Aqui o analisador sintaacutetico incialmente desempilhou os r siacutembolos de estado da pilha expondo o estado sm-r

O analisador sintaacutetico entatildeo empilhou s a entrada para GOTO[sm-r A] na pilha O siacutembolo corrente da entrada natildeo eacute alterado em um movimento de reduzir

56 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2

Para os LR que construiremos Xm-r+1Xm a sequencia de siacutembolos da gramaacutetica correspondendo aos estados retirados da pilha sempre iratildeo casar com β o lado direito da produccedilatildeo sendo reduzida

A saiacuteda de um analisador LR eacute gerada apoacutes um movimento de reduzir executando a accedilatildeo semacircntica associada agrave produccedilatildeo que estaacute sendo reduzida

No momento vamos considerar que a saiacuteda consiste soacute na impressatildeo da produccedilatildeo de reduccedilatildeo

57 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

3 Se ACTION[sm ai] = accept a anaacutelise estaacute concluiacuteda

4 Se ACTION[sm ai] = error o analisador sintaacutetico descobriu um erro e ativa uma rotina para recuperaccedilatildeo de erro

Todos os analisadores sintaacuteticos LR se comportam dessa maneira

A uacutenica diferenccedila entre eles diz respeito a informaccedilatildeo contida nos campos ACTION e GOTO da tabela de anaacutelise

O algoritmo de anaacutelise LR eacute resumido nos proacuteximos slides

58 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

Entrada Uma cadeia de entrada w e uma tabela de anaacutelise com funccedilotildees ACTION e GOTO para uma gramaacutetica G

Saiacuteda Se w estaacute em L(G) os passos os passos de uma reduccedilatildeo de uma anaacutelise ascendente para w

Caso contraacuterio uma indicaccedilatildeo de erro

Meacutetodo Inicialmente o analisador sintaacutetico possui w$ no buffer de entrada e s0 em sua pilha onde s0 representa o estado inicial

O analisador sintaacutetico entatildeo executa o algoritmo

59 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

[PSEUDO] seja a o primeiro siacutembolo de w$ while (1) Seja s o estado no topo da pilha if (ACTION[s a] = shift t) empilha t na pilha seja a o proacuteximo siacutembolo da entrada else if (ACTION[s a] = reduce Ararr β) desempilha siacutembolos |β| da pilha faccedila o estado t agora ser o topo da pilha empilhe GOTO[t A] na pilha imprima a produccedilatildeo Ararr β else if (ACTION[s a] = accept) pare a anaacutelise terminou

else chame uma rotina de recuperaccedilatildeo de erros

60 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR ndash Exemplo

A tabela do proacuteximo slide monstra as funccedilotildees ACTION e GOTO de uma tabela de anaacutelise LR para a gramaacutetica de expressatildeo estudada nesta aula e repetida aqui com produccedilotildees numeradas

Os coacutedigos para as accedilotildees satildeo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

(1) E rarr E + T

(2) E rarr T

(3) T rarr T F

(4) T rarr F

(5) F rarr ( E )

(6) F rarr id

1 Si significa avanccedila na entrada e empilha o estado i na pilha

2 Rj significa reduce segundo a produccedilatildeo de nuacutemero j

3 Acc significa accept

4 Entrada em branco significa error

61 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Estado ACTION

id + ( ) $

0 s5 s4

1 S6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4

5 r6 r6 r6 r6

6 s5 s4

7 s5 s4

8 r6 s11

9 s1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

GOTO

E T F

1 2 3

8 2 3

9 3

10

O valor de GOTO(s a) para o

terminal a estaacute em ACTION da

tabela de anaacutelise conectado agrave

accedilatildeo de transferecircncia sob a

entrada a e o estado s

O GOTO fornece o GOTO[s a]

para os natildeo-terminais A

Ok

Mas como eu consigo os dados

desta tabela

62 Geovane Griesang

A sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

FOLLOW(E) = FOLLOW(Ersquo) = ) $

FOLLOW(T) = FOLLOW(Trsquo) = + ) $

FOLLOW(F) = + ) $

63 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Construindo tabelas de anaacutelise SLR

Esse meacutetodo eacute o mais simples dos LRs Vamos nos referir a tabela de anaacutelise construiacuteda por este meacutetodo como uma tabela SLR e o analisador LR usando uma tabela SLR como um analisador sintaacutetico SLR

O meacutetodo SLR comeccedila com os itens LR(0) e autocircmatos LR(0) ou seja dada uma gramaacutetica G estendemos G para produzir Grsquo com o novo siacutembolo inicial Srsquo A partir de Grsquo construiacutemos C a coleccedilatildeo canocircnica de conj de itens para Grsquo junto com a funccedilatildeo GOTO

Para construir as entradas ACTION e GOTO da tabela de anaacutelise usando o algoritmo a seguir eacute preciso que conheccedilamos FOLLOW(A) para cada natildeo-terminal A de uma gramaacutetica

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 8: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

8 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR

A classe de gramaacuteticas que podem ser reconhecidas com o uso dos meacutetodos LR eacute um superconjunto proacuteprio da classe de gramaacuteticas que podem ser reconhecidas com os meacutetodos preditivos e LL

Para uma gramaacutetica ser LR(k) ela deve ser capaz de reconhecer a ocorrecircncia do lado direito de uma produccedilatildeo em forma sentencial mais agrave direita com k siacutembolos a frente da entrada

Esse requisito eacute menos rigoroso que aquele das gramaacuteticas LL(k)

9 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR

Relembrando

Na LL(k) para reconhecer o uso de uma produccedilatildeo o analisador vecirc apenas os k primeiros siacutembolos que o seu lado direito deriva

Assim natildeo eacute surpresa que as gramaacuteticas LR possam descrever mais linguagens do que as gramaacuteticas LL

Para uma gramaacutetica ser LR(k) ela deve ser capaz de reconhecer

a ocorrecircncia do lado direito de uma produccedilatildeo em forma sentencial

mais agrave direita com k siacutembolos a frente da entrada

10 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR

A principal desvantagem do meacutetodo LR estaacute relacionada com a geraccedilatildeo do analisador sua construccedilatildeo a matildeo p uma linguagem de programaccedilatildeo tiacutepica eacute muito trabalhosa

Portanto eacute necessaacuterio o uso de uma ferramenta especializada um gerador de analisador LR

Felizmente muitos desses geradores estatildeo disponiacuteveis como por exemplo o Yacc Esse gerador recebe como entrada um GLC e produz automaticamente como saiacuteda um analisador sintaacutetico para esta gramaacutetica

11 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Reduccedilotildees - Exemplo

A derivaccedilatildeo segue a seguinte sequencia de cadeias

id id F id T id T F T E

Entrada id id

Neste ponto temos duas opccedilotildees de reduccedilatildeo podemos reduzir a cadeia T para E segundo a produccedilatildeo E rarr T e a cadeia consistindo no segundo id que representa o lado direito de F rarr id Escolhemos a segunda opccedilatildeo e reduzimos id para F produzindo a cadeia T F

id id

F rarr id F id

T rarr F T id

E rarr T E id ou F rarr id T F

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

12 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Itens e o autocircmato LR

Como o analisador sintaacutetico shift-reduce sabe quando transferir p a pilha e quando reduzir

Ex Dado o conteuacutedo de pilha $T e o proacuteximo siacutembolo da entrada como o analisador sabe que T no topo da pilha natildeo eacute um handle de modo que a accedilatildeo apropriada seja transferir o ldquordquo para a pilha e natildeo reduzir T para E

Entrada id id E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

id id

F rarr id F id

T rarr F T id

E rarr T E id ou F rarr id T F

13 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Itens e o autocircmato LR

Um analisador LR decide sobre as accedilotildees shift-reduce mantendo estados para acompanhar onde se encontra a anaacutelise

Os estados representam conjuntos de ldquoitensrdquo

Um item LR(0) de uma gramaacutetica G eacute a produccedilatildeo de G com um ponto em alguma posiccedilatildeo do seu lado direito

A produccedilatildeo A rarr XYZ gera os quatro itens A rarr XYZ

A rarr XYZ

A rarr XYZ

A rarr XYZ A produccedilatildeo A rarr 120576 gera apenas um item A rarr

14 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR - Itens e o autocircmato LR Representaccedilatildeo dos conjuntos de itens

Um gerador de analisadores sintaacuteticos que produz um analisador ascendente

deve representar os itens e conjunto de itens convenientemente

Um item pode ser representado por um par de inteiros onde o primeiro

representa o nuacutemero de uma das produccedilotildees da gramaacutetica subjacente e o

segundo indica a posiccedilatildeo do ponto

Conjuntos de itens podem ser representados por uma lista desses pares

A rarr XYZ

A rarr XYZ

A rarr XYZ

A rarr XYZ

15 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR - Itens e o autocircmato LR Representaccedilatildeo dos conjuntos de itens

O conjunto de itens necessaacuterios frequentemente incluem itens de

ldquofechamentordquo (ldquoclosurerdquo) onde o ponto estaacute no iniacutecio do corpo

Esses itens sempre podem ser reconstruiacutedos a partir dos outros itens no

conjunto e natildeo temos de incluiacute-los na lista

A rarr XYZ

A rarr XYZ

A rarr XYZ

A rarr XYZ

16 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Itens e o autocircmato LR

Um item indica quanto de uma produccedilatildeo jaacute foi visto em determinado ponto no processo de reconhecimento sintaacutetico Ex

O item ArarrXYZ indica o iniacutecio da busca de uma cadeia derivaacutevel de XYZ na entrada

O item A rarr XYZ indica que no ponto atual onde se encontra a anaacutelise uma cadeia X jaacute foi encontrada e que esperamos em seguida ver uma cadeia derivaacutevel de YZ

O item A rarr XYZ indica o fim da busca ou seja jaacute derivamos o lado direito XYZ de A e que pode ser o momento de reduzir XYZ para A

A rarr XYZ

A rarr XYZ

A rarr XYZ

A rarr XYZ

17 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Itens e o autocircmato LR

Uma coleccedilatildeo de conj de itens LR(0) chamada coleccedilatildeo LR(0) canocircnica oferece a base para construccedilatildeo de um autocircmato finito determinista que eacute usado para dirigir as decisotildees durante a anaacutelise

Esse autocircmato eacute chamado de autocircmato LR(0)

Em particular cada estado do autocircmato LR(0) representa um conjunto de itens na coleccedilatildeo LR(0) canocircnica

18 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Exemplo Para construir a coleccedilatildeo LR(0) canocircnica para uma gramaacutetica definimos uma gramaacutetica estendida e duas funccedilotildees

funccedilatildeo de fechamento (function CLOSURE)

funccedilatildeo de transiccedilatildeo (function GOTO)

Se G eacute uma gramaacutetica com siacutembolo inicial S entatildeo Grsquo eacute uma gramaacutetica estendida para G com o novo siacutembolo inicial Srsquo e a produccedilatildeo Srsquo rarr S

O objetivo dessa nova produccedilatildeo eacute simplificar a identificaccedilatildeo de quando o reconhecedor sintaacutetico deve parar e anunciar a aceitaccedilatildeo da cadeia de entrada

Ou seja a aceitaccedilatildeo ocorre se e somente se o analisador estiver para reduzir por Srsquo rarr S

19 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Se I eacute um conj de itens para a gramaacutetica G entatildeo CLOSURE(I) eacute o conj de itens construiacutedos a partir de I pelas duas regras

1 Inicialmente acrescente todo item de I no CLOSURE(I)

2 Se A rarr αBβ estaacute em CLOSEURE(I) e B rarr γ eacute uma produccedilatildeo entatildeo adicione o item B rarr γ em CLOSURE(I) se ele ainda natildeo estaacute laacute

Ix

A rarr αBβ

B rarr γ

20 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Intuitivamente A rarr αBβ em CLOSURE(I) indica que em algum ponto no processo de reconhecimento os itens correspondentes as produccedilotildees-B devem ser acrescentados para dirigir a busca por B

A subcadeia derivaacutevel de Bβ na entrada teraacute um prefixo derivaacutevel de B aplicando umas das produccedilotildees-B

Portanto incluiacutemos itens para todas as produccedilotildees-B ou seja se B rarr γ eacute uma produccedilatildeo tambeacutem incluiacutemos B rarr γ em CLOSURE(I) este processo eacute conhecido como fechamento de estado

Ix

A rarr αBβ

B rarr γ

21 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

P ver como o fechamento de um estado eacute computado Ersquo rarr E eacute colocado em CLOSURE(I) pela regra (1)

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Acrescente todo item de I no CLOSURE(I)

I0

Ersquo rarr E

22 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Como existe um natildeo-terminal E agrave direita de um ponto acrescentamos as produccedilotildees-E com pontos mais agrave esquerda do lado direito dos itens ex

E rarr E + T e E rarr T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

23 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Agora existe um natildeo-terminal T imediatamente agrave direita de um ponto no segundo item incluiacutedo (E rarr T) de modo que acrescentamos as produccedilotildees-T T rarr T F e T rarr F

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

24 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Em seguida o natildeo-terminal F agrave direita de um ponto nos forccedila a incluir os itens Frarr (E) e F rarr id mas nenhum outro item precisa ser acrescentado

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr (E)

F rarr id

25 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Um modo conveniente de implementar a funccedilatildeo de fechamento (closure) eacute manter um arranjo booleano added indexado pelos natildeo-terminais de G de modo que added[B] seja definido como verdadeiro (true) se e quando incluirmos o item B rarr γ para cada produccedilatildeo-B B rarr γ

SetOfItems CLOSURE(I)

J=I

repeat

for (cada item A rarr αBβ em J)

for (cada produccedilatildeo B rarr γ de G)

if (B rarr γ natildeo estaacute em J)

Adicione B rarr γ em J

until mais nenhum item seja adicionado a J em um passo do loop

return J

Ix

A rarr αBβ

B rarr γ

26 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Observe que se uma produccedilatildeo-B for incluiacuteda no fechamento de I com o ponto mais agrave esquerda do seu lado direito entatildeo todas as produccedilotildees-B seratildeo igualmente incluiacutedas no fechamento Ex A rarr αBβ

Uma lista de natildeo-terminais B cujas produccedilotildees foram incluiacutedas dessa forma eacute suficiente Dividimos todos os conjuntos de itens de interesse em duas classes

1 Itens de base (kernel) o item inicial Srsquo rarr S e todos itens cujos pontos natildeo estatildeo mais agrave esquerda em seus lados direitos

2 Itens que natildeo satildeo de base todos os itens com seus pontos mais agrave esquerda em seus lados direitos exceto Srsquo rarr S Ex B rarr γ

Ix

A rarr αBβ

B rarr γ

27 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Aleacutem do mais cada conjunto de itens de interesse eacute formado a partir do fechamento de um conjunto de itens de base

Os itens adicionados no fechamento nunca podem ser itens de base naturalmente

Assim podemos representar os conjuntos de itens em que realmente estamos interessados com pouca memoacuteria se desprezarmos todos que natildeo satildeo itens de base sabendo que esses podem ser gerados novamente no processo de fechamento Ex B rarr γ exceto Srsquo rarr S

Ix

A rarr αBβ

B rarr γ

28 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

A segunda funccedilatildeo usada na construccedilatildeo da coleccedilatildeo canocircnica LR(0) eacute a funccedilatildeo de transiccedilatildeo GOTO(I X) onde I eacute o conjunto de itens de base e X eacute um siacutembolo da gramaacutetica

GOTO(I X) eacute definido como fechamento do conjunto de todos os itens [ArarrαXβ] tais que

[A rarr αXβ] estaacute em I

A funccedilatildeo de transiccedilatildeo GOTO eacute utilizada para definir as transaccedilotildees no autocircmato LR(0) para uma gramaacutetica

I1

Ersquo rarr E

E rarr E + T

I0

Ersquo rarr E

E rarr E + T

E

29 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Estados do autocircmato correspondem aos conjuntos de itens e GOTO(I +) especifica a transaccedilatildeo do estado I para um novo estado I sob a entrada X

Se I representa o conjunto com dois itens [Ersquo rarr E][E rarr E+T] entatildeo GOTO(I +) conteacutem os itens

Calculamos GOTO(I +) examinando os itens em I com o + imediatamente agrave direita do ponto

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

A rarr αXβ

A rarr αXβ

I1

Ersquo rarr E

E rarr E + T +

I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

30 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Calculamos GOTO(I +) examinando os itens em I com o + imediatamente agrave direita do ponto

O item Ersquo rarr E natildeo eacute desse tipo mas Ersquo rarr E + T sim

Movemos o ponto para imediatamente agrave direita de + e obtemos ErarrE + T

e entatildeo calculamos o fechamento desse conjunto unitaacuterio

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Itens em I

[Ersquo rarr E]

[E rarr E+T]

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I1

Ersquo rarr E

E rarr E + T +

31 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Agora estamos prontos para construir C a coleccedilatildeo canocircnica de conjuntos

de itens LR(0) para uma gramaacutetica estendida Grsquo

void Itens(Grsquo)

C = CLOSURE([Srsquo rarr S])

repeat

for (cada conjunto de itens I em C)

for (cada siacutembolo da gramaacutetica X)

if (GOTO(I X) natildeo eacute vazio e natildeo estaacute em C)

Adicione GOTO(I X) em C

until nenhum novo conjunto de itens seja adicionado em C em uma rodada

32 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

A ideia central por traacutes da anaacutelise ldquoLR Simplesrdquo ou SLR eacute a construccedilatildeo do autocircmato LR(0) a partir da gramaacutetica dada

Os estados desses autocircmatos satildeo os conjuntos de itens da coleccedilatildeo LR canocircnica e as transiccedilotildees satildeo dadas pela funccedilatildeo de transiccedilatildeo GOTO

O estado inicial do autocircmato LR eacute dado por CLOSURE([Srsquo rarr S]) onde Srsquo eacute o siacutembolo inicial da gramaacutetica estendida

Todos os estados satildeo estados de aceitaccedilatildeo Nos referimos ao ldquoestado jrdquo como o estado correspondente ao conjunto de itens Ij

33 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E

Aceitar $

I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

34 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Como os autocircmatos LR(0) podem ajudar-nos a decidir por uma das accedilotildees shift-reduce (veja as decisotildees entre shift-reduce a seguir)

Suponha que a cadeia γ dos siacutembolos da gramaacutetica leve o autocircmato LR(0) do estado inicial 0 para algum estado j

Desta forma avance sobre o proacuteximo siacutembolo a se o estado j possuir uma transaccedilatildeo sob a

Caso contraacuterio escolha reduzir

Os itens no estado j nos diratildeo qual produccedilatildeo usar

35 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

O algoritmo LR abaixo utiliza sua pilha para acompanhar os estados e tambeacutem os siacutembolos da gramaacutetica

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Na verdade

O siacutembolo da gramaacutetica pode ser

recuperado a parir do estado de

modo que a pilha possua estados

ao inveacutes de siacutembolos

36 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Usamos uma pilha

p conter os estados

Os siacutembolos que correspondem aos estados estatildeo na coluna ldquoSiacutembolosrdquo

A pilha da linha (1) tecircm o estado inicial 0 do autocircmato

37 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Portanto fazemos a transferecircncia

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

O siacutembolo da linha 1 eacute o marcador de fundo da pilha $

O proacuteximo siacutembolo de entrada eacute id e o estado 0 tem uma transiccedilatildeo sob id p o estado 5

38 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

A partir do item [F rarr id ] no estado 5 efetuamos uma reduccedilatildeo segundo a produccedilatildeo F rarr id

Na linha 2 o estado 5 eacute empilhado (siacutembolo id)

I5

F rarr id

Natildeo haacute transiccedilatildeo a partir do estado 5 sob a entrada por isso reduzimos

39 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o lado direito da produccedilatildeo da linha (2) eacute id correspondendo ao estado 5 e seu lado direito eacute o F

Com os estados ao desempilhar o estado 5 correspondendo ao siacutembolo id o estado 0 passa a ser o topo

0 F $

40 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id I3

T rarr F

F

Procuramos uma transiccedilatildeo sob F o lado esquerdo da produccedilatildeo

0 F $

O estado 0 possui uma transiccedilatildeo em F p o estado 3 onde empilhamos o estado 3 com o siacutembolo F Ver linha (3)

3

41 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I3

T rarr F

Natildeo haacute transiccedilatildeo a partir do estado 3 sob a entrada por isso reduzimos

A partir do item [T rarr F ] no estado 3 efetuamos uma reduccedilatildeo segundo a produccedilatildeo T rarr F

3

0

T $

42 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

I7

T rarr T F

F rarr ( E )

F rarr id

id

Como outro exemplo considere a linha (5) com o estado 7 referente ao siacutembolo no topo da pilha

Esse estado 7 possui uma transaccedilatildeo para o estado 5 sob a entrada id de modo que empilhamos o estado 5

43 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o estado 5 natildeo possui transiccedilotildees de modo que reduzimos segundo F rarr id

quando removemos da pilha o estado 5 correspondente ao lado direito id o estado 7 passa a ser o topo da pilha

44 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Como o estado 7 possui uma transaccedilatildeo sob F para o estado 10 empilhamos o estado 10 (siacutembolo F)

I7

T rarr T F

F rarr ( E )

F rarr id

I10

T rarr T F

F

45 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O algoritmo eacute o mesmo para todos

os analisadores sintaacuteticos LR

Soacute a tabela de anaacutelise eacute diferente

de um analisador para o outro

O algoritmo lecirc caracteres de um

buffer de entrada um de cada vez

46 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O analisador sintaacutetico shift-reduce

transfere um siacutembolo para pilha jaacute

o analisador sintaacutetico LR transfere

um estado

Cada estado resume a informaccedilatildeo

contida na pilha abaixo dele

47 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

A pilha conteacutem uma sequencia de

estados s0s1 sm onde sm estaacute

no topo

No meacutetodo SLR a pilha conteacutem

estados do autocircmato LR(0)

Por construccedilatildeo a cada estado eacute

associado 1 siacutembolo da gramaacutetica

48 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Lembrem-se de que os estados

correspondem a conj de itens e

que haacute uma transiccedilatildeo do estado i

para o estado j se GOTO(Ii X) = Ij

Todas as transiccedilotildees para o estado

j devem ser para o mesmo siacutembolo

da gramaacutetica X

49 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

Sm

Sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Desta forma cada estado exceto

o estado inicial 0 possui um uacutenico

siacutembolo da gramaacutetica associado a

ele

50 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

A tabela LR consiste em duas partes ACTION uma funccedilatildeo de accedilatildeo de anaacutelise e GOTO uma funccedilatildeo de transiccedilatildeo

1 A funccedilatildeo ACTION recebe como argumentos um estado i e um estado a (ou $) O valor de ACTION(i a) pode ter um dos quatro formatos

a) Shift j onde j eacute um estado

A accedilatildeo tomada pelo analisador sintaacutetico efetivamente transfere a entrada a para a pilha mas usa o estado j para representar a

51 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

b) Reduce Ararr β A accedilatildeo do analisador efetivamente reduz β no topo da pilha para A o lado esquerdo da produccedilatildeo

c) Accept O analisador aceita a entrada e termina a anaacutelise

d) Error O analisador descobre um erro em sua entrada passa o controle p o recuperador de erro que toma alguma accedilatildeo corretiva

2 Estendemos a funccedilatildeo GOTO definida sobre um conjunto de itens para os estados se GOTO(Ii A) = Ij entatildeo GOTO tambeacutem mapeia um estado i e um natildeo-terminal A para o estado j

52 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

Para descrever o comportamento de uma analisador LR eacute recomendaacutevel ter uma notaccedilatildeo representado o estado completo do analisador sua pilha e a entrada restante

Uma configuraccedilatildeo p um analisador LR eacute um par (s0s1sm aiai+1an $) O primeiro componente eacute o conteuacutedo da pilha com o topo agrave direita e o segundo componente representa a entrada restante

Essa configuraccedilatildeo representa a seguinte forma sentencial agrave direita (X0X1Xmaiai+1an) Assim como faria um analisador shift-reduce

53 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

A uacutenica diferenccedila eacute que em inveacutes de siacutembolos da gramaacutetica a pilha conteacutem estados a partir dos quais os siacutembolos da gramaacutetica podem ser recuperados

Ou seja Xi eacute o siacutembolo da gramaacutetica representado pelo estado si

Observe que s0 o estado inicial do analisador sintaacutetico natildeo representa um siacutembolo da gramaacutetica e serve como marcador de fundo da pilha aleacutem de desempenhar um papel importante na anaacutelise

54 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

O proacuteximo movimento do analisador a partir da configuraccedilatildeo dada eacute determinado pela leitura de ai o siacutembolo de entrada corrente e sm o estado do topo da pilha e entatildeo consultando a entrada ACTION[sm ai] na tabela de accedilatildeo de anaacutelise

As configuraccedilotildees restantes apoacutes cada um dos quatro tipos de movimentaccedilatildeo satildeo as seguintes

1 Se ACTION[Sm ai] = shift s o analisador sintaacutetico executa um movimento de transferecircncia (shift move) ele empilha o estado s e avanccedila da entrada resultando na configuraccedilatildeo (s0s1 sm ai+1an $)

55 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2 Se ACTION[Sm ai]=reduce Ararrβ entatildeo o analisador sintaacutetico executa um movimento de reduzir (reduce move) resultando na configuraccedilatildeo (s0s1 sm-rs aiai+1an $)

onde r eacute o comprimento de β e s = GOTO[sm-r A]

Aqui o analisador sintaacutetico incialmente desempilhou os r siacutembolos de estado da pilha expondo o estado sm-r

O analisador sintaacutetico entatildeo empilhou s a entrada para GOTO[sm-r A] na pilha O siacutembolo corrente da entrada natildeo eacute alterado em um movimento de reduzir

56 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2

Para os LR que construiremos Xm-r+1Xm a sequencia de siacutembolos da gramaacutetica correspondendo aos estados retirados da pilha sempre iratildeo casar com β o lado direito da produccedilatildeo sendo reduzida

A saiacuteda de um analisador LR eacute gerada apoacutes um movimento de reduzir executando a accedilatildeo semacircntica associada agrave produccedilatildeo que estaacute sendo reduzida

No momento vamos considerar que a saiacuteda consiste soacute na impressatildeo da produccedilatildeo de reduccedilatildeo

57 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

3 Se ACTION[sm ai] = accept a anaacutelise estaacute concluiacuteda

4 Se ACTION[sm ai] = error o analisador sintaacutetico descobriu um erro e ativa uma rotina para recuperaccedilatildeo de erro

Todos os analisadores sintaacuteticos LR se comportam dessa maneira

A uacutenica diferenccedila entre eles diz respeito a informaccedilatildeo contida nos campos ACTION e GOTO da tabela de anaacutelise

O algoritmo de anaacutelise LR eacute resumido nos proacuteximos slides

58 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

Entrada Uma cadeia de entrada w e uma tabela de anaacutelise com funccedilotildees ACTION e GOTO para uma gramaacutetica G

Saiacuteda Se w estaacute em L(G) os passos os passos de uma reduccedilatildeo de uma anaacutelise ascendente para w

Caso contraacuterio uma indicaccedilatildeo de erro

Meacutetodo Inicialmente o analisador sintaacutetico possui w$ no buffer de entrada e s0 em sua pilha onde s0 representa o estado inicial

O analisador sintaacutetico entatildeo executa o algoritmo

59 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

[PSEUDO] seja a o primeiro siacutembolo de w$ while (1) Seja s o estado no topo da pilha if (ACTION[s a] = shift t) empilha t na pilha seja a o proacuteximo siacutembolo da entrada else if (ACTION[s a] = reduce Ararr β) desempilha siacutembolos |β| da pilha faccedila o estado t agora ser o topo da pilha empilhe GOTO[t A] na pilha imprima a produccedilatildeo Ararr β else if (ACTION[s a] = accept) pare a anaacutelise terminou

else chame uma rotina de recuperaccedilatildeo de erros

60 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR ndash Exemplo

A tabela do proacuteximo slide monstra as funccedilotildees ACTION e GOTO de uma tabela de anaacutelise LR para a gramaacutetica de expressatildeo estudada nesta aula e repetida aqui com produccedilotildees numeradas

Os coacutedigos para as accedilotildees satildeo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

(1) E rarr E + T

(2) E rarr T

(3) T rarr T F

(4) T rarr F

(5) F rarr ( E )

(6) F rarr id

1 Si significa avanccedila na entrada e empilha o estado i na pilha

2 Rj significa reduce segundo a produccedilatildeo de nuacutemero j

3 Acc significa accept

4 Entrada em branco significa error

61 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Estado ACTION

id + ( ) $

0 s5 s4

1 S6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4

5 r6 r6 r6 r6

6 s5 s4

7 s5 s4

8 r6 s11

9 s1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

GOTO

E T F

1 2 3

8 2 3

9 3

10

O valor de GOTO(s a) para o

terminal a estaacute em ACTION da

tabela de anaacutelise conectado agrave

accedilatildeo de transferecircncia sob a

entrada a e o estado s

O GOTO fornece o GOTO[s a]

para os natildeo-terminais A

Ok

Mas como eu consigo os dados

desta tabela

62 Geovane Griesang

A sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

FOLLOW(E) = FOLLOW(Ersquo) = ) $

FOLLOW(T) = FOLLOW(Trsquo) = + ) $

FOLLOW(F) = + ) $

63 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Construindo tabelas de anaacutelise SLR

Esse meacutetodo eacute o mais simples dos LRs Vamos nos referir a tabela de anaacutelise construiacuteda por este meacutetodo como uma tabela SLR e o analisador LR usando uma tabela SLR como um analisador sintaacutetico SLR

O meacutetodo SLR comeccedila com os itens LR(0) e autocircmatos LR(0) ou seja dada uma gramaacutetica G estendemos G para produzir Grsquo com o novo siacutembolo inicial Srsquo A partir de Grsquo construiacutemos C a coleccedilatildeo canocircnica de conj de itens para Grsquo junto com a funccedilatildeo GOTO

Para construir as entradas ACTION e GOTO da tabela de anaacutelise usando o algoritmo a seguir eacute preciso que conheccedilamos FOLLOW(A) para cada natildeo-terminal A de uma gramaacutetica

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 9: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

9 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR

Relembrando

Na LL(k) para reconhecer o uso de uma produccedilatildeo o analisador vecirc apenas os k primeiros siacutembolos que o seu lado direito deriva

Assim natildeo eacute surpresa que as gramaacuteticas LR possam descrever mais linguagens do que as gramaacuteticas LL

Para uma gramaacutetica ser LR(k) ela deve ser capaz de reconhecer

a ocorrecircncia do lado direito de uma produccedilatildeo em forma sentencial

mais agrave direita com k siacutembolos a frente da entrada

10 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR

A principal desvantagem do meacutetodo LR estaacute relacionada com a geraccedilatildeo do analisador sua construccedilatildeo a matildeo p uma linguagem de programaccedilatildeo tiacutepica eacute muito trabalhosa

Portanto eacute necessaacuterio o uso de uma ferramenta especializada um gerador de analisador LR

Felizmente muitos desses geradores estatildeo disponiacuteveis como por exemplo o Yacc Esse gerador recebe como entrada um GLC e produz automaticamente como saiacuteda um analisador sintaacutetico para esta gramaacutetica

11 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Reduccedilotildees - Exemplo

A derivaccedilatildeo segue a seguinte sequencia de cadeias

id id F id T id T F T E

Entrada id id

Neste ponto temos duas opccedilotildees de reduccedilatildeo podemos reduzir a cadeia T para E segundo a produccedilatildeo E rarr T e a cadeia consistindo no segundo id que representa o lado direito de F rarr id Escolhemos a segunda opccedilatildeo e reduzimos id para F produzindo a cadeia T F

id id

F rarr id F id

T rarr F T id

E rarr T E id ou F rarr id T F

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

12 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Itens e o autocircmato LR

Como o analisador sintaacutetico shift-reduce sabe quando transferir p a pilha e quando reduzir

Ex Dado o conteuacutedo de pilha $T e o proacuteximo siacutembolo da entrada como o analisador sabe que T no topo da pilha natildeo eacute um handle de modo que a accedilatildeo apropriada seja transferir o ldquordquo para a pilha e natildeo reduzir T para E

Entrada id id E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

id id

F rarr id F id

T rarr F T id

E rarr T E id ou F rarr id T F

13 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Itens e o autocircmato LR

Um analisador LR decide sobre as accedilotildees shift-reduce mantendo estados para acompanhar onde se encontra a anaacutelise

Os estados representam conjuntos de ldquoitensrdquo

Um item LR(0) de uma gramaacutetica G eacute a produccedilatildeo de G com um ponto em alguma posiccedilatildeo do seu lado direito

A produccedilatildeo A rarr XYZ gera os quatro itens A rarr XYZ

A rarr XYZ

A rarr XYZ

A rarr XYZ A produccedilatildeo A rarr 120576 gera apenas um item A rarr

14 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR - Itens e o autocircmato LR Representaccedilatildeo dos conjuntos de itens

Um gerador de analisadores sintaacuteticos que produz um analisador ascendente

deve representar os itens e conjunto de itens convenientemente

Um item pode ser representado por um par de inteiros onde o primeiro

representa o nuacutemero de uma das produccedilotildees da gramaacutetica subjacente e o

segundo indica a posiccedilatildeo do ponto

Conjuntos de itens podem ser representados por uma lista desses pares

A rarr XYZ

A rarr XYZ

A rarr XYZ

A rarr XYZ

15 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR - Itens e o autocircmato LR Representaccedilatildeo dos conjuntos de itens

O conjunto de itens necessaacuterios frequentemente incluem itens de

ldquofechamentordquo (ldquoclosurerdquo) onde o ponto estaacute no iniacutecio do corpo

Esses itens sempre podem ser reconstruiacutedos a partir dos outros itens no

conjunto e natildeo temos de incluiacute-los na lista

A rarr XYZ

A rarr XYZ

A rarr XYZ

A rarr XYZ

16 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Itens e o autocircmato LR

Um item indica quanto de uma produccedilatildeo jaacute foi visto em determinado ponto no processo de reconhecimento sintaacutetico Ex

O item ArarrXYZ indica o iniacutecio da busca de uma cadeia derivaacutevel de XYZ na entrada

O item A rarr XYZ indica que no ponto atual onde se encontra a anaacutelise uma cadeia X jaacute foi encontrada e que esperamos em seguida ver uma cadeia derivaacutevel de YZ

O item A rarr XYZ indica o fim da busca ou seja jaacute derivamos o lado direito XYZ de A e que pode ser o momento de reduzir XYZ para A

A rarr XYZ

A rarr XYZ

A rarr XYZ

A rarr XYZ

17 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Itens e o autocircmato LR

Uma coleccedilatildeo de conj de itens LR(0) chamada coleccedilatildeo LR(0) canocircnica oferece a base para construccedilatildeo de um autocircmato finito determinista que eacute usado para dirigir as decisotildees durante a anaacutelise

Esse autocircmato eacute chamado de autocircmato LR(0)

Em particular cada estado do autocircmato LR(0) representa um conjunto de itens na coleccedilatildeo LR(0) canocircnica

18 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Exemplo Para construir a coleccedilatildeo LR(0) canocircnica para uma gramaacutetica definimos uma gramaacutetica estendida e duas funccedilotildees

funccedilatildeo de fechamento (function CLOSURE)

funccedilatildeo de transiccedilatildeo (function GOTO)

Se G eacute uma gramaacutetica com siacutembolo inicial S entatildeo Grsquo eacute uma gramaacutetica estendida para G com o novo siacutembolo inicial Srsquo e a produccedilatildeo Srsquo rarr S

O objetivo dessa nova produccedilatildeo eacute simplificar a identificaccedilatildeo de quando o reconhecedor sintaacutetico deve parar e anunciar a aceitaccedilatildeo da cadeia de entrada

Ou seja a aceitaccedilatildeo ocorre se e somente se o analisador estiver para reduzir por Srsquo rarr S

19 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Se I eacute um conj de itens para a gramaacutetica G entatildeo CLOSURE(I) eacute o conj de itens construiacutedos a partir de I pelas duas regras

1 Inicialmente acrescente todo item de I no CLOSURE(I)

2 Se A rarr αBβ estaacute em CLOSEURE(I) e B rarr γ eacute uma produccedilatildeo entatildeo adicione o item B rarr γ em CLOSURE(I) se ele ainda natildeo estaacute laacute

Ix

A rarr αBβ

B rarr γ

20 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Intuitivamente A rarr αBβ em CLOSURE(I) indica que em algum ponto no processo de reconhecimento os itens correspondentes as produccedilotildees-B devem ser acrescentados para dirigir a busca por B

A subcadeia derivaacutevel de Bβ na entrada teraacute um prefixo derivaacutevel de B aplicando umas das produccedilotildees-B

Portanto incluiacutemos itens para todas as produccedilotildees-B ou seja se B rarr γ eacute uma produccedilatildeo tambeacutem incluiacutemos B rarr γ em CLOSURE(I) este processo eacute conhecido como fechamento de estado

Ix

A rarr αBβ

B rarr γ

21 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

P ver como o fechamento de um estado eacute computado Ersquo rarr E eacute colocado em CLOSURE(I) pela regra (1)

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Acrescente todo item de I no CLOSURE(I)

I0

Ersquo rarr E

22 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Como existe um natildeo-terminal E agrave direita de um ponto acrescentamos as produccedilotildees-E com pontos mais agrave esquerda do lado direito dos itens ex

E rarr E + T e E rarr T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

23 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Agora existe um natildeo-terminal T imediatamente agrave direita de um ponto no segundo item incluiacutedo (E rarr T) de modo que acrescentamos as produccedilotildees-T T rarr T F e T rarr F

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

24 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Em seguida o natildeo-terminal F agrave direita de um ponto nos forccedila a incluir os itens Frarr (E) e F rarr id mas nenhum outro item precisa ser acrescentado

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr (E)

F rarr id

25 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Um modo conveniente de implementar a funccedilatildeo de fechamento (closure) eacute manter um arranjo booleano added indexado pelos natildeo-terminais de G de modo que added[B] seja definido como verdadeiro (true) se e quando incluirmos o item B rarr γ para cada produccedilatildeo-B B rarr γ

SetOfItems CLOSURE(I)

J=I

repeat

for (cada item A rarr αBβ em J)

for (cada produccedilatildeo B rarr γ de G)

if (B rarr γ natildeo estaacute em J)

Adicione B rarr γ em J

until mais nenhum item seja adicionado a J em um passo do loop

return J

Ix

A rarr αBβ

B rarr γ

26 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Observe que se uma produccedilatildeo-B for incluiacuteda no fechamento de I com o ponto mais agrave esquerda do seu lado direito entatildeo todas as produccedilotildees-B seratildeo igualmente incluiacutedas no fechamento Ex A rarr αBβ

Uma lista de natildeo-terminais B cujas produccedilotildees foram incluiacutedas dessa forma eacute suficiente Dividimos todos os conjuntos de itens de interesse em duas classes

1 Itens de base (kernel) o item inicial Srsquo rarr S e todos itens cujos pontos natildeo estatildeo mais agrave esquerda em seus lados direitos

2 Itens que natildeo satildeo de base todos os itens com seus pontos mais agrave esquerda em seus lados direitos exceto Srsquo rarr S Ex B rarr γ

Ix

A rarr αBβ

B rarr γ

27 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Aleacutem do mais cada conjunto de itens de interesse eacute formado a partir do fechamento de um conjunto de itens de base

Os itens adicionados no fechamento nunca podem ser itens de base naturalmente

Assim podemos representar os conjuntos de itens em que realmente estamos interessados com pouca memoacuteria se desprezarmos todos que natildeo satildeo itens de base sabendo que esses podem ser gerados novamente no processo de fechamento Ex B rarr γ exceto Srsquo rarr S

Ix

A rarr αBβ

B rarr γ

28 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

A segunda funccedilatildeo usada na construccedilatildeo da coleccedilatildeo canocircnica LR(0) eacute a funccedilatildeo de transiccedilatildeo GOTO(I X) onde I eacute o conjunto de itens de base e X eacute um siacutembolo da gramaacutetica

GOTO(I X) eacute definido como fechamento do conjunto de todos os itens [ArarrαXβ] tais que

[A rarr αXβ] estaacute em I

A funccedilatildeo de transiccedilatildeo GOTO eacute utilizada para definir as transaccedilotildees no autocircmato LR(0) para uma gramaacutetica

I1

Ersquo rarr E

E rarr E + T

I0

Ersquo rarr E

E rarr E + T

E

29 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Estados do autocircmato correspondem aos conjuntos de itens e GOTO(I +) especifica a transaccedilatildeo do estado I para um novo estado I sob a entrada X

Se I representa o conjunto com dois itens [Ersquo rarr E][E rarr E+T] entatildeo GOTO(I +) conteacutem os itens

Calculamos GOTO(I +) examinando os itens em I com o + imediatamente agrave direita do ponto

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

A rarr αXβ

A rarr αXβ

I1

Ersquo rarr E

E rarr E + T +

I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

30 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Calculamos GOTO(I +) examinando os itens em I com o + imediatamente agrave direita do ponto

O item Ersquo rarr E natildeo eacute desse tipo mas Ersquo rarr E + T sim

Movemos o ponto para imediatamente agrave direita de + e obtemos ErarrE + T

e entatildeo calculamos o fechamento desse conjunto unitaacuterio

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Itens em I

[Ersquo rarr E]

[E rarr E+T]

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I1

Ersquo rarr E

E rarr E + T +

31 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Agora estamos prontos para construir C a coleccedilatildeo canocircnica de conjuntos

de itens LR(0) para uma gramaacutetica estendida Grsquo

void Itens(Grsquo)

C = CLOSURE([Srsquo rarr S])

repeat

for (cada conjunto de itens I em C)

for (cada siacutembolo da gramaacutetica X)

if (GOTO(I X) natildeo eacute vazio e natildeo estaacute em C)

Adicione GOTO(I X) em C

until nenhum novo conjunto de itens seja adicionado em C em uma rodada

32 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

A ideia central por traacutes da anaacutelise ldquoLR Simplesrdquo ou SLR eacute a construccedilatildeo do autocircmato LR(0) a partir da gramaacutetica dada

Os estados desses autocircmatos satildeo os conjuntos de itens da coleccedilatildeo LR canocircnica e as transiccedilotildees satildeo dadas pela funccedilatildeo de transiccedilatildeo GOTO

O estado inicial do autocircmato LR eacute dado por CLOSURE([Srsquo rarr S]) onde Srsquo eacute o siacutembolo inicial da gramaacutetica estendida

Todos os estados satildeo estados de aceitaccedilatildeo Nos referimos ao ldquoestado jrdquo como o estado correspondente ao conjunto de itens Ij

33 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E

Aceitar $

I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

34 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Como os autocircmatos LR(0) podem ajudar-nos a decidir por uma das accedilotildees shift-reduce (veja as decisotildees entre shift-reduce a seguir)

Suponha que a cadeia γ dos siacutembolos da gramaacutetica leve o autocircmato LR(0) do estado inicial 0 para algum estado j

Desta forma avance sobre o proacuteximo siacutembolo a se o estado j possuir uma transaccedilatildeo sob a

Caso contraacuterio escolha reduzir

Os itens no estado j nos diratildeo qual produccedilatildeo usar

35 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

O algoritmo LR abaixo utiliza sua pilha para acompanhar os estados e tambeacutem os siacutembolos da gramaacutetica

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Na verdade

O siacutembolo da gramaacutetica pode ser

recuperado a parir do estado de

modo que a pilha possua estados

ao inveacutes de siacutembolos

36 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Usamos uma pilha

p conter os estados

Os siacutembolos que correspondem aos estados estatildeo na coluna ldquoSiacutembolosrdquo

A pilha da linha (1) tecircm o estado inicial 0 do autocircmato

37 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Portanto fazemos a transferecircncia

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

O siacutembolo da linha 1 eacute o marcador de fundo da pilha $

O proacuteximo siacutembolo de entrada eacute id e o estado 0 tem uma transiccedilatildeo sob id p o estado 5

38 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

A partir do item [F rarr id ] no estado 5 efetuamos uma reduccedilatildeo segundo a produccedilatildeo F rarr id

Na linha 2 o estado 5 eacute empilhado (siacutembolo id)

I5

F rarr id

Natildeo haacute transiccedilatildeo a partir do estado 5 sob a entrada por isso reduzimos

39 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o lado direito da produccedilatildeo da linha (2) eacute id correspondendo ao estado 5 e seu lado direito eacute o F

Com os estados ao desempilhar o estado 5 correspondendo ao siacutembolo id o estado 0 passa a ser o topo

0 F $

40 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id I3

T rarr F

F

Procuramos uma transiccedilatildeo sob F o lado esquerdo da produccedilatildeo

0 F $

O estado 0 possui uma transiccedilatildeo em F p o estado 3 onde empilhamos o estado 3 com o siacutembolo F Ver linha (3)

3

41 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I3

T rarr F

Natildeo haacute transiccedilatildeo a partir do estado 3 sob a entrada por isso reduzimos

A partir do item [T rarr F ] no estado 3 efetuamos uma reduccedilatildeo segundo a produccedilatildeo T rarr F

3

0

T $

42 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

I7

T rarr T F

F rarr ( E )

F rarr id

id

Como outro exemplo considere a linha (5) com o estado 7 referente ao siacutembolo no topo da pilha

Esse estado 7 possui uma transaccedilatildeo para o estado 5 sob a entrada id de modo que empilhamos o estado 5

43 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o estado 5 natildeo possui transiccedilotildees de modo que reduzimos segundo F rarr id

quando removemos da pilha o estado 5 correspondente ao lado direito id o estado 7 passa a ser o topo da pilha

44 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Como o estado 7 possui uma transaccedilatildeo sob F para o estado 10 empilhamos o estado 10 (siacutembolo F)

I7

T rarr T F

F rarr ( E )

F rarr id

I10

T rarr T F

F

45 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O algoritmo eacute o mesmo para todos

os analisadores sintaacuteticos LR

Soacute a tabela de anaacutelise eacute diferente

de um analisador para o outro

O algoritmo lecirc caracteres de um

buffer de entrada um de cada vez

46 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O analisador sintaacutetico shift-reduce

transfere um siacutembolo para pilha jaacute

o analisador sintaacutetico LR transfere

um estado

Cada estado resume a informaccedilatildeo

contida na pilha abaixo dele

47 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

A pilha conteacutem uma sequencia de

estados s0s1 sm onde sm estaacute

no topo

No meacutetodo SLR a pilha conteacutem

estados do autocircmato LR(0)

Por construccedilatildeo a cada estado eacute

associado 1 siacutembolo da gramaacutetica

48 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Lembrem-se de que os estados

correspondem a conj de itens e

que haacute uma transiccedilatildeo do estado i

para o estado j se GOTO(Ii X) = Ij

Todas as transiccedilotildees para o estado

j devem ser para o mesmo siacutembolo

da gramaacutetica X

49 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

Sm

Sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Desta forma cada estado exceto

o estado inicial 0 possui um uacutenico

siacutembolo da gramaacutetica associado a

ele

50 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

A tabela LR consiste em duas partes ACTION uma funccedilatildeo de accedilatildeo de anaacutelise e GOTO uma funccedilatildeo de transiccedilatildeo

1 A funccedilatildeo ACTION recebe como argumentos um estado i e um estado a (ou $) O valor de ACTION(i a) pode ter um dos quatro formatos

a) Shift j onde j eacute um estado

A accedilatildeo tomada pelo analisador sintaacutetico efetivamente transfere a entrada a para a pilha mas usa o estado j para representar a

51 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

b) Reduce Ararr β A accedilatildeo do analisador efetivamente reduz β no topo da pilha para A o lado esquerdo da produccedilatildeo

c) Accept O analisador aceita a entrada e termina a anaacutelise

d) Error O analisador descobre um erro em sua entrada passa o controle p o recuperador de erro que toma alguma accedilatildeo corretiva

2 Estendemos a funccedilatildeo GOTO definida sobre um conjunto de itens para os estados se GOTO(Ii A) = Ij entatildeo GOTO tambeacutem mapeia um estado i e um natildeo-terminal A para o estado j

52 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

Para descrever o comportamento de uma analisador LR eacute recomendaacutevel ter uma notaccedilatildeo representado o estado completo do analisador sua pilha e a entrada restante

Uma configuraccedilatildeo p um analisador LR eacute um par (s0s1sm aiai+1an $) O primeiro componente eacute o conteuacutedo da pilha com o topo agrave direita e o segundo componente representa a entrada restante

Essa configuraccedilatildeo representa a seguinte forma sentencial agrave direita (X0X1Xmaiai+1an) Assim como faria um analisador shift-reduce

53 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

A uacutenica diferenccedila eacute que em inveacutes de siacutembolos da gramaacutetica a pilha conteacutem estados a partir dos quais os siacutembolos da gramaacutetica podem ser recuperados

Ou seja Xi eacute o siacutembolo da gramaacutetica representado pelo estado si

Observe que s0 o estado inicial do analisador sintaacutetico natildeo representa um siacutembolo da gramaacutetica e serve como marcador de fundo da pilha aleacutem de desempenhar um papel importante na anaacutelise

54 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

O proacuteximo movimento do analisador a partir da configuraccedilatildeo dada eacute determinado pela leitura de ai o siacutembolo de entrada corrente e sm o estado do topo da pilha e entatildeo consultando a entrada ACTION[sm ai] na tabela de accedilatildeo de anaacutelise

As configuraccedilotildees restantes apoacutes cada um dos quatro tipos de movimentaccedilatildeo satildeo as seguintes

1 Se ACTION[Sm ai] = shift s o analisador sintaacutetico executa um movimento de transferecircncia (shift move) ele empilha o estado s e avanccedila da entrada resultando na configuraccedilatildeo (s0s1 sm ai+1an $)

55 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2 Se ACTION[Sm ai]=reduce Ararrβ entatildeo o analisador sintaacutetico executa um movimento de reduzir (reduce move) resultando na configuraccedilatildeo (s0s1 sm-rs aiai+1an $)

onde r eacute o comprimento de β e s = GOTO[sm-r A]

Aqui o analisador sintaacutetico incialmente desempilhou os r siacutembolos de estado da pilha expondo o estado sm-r

O analisador sintaacutetico entatildeo empilhou s a entrada para GOTO[sm-r A] na pilha O siacutembolo corrente da entrada natildeo eacute alterado em um movimento de reduzir

56 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2

Para os LR que construiremos Xm-r+1Xm a sequencia de siacutembolos da gramaacutetica correspondendo aos estados retirados da pilha sempre iratildeo casar com β o lado direito da produccedilatildeo sendo reduzida

A saiacuteda de um analisador LR eacute gerada apoacutes um movimento de reduzir executando a accedilatildeo semacircntica associada agrave produccedilatildeo que estaacute sendo reduzida

No momento vamos considerar que a saiacuteda consiste soacute na impressatildeo da produccedilatildeo de reduccedilatildeo

57 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

3 Se ACTION[sm ai] = accept a anaacutelise estaacute concluiacuteda

4 Se ACTION[sm ai] = error o analisador sintaacutetico descobriu um erro e ativa uma rotina para recuperaccedilatildeo de erro

Todos os analisadores sintaacuteticos LR se comportam dessa maneira

A uacutenica diferenccedila entre eles diz respeito a informaccedilatildeo contida nos campos ACTION e GOTO da tabela de anaacutelise

O algoritmo de anaacutelise LR eacute resumido nos proacuteximos slides

58 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

Entrada Uma cadeia de entrada w e uma tabela de anaacutelise com funccedilotildees ACTION e GOTO para uma gramaacutetica G

Saiacuteda Se w estaacute em L(G) os passos os passos de uma reduccedilatildeo de uma anaacutelise ascendente para w

Caso contraacuterio uma indicaccedilatildeo de erro

Meacutetodo Inicialmente o analisador sintaacutetico possui w$ no buffer de entrada e s0 em sua pilha onde s0 representa o estado inicial

O analisador sintaacutetico entatildeo executa o algoritmo

59 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

[PSEUDO] seja a o primeiro siacutembolo de w$ while (1) Seja s o estado no topo da pilha if (ACTION[s a] = shift t) empilha t na pilha seja a o proacuteximo siacutembolo da entrada else if (ACTION[s a] = reduce Ararr β) desempilha siacutembolos |β| da pilha faccedila o estado t agora ser o topo da pilha empilhe GOTO[t A] na pilha imprima a produccedilatildeo Ararr β else if (ACTION[s a] = accept) pare a anaacutelise terminou

else chame uma rotina de recuperaccedilatildeo de erros

60 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR ndash Exemplo

A tabela do proacuteximo slide monstra as funccedilotildees ACTION e GOTO de uma tabela de anaacutelise LR para a gramaacutetica de expressatildeo estudada nesta aula e repetida aqui com produccedilotildees numeradas

Os coacutedigos para as accedilotildees satildeo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

(1) E rarr E + T

(2) E rarr T

(3) T rarr T F

(4) T rarr F

(5) F rarr ( E )

(6) F rarr id

1 Si significa avanccedila na entrada e empilha o estado i na pilha

2 Rj significa reduce segundo a produccedilatildeo de nuacutemero j

3 Acc significa accept

4 Entrada em branco significa error

61 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Estado ACTION

id + ( ) $

0 s5 s4

1 S6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4

5 r6 r6 r6 r6

6 s5 s4

7 s5 s4

8 r6 s11

9 s1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

GOTO

E T F

1 2 3

8 2 3

9 3

10

O valor de GOTO(s a) para o

terminal a estaacute em ACTION da

tabela de anaacutelise conectado agrave

accedilatildeo de transferecircncia sob a

entrada a e o estado s

O GOTO fornece o GOTO[s a]

para os natildeo-terminais A

Ok

Mas como eu consigo os dados

desta tabela

62 Geovane Griesang

A sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

FOLLOW(E) = FOLLOW(Ersquo) = ) $

FOLLOW(T) = FOLLOW(Trsquo) = + ) $

FOLLOW(F) = + ) $

63 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Construindo tabelas de anaacutelise SLR

Esse meacutetodo eacute o mais simples dos LRs Vamos nos referir a tabela de anaacutelise construiacuteda por este meacutetodo como uma tabela SLR e o analisador LR usando uma tabela SLR como um analisador sintaacutetico SLR

O meacutetodo SLR comeccedila com os itens LR(0) e autocircmatos LR(0) ou seja dada uma gramaacutetica G estendemos G para produzir Grsquo com o novo siacutembolo inicial Srsquo A partir de Grsquo construiacutemos C a coleccedilatildeo canocircnica de conj de itens para Grsquo junto com a funccedilatildeo GOTO

Para construir as entradas ACTION e GOTO da tabela de anaacutelise usando o algoritmo a seguir eacute preciso que conheccedilamos FOLLOW(A) para cada natildeo-terminal A de uma gramaacutetica

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 10: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

10 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR

A principal desvantagem do meacutetodo LR estaacute relacionada com a geraccedilatildeo do analisador sua construccedilatildeo a matildeo p uma linguagem de programaccedilatildeo tiacutepica eacute muito trabalhosa

Portanto eacute necessaacuterio o uso de uma ferramenta especializada um gerador de analisador LR

Felizmente muitos desses geradores estatildeo disponiacuteveis como por exemplo o Yacc Esse gerador recebe como entrada um GLC e produz automaticamente como saiacuteda um analisador sintaacutetico para esta gramaacutetica

11 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Reduccedilotildees - Exemplo

A derivaccedilatildeo segue a seguinte sequencia de cadeias

id id F id T id T F T E

Entrada id id

Neste ponto temos duas opccedilotildees de reduccedilatildeo podemos reduzir a cadeia T para E segundo a produccedilatildeo E rarr T e a cadeia consistindo no segundo id que representa o lado direito de F rarr id Escolhemos a segunda opccedilatildeo e reduzimos id para F produzindo a cadeia T F

id id

F rarr id F id

T rarr F T id

E rarr T E id ou F rarr id T F

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

12 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Itens e o autocircmato LR

Como o analisador sintaacutetico shift-reduce sabe quando transferir p a pilha e quando reduzir

Ex Dado o conteuacutedo de pilha $T e o proacuteximo siacutembolo da entrada como o analisador sabe que T no topo da pilha natildeo eacute um handle de modo que a accedilatildeo apropriada seja transferir o ldquordquo para a pilha e natildeo reduzir T para E

Entrada id id E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

id id

F rarr id F id

T rarr F T id

E rarr T E id ou F rarr id T F

13 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Itens e o autocircmato LR

Um analisador LR decide sobre as accedilotildees shift-reduce mantendo estados para acompanhar onde se encontra a anaacutelise

Os estados representam conjuntos de ldquoitensrdquo

Um item LR(0) de uma gramaacutetica G eacute a produccedilatildeo de G com um ponto em alguma posiccedilatildeo do seu lado direito

A produccedilatildeo A rarr XYZ gera os quatro itens A rarr XYZ

A rarr XYZ

A rarr XYZ

A rarr XYZ A produccedilatildeo A rarr 120576 gera apenas um item A rarr

14 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR - Itens e o autocircmato LR Representaccedilatildeo dos conjuntos de itens

Um gerador de analisadores sintaacuteticos que produz um analisador ascendente

deve representar os itens e conjunto de itens convenientemente

Um item pode ser representado por um par de inteiros onde o primeiro

representa o nuacutemero de uma das produccedilotildees da gramaacutetica subjacente e o

segundo indica a posiccedilatildeo do ponto

Conjuntos de itens podem ser representados por uma lista desses pares

A rarr XYZ

A rarr XYZ

A rarr XYZ

A rarr XYZ

15 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR - Itens e o autocircmato LR Representaccedilatildeo dos conjuntos de itens

O conjunto de itens necessaacuterios frequentemente incluem itens de

ldquofechamentordquo (ldquoclosurerdquo) onde o ponto estaacute no iniacutecio do corpo

Esses itens sempre podem ser reconstruiacutedos a partir dos outros itens no

conjunto e natildeo temos de incluiacute-los na lista

A rarr XYZ

A rarr XYZ

A rarr XYZ

A rarr XYZ

16 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Itens e o autocircmato LR

Um item indica quanto de uma produccedilatildeo jaacute foi visto em determinado ponto no processo de reconhecimento sintaacutetico Ex

O item ArarrXYZ indica o iniacutecio da busca de uma cadeia derivaacutevel de XYZ na entrada

O item A rarr XYZ indica que no ponto atual onde se encontra a anaacutelise uma cadeia X jaacute foi encontrada e que esperamos em seguida ver uma cadeia derivaacutevel de YZ

O item A rarr XYZ indica o fim da busca ou seja jaacute derivamos o lado direito XYZ de A e que pode ser o momento de reduzir XYZ para A

A rarr XYZ

A rarr XYZ

A rarr XYZ

A rarr XYZ

17 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Itens e o autocircmato LR

Uma coleccedilatildeo de conj de itens LR(0) chamada coleccedilatildeo LR(0) canocircnica oferece a base para construccedilatildeo de um autocircmato finito determinista que eacute usado para dirigir as decisotildees durante a anaacutelise

Esse autocircmato eacute chamado de autocircmato LR(0)

Em particular cada estado do autocircmato LR(0) representa um conjunto de itens na coleccedilatildeo LR(0) canocircnica

18 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Exemplo Para construir a coleccedilatildeo LR(0) canocircnica para uma gramaacutetica definimos uma gramaacutetica estendida e duas funccedilotildees

funccedilatildeo de fechamento (function CLOSURE)

funccedilatildeo de transiccedilatildeo (function GOTO)

Se G eacute uma gramaacutetica com siacutembolo inicial S entatildeo Grsquo eacute uma gramaacutetica estendida para G com o novo siacutembolo inicial Srsquo e a produccedilatildeo Srsquo rarr S

O objetivo dessa nova produccedilatildeo eacute simplificar a identificaccedilatildeo de quando o reconhecedor sintaacutetico deve parar e anunciar a aceitaccedilatildeo da cadeia de entrada

Ou seja a aceitaccedilatildeo ocorre se e somente se o analisador estiver para reduzir por Srsquo rarr S

19 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Se I eacute um conj de itens para a gramaacutetica G entatildeo CLOSURE(I) eacute o conj de itens construiacutedos a partir de I pelas duas regras

1 Inicialmente acrescente todo item de I no CLOSURE(I)

2 Se A rarr αBβ estaacute em CLOSEURE(I) e B rarr γ eacute uma produccedilatildeo entatildeo adicione o item B rarr γ em CLOSURE(I) se ele ainda natildeo estaacute laacute

Ix

A rarr αBβ

B rarr γ

20 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Intuitivamente A rarr αBβ em CLOSURE(I) indica que em algum ponto no processo de reconhecimento os itens correspondentes as produccedilotildees-B devem ser acrescentados para dirigir a busca por B

A subcadeia derivaacutevel de Bβ na entrada teraacute um prefixo derivaacutevel de B aplicando umas das produccedilotildees-B

Portanto incluiacutemos itens para todas as produccedilotildees-B ou seja se B rarr γ eacute uma produccedilatildeo tambeacutem incluiacutemos B rarr γ em CLOSURE(I) este processo eacute conhecido como fechamento de estado

Ix

A rarr αBβ

B rarr γ

21 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

P ver como o fechamento de um estado eacute computado Ersquo rarr E eacute colocado em CLOSURE(I) pela regra (1)

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Acrescente todo item de I no CLOSURE(I)

I0

Ersquo rarr E

22 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Como existe um natildeo-terminal E agrave direita de um ponto acrescentamos as produccedilotildees-E com pontos mais agrave esquerda do lado direito dos itens ex

E rarr E + T e E rarr T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

23 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Agora existe um natildeo-terminal T imediatamente agrave direita de um ponto no segundo item incluiacutedo (E rarr T) de modo que acrescentamos as produccedilotildees-T T rarr T F e T rarr F

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

24 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Em seguida o natildeo-terminal F agrave direita de um ponto nos forccedila a incluir os itens Frarr (E) e F rarr id mas nenhum outro item precisa ser acrescentado

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr (E)

F rarr id

25 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Um modo conveniente de implementar a funccedilatildeo de fechamento (closure) eacute manter um arranjo booleano added indexado pelos natildeo-terminais de G de modo que added[B] seja definido como verdadeiro (true) se e quando incluirmos o item B rarr γ para cada produccedilatildeo-B B rarr γ

SetOfItems CLOSURE(I)

J=I

repeat

for (cada item A rarr αBβ em J)

for (cada produccedilatildeo B rarr γ de G)

if (B rarr γ natildeo estaacute em J)

Adicione B rarr γ em J

until mais nenhum item seja adicionado a J em um passo do loop

return J

Ix

A rarr αBβ

B rarr γ

26 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Observe que se uma produccedilatildeo-B for incluiacuteda no fechamento de I com o ponto mais agrave esquerda do seu lado direito entatildeo todas as produccedilotildees-B seratildeo igualmente incluiacutedas no fechamento Ex A rarr αBβ

Uma lista de natildeo-terminais B cujas produccedilotildees foram incluiacutedas dessa forma eacute suficiente Dividimos todos os conjuntos de itens de interesse em duas classes

1 Itens de base (kernel) o item inicial Srsquo rarr S e todos itens cujos pontos natildeo estatildeo mais agrave esquerda em seus lados direitos

2 Itens que natildeo satildeo de base todos os itens com seus pontos mais agrave esquerda em seus lados direitos exceto Srsquo rarr S Ex B rarr γ

Ix

A rarr αBβ

B rarr γ

27 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Aleacutem do mais cada conjunto de itens de interesse eacute formado a partir do fechamento de um conjunto de itens de base

Os itens adicionados no fechamento nunca podem ser itens de base naturalmente

Assim podemos representar os conjuntos de itens em que realmente estamos interessados com pouca memoacuteria se desprezarmos todos que natildeo satildeo itens de base sabendo que esses podem ser gerados novamente no processo de fechamento Ex B rarr γ exceto Srsquo rarr S

Ix

A rarr αBβ

B rarr γ

28 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

A segunda funccedilatildeo usada na construccedilatildeo da coleccedilatildeo canocircnica LR(0) eacute a funccedilatildeo de transiccedilatildeo GOTO(I X) onde I eacute o conjunto de itens de base e X eacute um siacutembolo da gramaacutetica

GOTO(I X) eacute definido como fechamento do conjunto de todos os itens [ArarrαXβ] tais que

[A rarr αXβ] estaacute em I

A funccedilatildeo de transiccedilatildeo GOTO eacute utilizada para definir as transaccedilotildees no autocircmato LR(0) para uma gramaacutetica

I1

Ersquo rarr E

E rarr E + T

I0

Ersquo rarr E

E rarr E + T

E

29 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Estados do autocircmato correspondem aos conjuntos de itens e GOTO(I +) especifica a transaccedilatildeo do estado I para um novo estado I sob a entrada X

Se I representa o conjunto com dois itens [Ersquo rarr E][E rarr E+T] entatildeo GOTO(I +) conteacutem os itens

Calculamos GOTO(I +) examinando os itens em I com o + imediatamente agrave direita do ponto

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

A rarr αXβ

A rarr αXβ

I1

Ersquo rarr E

E rarr E + T +

I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

30 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Calculamos GOTO(I +) examinando os itens em I com o + imediatamente agrave direita do ponto

O item Ersquo rarr E natildeo eacute desse tipo mas Ersquo rarr E + T sim

Movemos o ponto para imediatamente agrave direita de + e obtemos ErarrE + T

e entatildeo calculamos o fechamento desse conjunto unitaacuterio

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Itens em I

[Ersquo rarr E]

[E rarr E+T]

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I1

Ersquo rarr E

E rarr E + T +

31 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Agora estamos prontos para construir C a coleccedilatildeo canocircnica de conjuntos

de itens LR(0) para uma gramaacutetica estendida Grsquo

void Itens(Grsquo)

C = CLOSURE([Srsquo rarr S])

repeat

for (cada conjunto de itens I em C)

for (cada siacutembolo da gramaacutetica X)

if (GOTO(I X) natildeo eacute vazio e natildeo estaacute em C)

Adicione GOTO(I X) em C

until nenhum novo conjunto de itens seja adicionado em C em uma rodada

32 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

A ideia central por traacutes da anaacutelise ldquoLR Simplesrdquo ou SLR eacute a construccedilatildeo do autocircmato LR(0) a partir da gramaacutetica dada

Os estados desses autocircmatos satildeo os conjuntos de itens da coleccedilatildeo LR canocircnica e as transiccedilotildees satildeo dadas pela funccedilatildeo de transiccedilatildeo GOTO

O estado inicial do autocircmato LR eacute dado por CLOSURE([Srsquo rarr S]) onde Srsquo eacute o siacutembolo inicial da gramaacutetica estendida

Todos os estados satildeo estados de aceitaccedilatildeo Nos referimos ao ldquoestado jrdquo como o estado correspondente ao conjunto de itens Ij

33 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E

Aceitar $

I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

34 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Como os autocircmatos LR(0) podem ajudar-nos a decidir por uma das accedilotildees shift-reduce (veja as decisotildees entre shift-reduce a seguir)

Suponha que a cadeia γ dos siacutembolos da gramaacutetica leve o autocircmato LR(0) do estado inicial 0 para algum estado j

Desta forma avance sobre o proacuteximo siacutembolo a se o estado j possuir uma transaccedilatildeo sob a

Caso contraacuterio escolha reduzir

Os itens no estado j nos diratildeo qual produccedilatildeo usar

35 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

O algoritmo LR abaixo utiliza sua pilha para acompanhar os estados e tambeacutem os siacutembolos da gramaacutetica

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Na verdade

O siacutembolo da gramaacutetica pode ser

recuperado a parir do estado de

modo que a pilha possua estados

ao inveacutes de siacutembolos

36 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Usamos uma pilha

p conter os estados

Os siacutembolos que correspondem aos estados estatildeo na coluna ldquoSiacutembolosrdquo

A pilha da linha (1) tecircm o estado inicial 0 do autocircmato

37 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Portanto fazemos a transferecircncia

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

O siacutembolo da linha 1 eacute o marcador de fundo da pilha $

O proacuteximo siacutembolo de entrada eacute id e o estado 0 tem uma transiccedilatildeo sob id p o estado 5

38 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

A partir do item [F rarr id ] no estado 5 efetuamos uma reduccedilatildeo segundo a produccedilatildeo F rarr id

Na linha 2 o estado 5 eacute empilhado (siacutembolo id)

I5

F rarr id

Natildeo haacute transiccedilatildeo a partir do estado 5 sob a entrada por isso reduzimos

39 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o lado direito da produccedilatildeo da linha (2) eacute id correspondendo ao estado 5 e seu lado direito eacute o F

Com os estados ao desempilhar o estado 5 correspondendo ao siacutembolo id o estado 0 passa a ser o topo

0 F $

40 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id I3

T rarr F

F

Procuramos uma transiccedilatildeo sob F o lado esquerdo da produccedilatildeo

0 F $

O estado 0 possui uma transiccedilatildeo em F p o estado 3 onde empilhamos o estado 3 com o siacutembolo F Ver linha (3)

3

41 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I3

T rarr F

Natildeo haacute transiccedilatildeo a partir do estado 3 sob a entrada por isso reduzimos

A partir do item [T rarr F ] no estado 3 efetuamos uma reduccedilatildeo segundo a produccedilatildeo T rarr F

3

0

T $

42 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

I7

T rarr T F

F rarr ( E )

F rarr id

id

Como outro exemplo considere a linha (5) com o estado 7 referente ao siacutembolo no topo da pilha

Esse estado 7 possui uma transaccedilatildeo para o estado 5 sob a entrada id de modo que empilhamos o estado 5

43 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o estado 5 natildeo possui transiccedilotildees de modo que reduzimos segundo F rarr id

quando removemos da pilha o estado 5 correspondente ao lado direito id o estado 7 passa a ser o topo da pilha

44 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Como o estado 7 possui uma transaccedilatildeo sob F para o estado 10 empilhamos o estado 10 (siacutembolo F)

I7

T rarr T F

F rarr ( E )

F rarr id

I10

T rarr T F

F

45 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O algoritmo eacute o mesmo para todos

os analisadores sintaacuteticos LR

Soacute a tabela de anaacutelise eacute diferente

de um analisador para o outro

O algoritmo lecirc caracteres de um

buffer de entrada um de cada vez

46 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O analisador sintaacutetico shift-reduce

transfere um siacutembolo para pilha jaacute

o analisador sintaacutetico LR transfere

um estado

Cada estado resume a informaccedilatildeo

contida na pilha abaixo dele

47 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

A pilha conteacutem uma sequencia de

estados s0s1 sm onde sm estaacute

no topo

No meacutetodo SLR a pilha conteacutem

estados do autocircmato LR(0)

Por construccedilatildeo a cada estado eacute

associado 1 siacutembolo da gramaacutetica

48 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Lembrem-se de que os estados

correspondem a conj de itens e

que haacute uma transiccedilatildeo do estado i

para o estado j se GOTO(Ii X) = Ij

Todas as transiccedilotildees para o estado

j devem ser para o mesmo siacutembolo

da gramaacutetica X

49 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

Sm

Sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Desta forma cada estado exceto

o estado inicial 0 possui um uacutenico

siacutembolo da gramaacutetica associado a

ele

50 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

A tabela LR consiste em duas partes ACTION uma funccedilatildeo de accedilatildeo de anaacutelise e GOTO uma funccedilatildeo de transiccedilatildeo

1 A funccedilatildeo ACTION recebe como argumentos um estado i e um estado a (ou $) O valor de ACTION(i a) pode ter um dos quatro formatos

a) Shift j onde j eacute um estado

A accedilatildeo tomada pelo analisador sintaacutetico efetivamente transfere a entrada a para a pilha mas usa o estado j para representar a

51 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

b) Reduce Ararr β A accedilatildeo do analisador efetivamente reduz β no topo da pilha para A o lado esquerdo da produccedilatildeo

c) Accept O analisador aceita a entrada e termina a anaacutelise

d) Error O analisador descobre um erro em sua entrada passa o controle p o recuperador de erro que toma alguma accedilatildeo corretiva

2 Estendemos a funccedilatildeo GOTO definida sobre um conjunto de itens para os estados se GOTO(Ii A) = Ij entatildeo GOTO tambeacutem mapeia um estado i e um natildeo-terminal A para o estado j

52 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

Para descrever o comportamento de uma analisador LR eacute recomendaacutevel ter uma notaccedilatildeo representado o estado completo do analisador sua pilha e a entrada restante

Uma configuraccedilatildeo p um analisador LR eacute um par (s0s1sm aiai+1an $) O primeiro componente eacute o conteuacutedo da pilha com o topo agrave direita e o segundo componente representa a entrada restante

Essa configuraccedilatildeo representa a seguinte forma sentencial agrave direita (X0X1Xmaiai+1an) Assim como faria um analisador shift-reduce

53 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

A uacutenica diferenccedila eacute que em inveacutes de siacutembolos da gramaacutetica a pilha conteacutem estados a partir dos quais os siacutembolos da gramaacutetica podem ser recuperados

Ou seja Xi eacute o siacutembolo da gramaacutetica representado pelo estado si

Observe que s0 o estado inicial do analisador sintaacutetico natildeo representa um siacutembolo da gramaacutetica e serve como marcador de fundo da pilha aleacutem de desempenhar um papel importante na anaacutelise

54 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

O proacuteximo movimento do analisador a partir da configuraccedilatildeo dada eacute determinado pela leitura de ai o siacutembolo de entrada corrente e sm o estado do topo da pilha e entatildeo consultando a entrada ACTION[sm ai] na tabela de accedilatildeo de anaacutelise

As configuraccedilotildees restantes apoacutes cada um dos quatro tipos de movimentaccedilatildeo satildeo as seguintes

1 Se ACTION[Sm ai] = shift s o analisador sintaacutetico executa um movimento de transferecircncia (shift move) ele empilha o estado s e avanccedila da entrada resultando na configuraccedilatildeo (s0s1 sm ai+1an $)

55 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2 Se ACTION[Sm ai]=reduce Ararrβ entatildeo o analisador sintaacutetico executa um movimento de reduzir (reduce move) resultando na configuraccedilatildeo (s0s1 sm-rs aiai+1an $)

onde r eacute o comprimento de β e s = GOTO[sm-r A]

Aqui o analisador sintaacutetico incialmente desempilhou os r siacutembolos de estado da pilha expondo o estado sm-r

O analisador sintaacutetico entatildeo empilhou s a entrada para GOTO[sm-r A] na pilha O siacutembolo corrente da entrada natildeo eacute alterado em um movimento de reduzir

56 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2

Para os LR que construiremos Xm-r+1Xm a sequencia de siacutembolos da gramaacutetica correspondendo aos estados retirados da pilha sempre iratildeo casar com β o lado direito da produccedilatildeo sendo reduzida

A saiacuteda de um analisador LR eacute gerada apoacutes um movimento de reduzir executando a accedilatildeo semacircntica associada agrave produccedilatildeo que estaacute sendo reduzida

No momento vamos considerar que a saiacuteda consiste soacute na impressatildeo da produccedilatildeo de reduccedilatildeo

57 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

3 Se ACTION[sm ai] = accept a anaacutelise estaacute concluiacuteda

4 Se ACTION[sm ai] = error o analisador sintaacutetico descobriu um erro e ativa uma rotina para recuperaccedilatildeo de erro

Todos os analisadores sintaacuteticos LR se comportam dessa maneira

A uacutenica diferenccedila entre eles diz respeito a informaccedilatildeo contida nos campos ACTION e GOTO da tabela de anaacutelise

O algoritmo de anaacutelise LR eacute resumido nos proacuteximos slides

58 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

Entrada Uma cadeia de entrada w e uma tabela de anaacutelise com funccedilotildees ACTION e GOTO para uma gramaacutetica G

Saiacuteda Se w estaacute em L(G) os passos os passos de uma reduccedilatildeo de uma anaacutelise ascendente para w

Caso contraacuterio uma indicaccedilatildeo de erro

Meacutetodo Inicialmente o analisador sintaacutetico possui w$ no buffer de entrada e s0 em sua pilha onde s0 representa o estado inicial

O analisador sintaacutetico entatildeo executa o algoritmo

59 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

[PSEUDO] seja a o primeiro siacutembolo de w$ while (1) Seja s o estado no topo da pilha if (ACTION[s a] = shift t) empilha t na pilha seja a o proacuteximo siacutembolo da entrada else if (ACTION[s a] = reduce Ararr β) desempilha siacutembolos |β| da pilha faccedila o estado t agora ser o topo da pilha empilhe GOTO[t A] na pilha imprima a produccedilatildeo Ararr β else if (ACTION[s a] = accept) pare a anaacutelise terminou

else chame uma rotina de recuperaccedilatildeo de erros

60 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR ndash Exemplo

A tabela do proacuteximo slide monstra as funccedilotildees ACTION e GOTO de uma tabela de anaacutelise LR para a gramaacutetica de expressatildeo estudada nesta aula e repetida aqui com produccedilotildees numeradas

Os coacutedigos para as accedilotildees satildeo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

(1) E rarr E + T

(2) E rarr T

(3) T rarr T F

(4) T rarr F

(5) F rarr ( E )

(6) F rarr id

1 Si significa avanccedila na entrada e empilha o estado i na pilha

2 Rj significa reduce segundo a produccedilatildeo de nuacutemero j

3 Acc significa accept

4 Entrada em branco significa error

61 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Estado ACTION

id + ( ) $

0 s5 s4

1 S6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4

5 r6 r6 r6 r6

6 s5 s4

7 s5 s4

8 r6 s11

9 s1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

GOTO

E T F

1 2 3

8 2 3

9 3

10

O valor de GOTO(s a) para o

terminal a estaacute em ACTION da

tabela de anaacutelise conectado agrave

accedilatildeo de transferecircncia sob a

entrada a e o estado s

O GOTO fornece o GOTO[s a]

para os natildeo-terminais A

Ok

Mas como eu consigo os dados

desta tabela

62 Geovane Griesang

A sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

FOLLOW(E) = FOLLOW(Ersquo) = ) $

FOLLOW(T) = FOLLOW(Trsquo) = + ) $

FOLLOW(F) = + ) $

63 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Construindo tabelas de anaacutelise SLR

Esse meacutetodo eacute o mais simples dos LRs Vamos nos referir a tabela de anaacutelise construiacuteda por este meacutetodo como uma tabela SLR e o analisador LR usando uma tabela SLR como um analisador sintaacutetico SLR

O meacutetodo SLR comeccedila com os itens LR(0) e autocircmatos LR(0) ou seja dada uma gramaacutetica G estendemos G para produzir Grsquo com o novo siacutembolo inicial Srsquo A partir de Grsquo construiacutemos C a coleccedilatildeo canocircnica de conj de itens para Grsquo junto com a funccedilatildeo GOTO

Para construir as entradas ACTION e GOTO da tabela de anaacutelise usando o algoritmo a seguir eacute preciso que conheccedilamos FOLLOW(A) para cada natildeo-terminal A de uma gramaacutetica

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 11: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

11 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Reduccedilotildees - Exemplo

A derivaccedilatildeo segue a seguinte sequencia de cadeias

id id F id T id T F T E

Entrada id id

Neste ponto temos duas opccedilotildees de reduccedilatildeo podemos reduzir a cadeia T para E segundo a produccedilatildeo E rarr T e a cadeia consistindo no segundo id que representa o lado direito de F rarr id Escolhemos a segunda opccedilatildeo e reduzimos id para F produzindo a cadeia T F

id id

F rarr id F id

T rarr F T id

E rarr T E id ou F rarr id T F

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

12 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Itens e o autocircmato LR

Como o analisador sintaacutetico shift-reduce sabe quando transferir p a pilha e quando reduzir

Ex Dado o conteuacutedo de pilha $T e o proacuteximo siacutembolo da entrada como o analisador sabe que T no topo da pilha natildeo eacute um handle de modo que a accedilatildeo apropriada seja transferir o ldquordquo para a pilha e natildeo reduzir T para E

Entrada id id E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

id id

F rarr id F id

T rarr F T id

E rarr T E id ou F rarr id T F

13 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Itens e o autocircmato LR

Um analisador LR decide sobre as accedilotildees shift-reduce mantendo estados para acompanhar onde se encontra a anaacutelise

Os estados representam conjuntos de ldquoitensrdquo

Um item LR(0) de uma gramaacutetica G eacute a produccedilatildeo de G com um ponto em alguma posiccedilatildeo do seu lado direito

A produccedilatildeo A rarr XYZ gera os quatro itens A rarr XYZ

A rarr XYZ

A rarr XYZ

A rarr XYZ A produccedilatildeo A rarr 120576 gera apenas um item A rarr

14 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR - Itens e o autocircmato LR Representaccedilatildeo dos conjuntos de itens

Um gerador de analisadores sintaacuteticos que produz um analisador ascendente

deve representar os itens e conjunto de itens convenientemente

Um item pode ser representado por um par de inteiros onde o primeiro

representa o nuacutemero de uma das produccedilotildees da gramaacutetica subjacente e o

segundo indica a posiccedilatildeo do ponto

Conjuntos de itens podem ser representados por uma lista desses pares

A rarr XYZ

A rarr XYZ

A rarr XYZ

A rarr XYZ

15 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR - Itens e o autocircmato LR Representaccedilatildeo dos conjuntos de itens

O conjunto de itens necessaacuterios frequentemente incluem itens de

ldquofechamentordquo (ldquoclosurerdquo) onde o ponto estaacute no iniacutecio do corpo

Esses itens sempre podem ser reconstruiacutedos a partir dos outros itens no

conjunto e natildeo temos de incluiacute-los na lista

A rarr XYZ

A rarr XYZ

A rarr XYZ

A rarr XYZ

16 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Itens e o autocircmato LR

Um item indica quanto de uma produccedilatildeo jaacute foi visto em determinado ponto no processo de reconhecimento sintaacutetico Ex

O item ArarrXYZ indica o iniacutecio da busca de uma cadeia derivaacutevel de XYZ na entrada

O item A rarr XYZ indica que no ponto atual onde se encontra a anaacutelise uma cadeia X jaacute foi encontrada e que esperamos em seguida ver uma cadeia derivaacutevel de YZ

O item A rarr XYZ indica o fim da busca ou seja jaacute derivamos o lado direito XYZ de A e que pode ser o momento de reduzir XYZ para A

A rarr XYZ

A rarr XYZ

A rarr XYZ

A rarr XYZ

17 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Itens e o autocircmato LR

Uma coleccedilatildeo de conj de itens LR(0) chamada coleccedilatildeo LR(0) canocircnica oferece a base para construccedilatildeo de um autocircmato finito determinista que eacute usado para dirigir as decisotildees durante a anaacutelise

Esse autocircmato eacute chamado de autocircmato LR(0)

Em particular cada estado do autocircmato LR(0) representa um conjunto de itens na coleccedilatildeo LR(0) canocircnica

18 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Exemplo Para construir a coleccedilatildeo LR(0) canocircnica para uma gramaacutetica definimos uma gramaacutetica estendida e duas funccedilotildees

funccedilatildeo de fechamento (function CLOSURE)

funccedilatildeo de transiccedilatildeo (function GOTO)

Se G eacute uma gramaacutetica com siacutembolo inicial S entatildeo Grsquo eacute uma gramaacutetica estendida para G com o novo siacutembolo inicial Srsquo e a produccedilatildeo Srsquo rarr S

O objetivo dessa nova produccedilatildeo eacute simplificar a identificaccedilatildeo de quando o reconhecedor sintaacutetico deve parar e anunciar a aceitaccedilatildeo da cadeia de entrada

Ou seja a aceitaccedilatildeo ocorre se e somente se o analisador estiver para reduzir por Srsquo rarr S

19 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Se I eacute um conj de itens para a gramaacutetica G entatildeo CLOSURE(I) eacute o conj de itens construiacutedos a partir de I pelas duas regras

1 Inicialmente acrescente todo item de I no CLOSURE(I)

2 Se A rarr αBβ estaacute em CLOSEURE(I) e B rarr γ eacute uma produccedilatildeo entatildeo adicione o item B rarr γ em CLOSURE(I) se ele ainda natildeo estaacute laacute

Ix

A rarr αBβ

B rarr γ

20 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Intuitivamente A rarr αBβ em CLOSURE(I) indica que em algum ponto no processo de reconhecimento os itens correspondentes as produccedilotildees-B devem ser acrescentados para dirigir a busca por B

A subcadeia derivaacutevel de Bβ na entrada teraacute um prefixo derivaacutevel de B aplicando umas das produccedilotildees-B

Portanto incluiacutemos itens para todas as produccedilotildees-B ou seja se B rarr γ eacute uma produccedilatildeo tambeacutem incluiacutemos B rarr γ em CLOSURE(I) este processo eacute conhecido como fechamento de estado

Ix

A rarr αBβ

B rarr γ

21 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

P ver como o fechamento de um estado eacute computado Ersquo rarr E eacute colocado em CLOSURE(I) pela regra (1)

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Acrescente todo item de I no CLOSURE(I)

I0

Ersquo rarr E

22 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Como existe um natildeo-terminal E agrave direita de um ponto acrescentamos as produccedilotildees-E com pontos mais agrave esquerda do lado direito dos itens ex

E rarr E + T e E rarr T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

23 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Agora existe um natildeo-terminal T imediatamente agrave direita de um ponto no segundo item incluiacutedo (E rarr T) de modo que acrescentamos as produccedilotildees-T T rarr T F e T rarr F

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

24 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Em seguida o natildeo-terminal F agrave direita de um ponto nos forccedila a incluir os itens Frarr (E) e F rarr id mas nenhum outro item precisa ser acrescentado

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr (E)

F rarr id

25 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Um modo conveniente de implementar a funccedilatildeo de fechamento (closure) eacute manter um arranjo booleano added indexado pelos natildeo-terminais de G de modo que added[B] seja definido como verdadeiro (true) se e quando incluirmos o item B rarr γ para cada produccedilatildeo-B B rarr γ

SetOfItems CLOSURE(I)

J=I

repeat

for (cada item A rarr αBβ em J)

for (cada produccedilatildeo B rarr γ de G)

if (B rarr γ natildeo estaacute em J)

Adicione B rarr γ em J

until mais nenhum item seja adicionado a J em um passo do loop

return J

Ix

A rarr αBβ

B rarr γ

26 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Observe que se uma produccedilatildeo-B for incluiacuteda no fechamento de I com o ponto mais agrave esquerda do seu lado direito entatildeo todas as produccedilotildees-B seratildeo igualmente incluiacutedas no fechamento Ex A rarr αBβ

Uma lista de natildeo-terminais B cujas produccedilotildees foram incluiacutedas dessa forma eacute suficiente Dividimos todos os conjuntos de itens de interesse em duas classes

1 Itens de base (kernel) o item inicial Srsquo rarr S e todos itens cujos pontos natildeo estatildeo mais agrave esquerda em seus lados direitos

2 Itens que natildeo satildeo de base todos os itens com seus pontos mais agrave esquerda em seus lados direitos exceto Srsquo rarr S Ex B rarr γ

Ix

A rarr αBβ

B rarr γ

27 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Aleacutem do mais cada conjunto de itens de interesse eacute formado a partir do fechamento de um conjunto de itens de base

Os itens adicionados no fechamento nunca podem ser itens de base naturalmente

Assim podemos representar os conjuntos de itens em que realmente estamos interessados com pouca memoacuteria se desprezarmos todos que natildeo satildeo itens de base sabendo que esses podem ser gerados novamente no processo de fechamento Ex B rarr γ exceto Srsquo rarr S

Ix

A rarr αBβ

B rarr γ

28 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

A segunda funccedilatildeo usada na construccedilatildeo da coleccedilatildeo canocircnica LR(0) eacute a funccedilatildeo de transiccedilatildeo GOTO(I X) onde I eacute o conjunto de itens de base e X eacute um siacutembolo da gramaacutetica

GOTO(I X) eacute definido como fechamento do conjunto de todos os itens [ArarrαXβ] tais que

[A rarr αXβ] estaacute em I

A funccedilatildeo de transiccedilatildeo GOTO eacute utilizada para definir as transaccedilotildees no autocircmato LR(0) para uma gramaacutetica

I1

Ersquo rarr E

E rarr E + T

I0

Ersquo rarr E

E rarr E + T

E

29 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Estados do autocircmato correspondem aos conjuntos de itens e GOTO(I +) especifica a transaccedilatildeo do estado I para um novo estado I sob a entrada X

Se I representa o conjunto com dois itens [Ersquo rarr E][E rarr E+T] entatildeo GOTO(I +) conteacutem os itens

Calculamos GOTO(I +) examinando os itens em I com o + imediatamente agrave direita do ponto

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

A rarr αXβ

A rarr αXβ

I1

Ersquo rarr E

E rarr E + T +

I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

30 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Calculamos GOTO(I +) examinando os itens em I com o + imediatamente agrave direita do ponto

O item Ersquo rarr E natildeo eacute desse tipo mas Ersquo rarr E + T sim

Movemos o ponto para imediatamente agrave direita de + e obtemos ErarrE + T

e entatildeo calculamos o fechamento desse conjunto unitaacuterio

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Itens em I

[Ersquo rarr E]

[E rarr E+T]

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I1

Ersquo rarr E

E rarr E + T +

31 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Agora estamos prontos para construir C a coleccedilatildeo canocircnica de conjuntos

de itens LR(0) para uma gramaacutetica estendida Grsquo

void Itens(Grsquo)

C = CLOSURE([Srsquo rarr S])

repeat

for (cada conjunto de itens I em C)

for (cada siacutembolo da gramaacutetica X)

if (GOTO(I X) natildeo eacute vazio e natildeo estaacute em C)

Adicione GOTO(I X) em C

until nenhum novo conjunto de itens seja adicionado em C em uma rodada

32 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

A ideia central por traacutes da anaacutelise ldquoLR Simplesrdquo ou SLR eacute a construccedilatildeo do autocircmato LR(0) a partir da gramaacutetica dada

Os estados desses autocircmatos satildeo os conjuntos de itens da coleccedilatildeo LR canocircnica e as transiccedilotildees satildeo dadas pela funccedilatildeo de transiccedilatildeo GOTO

O estado inicial do autocircmato LR eacute dado por CLOSURE([Srsquo rarr S]) onde Srsquo eacute o siacutembolo inicial da gramaacutetica estendida

Todos os estados satildeo estados de aceitaccedilatildeo Nos referimos ao ldquoestado jrdquo como o estado correspondente ao conjunto de itens Ij

33 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E

Aceitar $

I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

34 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Como os autocircmatos LR(0) podem ajudar-nos a decidir por uma das accedilotildees shift-reduce (veja as decisotildees entre shift-reduce a seguir)

Suponha que a cadeia γ dos siacutembolos da gramaacutetica leve o autocircmato LR(0) do estado inicial 0 para algum estado j

Desta forma avance sobre o proacuteximo siacutembolo a se o estado j possuir uma transaccedilatildeo sob a

Caso contraacuterio escolha reduzir

Os itens no estado j nos diratildeo qual produccedilatildeo usar

35 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

O algoritmo LR abaixo utiliza sua pilha para acompanhar os estados e tambeacutem os siacutembolos da gramaacutetica

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Na verdade

O siacutembolo da gramaacutetica pode ser

recuperado a parir do estado de

modo que a pilha possua estados

ao inveacutes de siacutembolos

36 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Usamos uma pilha

p conter os estados

Os siacutembolos que correspondem aos estados estatildeo na coluna ldquoSiacutembolosrdquo

A pilha da linha (1) tecircm o estado inicial 0 do autocircmato

37 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Portanto fazemos a transferecircncia

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

O siacutembolo da linha 1 eacute o marcador de fundo da pilha $

O proacuteximo siacutembolo de entrada eacute id e o estado 0 tem uma transiccedilatildeo sob id p o estado 5

38 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

A partir do item [F rarr id ] no estado 5 efetuamos uma reduccedilatildeo segundo a produccedilatildeo F rarr id

Na linha 2 o estado 5 eacute empilhado (siacutembolo id)

I5

F rarr id

Natildeo haacute transiccedilatildeo a partir do estado 5 sob a entrada por isso reduzimos

39 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o lado direito da produccedilatildeo da linha (2) eacute id correspondendo ao estado 5 e seu lado direito eacute o F

Com os estados ao desempilhar o estado 5 correspondendo ao siacutembolo id o estado 0 passa a ser o topo

0 F $

40 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id I3

T rarr F

F

Procuramos uma transiccedilatildeo sob F o lado esquerdo da produccedilatildeo

0 F $

O estado 0 possui uma transiccedilatildeo em F p o estado 3 onde empilhamos o estado 3 com o siacutembolo F Ver linha (3)

3

41 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I3

T rarr F

Natildeo haacute transiccedilatildeo a partir do estado 3 sob a entrada por isso reduzimos

A partir do item [T rarr F ] no estado 3 efetuamos uma reduccedilatildeo segundo a produccedilatildeo T rarr F

3

0

T $

42 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

I7

T rarr T F

F rarr ( E )

F rarr id

id

Como outro exemplo considere a linha (5) com o estado 7 referente ao siacutembolo no topo da pilha

Esse estado 7 possui uma transaccedilatildeo para o estado 5 sob a entrada id de modo que empilhamos o estado 5

43 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o estado 5 natildeo possui transiccedilotildees de modo que reduzimos segundo F rarr id

quando removemos da pilha o estado 5 correspondente ao lado direito id o estado 7 passa a ser o topo da pilha

44 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Como o estado 7 possui uma transaccedilatildeo sob F para o estado 10 empilhamos o estado 10 (siacutembolo F)

I7

T rarr T F

F rarr ( E )

F rarr id

I10

T rarr T F

F

45 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O algoritmo eacute o mesmo para todos

os analisadores sintaacuteticos LR

Soacute a tabela de anaacutelise eacute diferente

de um analisador para o outro

O algoritmo lecirc caracteres de um

buffer de entrada um de cada vez

46 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O analisador sintaacutetico shift-reduce

transfere um siacutembolo para pilha jaacute

o analisador sintaacutetico LR transfere

um estado

Cada estado resume a informaccedilatildeo

contida na pilha abaixo dele

47 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

A pilha conteacutem uma sequencia de

estados s0s1 sm onde sm estaacute

no topo

No meacutetodo SLR a pilha conteacutem

estados do autocircmato LR(0)

Por construccedilatildeo a cada estado eacute

associado 1 siacutembolo da gramaacutetica

48 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Lembrem-se de que os estados

correspondem a conj de itens e

que haacute uma transiccedilatildeo do estado i

para o estado j se GOTO(Ii X) = Ij

Todas as transiccedilotildees para o estado

j devem ser para o mesmo siacutembolo

da gramaacutetica X

49 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

Sm

Sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Desta forma cada estado exceto

o estado inicial 0 possui um uacutenico

siacutembolo da gramaacutetica associado a

ele

50 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

A tabela LR consiste em duas partes ACTION uma funccedilatildeo de accedilatildeo de anaacutelise e GOTO uma funccedilatildeo de transiccedilatildeo

1 A funccedilatildeo ACTION recebe como argumentos um estado i e um estado a (ou $) O valor de ACTION(i a) pode ter um dos quatro formatos

a) Shift j onde j eacute um estado

A accedilatildeo tomada pelo analisador sintaacutetico efetivamente transfere a entrada a para a pilha mas usa o estado j para representar a

51 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

b) Reduce Ararr β A accedilatildeo do analisador efetivamente reduz β no topo da pilha para A o lado esquerdo da produccedilatildeo

c) Accept O analisador aceita a entrada e termina a anaacutelise

d) Error O analisador descobre um erro em sua entrada passa o controle p o recuperador de erro que toma alguma accedilatildeo corretiva

2 Estendemos a funccedilatildeo GOTO definida sobre um conjunto de itens para os estados se GOTO(Ii A) = Ij entatildeo GOTO tambeacutem mapeia um estado i e um natildeo-terminal A para o estado j

52 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

Para descrever o comportamento de uma analisador LR eacute recomendaacutevel ter uma notaccedilatildeo representado o estado completo do analisador sua pilha e a entrada restante

Uma configuraccedilatildeo p um analisador LR eacute um par (s0s1sm aiai+1an $) O primeiro componente eacute o conteuacutedo da pilha com o topo agrave direita e o segundo componente representa a entrada restante

Essa configuraccedilatildeo representa a seguinte forma sentencial agrave direita (X0X1Xmaiai+1an) Assim como faria um analisador shift-reduce

53 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

A uacutenica diferenccedila eacute que em inveacutes de siacutembolos da gramaacutetica a pilha conteacutem estados a partir dos quais os siacutembolos da gramaacutetica podem ser recuperados

Ou seja Xi eacute o siacutembolo da gramaacutetica representado pelo estado si

Observe que s0 o estado inicial do analisador sintaacutetico natildeo representa um siacutembolo da gramaacutetica e serve como marcador de fundo da pilha aleacutem de desempenhar um papel importante na anaacutelise

54 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

O proacuteximo movimento do analisador a partir da configuraccedilatildeo dada eacute determinado pela leitura de ai o siacutembolo de entrada corrente e sm o estado do topo da pilha e entatildeo consultando a entrada ACTION[sm ai] na tabela de accedilatildeo de anaacutelise

As configuraccedilotildees restantes apoacutes cada um dos quatro tipos de movimentaccedilatildeo satildeo as seguintes

1 Se ACTION[Sm ai] = shift s o analisador sintaacutetico executa um movimento de transferecircncia (shift move) ele empilha o estado s e avanccedila da entrada resultando na configuraccedilatildeo (s0s1 sm ai+1an $)

55 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2 Se ACTION[Sm ai]=reduce Ararrβ entatildeo o analisador sintaacutetico executa um movimento de reduzir (reduce move) resultando na configuraccedilatildeo (s0s1 sm-rs aiai+1an $)

onde r eacute o comprimento de β e s = GOTO[sm-r A]

Aqui o analisador sintaacutetico incialmente desempilhou os r siacutembolos de estado da pilha expondo o estado sm-r

O analisador sintaacutetico entatildeo empilhou s a entrada para GOTO[sm-r A] na pilha O siacutembolo corrente da entrada natildeo eacute alterado em um movimento de reduzir

56 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2

Para os LR que construiremos Xm-r+1Xm a sequencia de siacutembolos da gramaacutetica correspondendo aos estados retirados da pilha sempre iratildeo casar com β o lado direito da produccedilatildeo sendo reduzida

A saiacuteda de um analisador LR eacute gerada apoacutes um movimento de reduzir executando a accedilatildeo semacircntica associada agrave produccedilatildeo que estaacute sendo reduzida

No momento vamos considerar que a saiacuteda consiste soacute na impressatildeo da produccedilatildeo de reduccedilatildeo

57 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

3 Se ACTION[sm ai] = accept a anaacutelise estaacute concluiacuteda

4 Se ACTION[sm ai] = error o analisador sintaacutetico descobriu um erro e ativa uma rotina para recuperaccedilatildeo de erro

Todos os analisadores sintaacuteticos LR se comportam dessa maneira

A uacutenica diferenccedila entre eles diz respeito a informaccedilatildeo contida nos campos ACTION e GOTO da tabela de anaacutelise

O algoritmo de anaacutelise LR eacute resumido nos proacuteximos slides

58 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

Entrada Uma cadeia de entrada w e uma tabela de anaacutelise com funccedilotildees ACTION e GOTO para uma gramaacutetica G

Saiacuteda Se w estaacute em L(G) os passos os passos de uma reduccedilatildeo de uma anaacutelise ascendente para w

Caso contraacuterio uma indicaccedilatildeo de erro

Meacutetodo Inicialmente o analisador sintaacutetico possui w$ no buffer de entrada e s0 em sua pilha onde s0 representa o estado inicial

O analisador sintaacutetico entatildeo executa o algoritmo

59 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

[PSEUDO] seja a o primeiro siacutembolo de w$ while (1) Seja s o estado no topo da pilha if (ACTION[s a] = shift t) empilha t na pilha seja a o proacuteximo siacutembolo da entrada else if (ACTION[s a] = reduce Ararr β) desempilha siacutembolos |β| da pilha faccedila o estado t agora ser o topo da pilha empilhe GOTO[t A] na pilha imprima a produccedilatildeo Ararr β else if (ACTION[s a] = accept) pare a anaacutelise terminou

else chame uma rotina de recuperaccedilatildeo de erros

60 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR ndash Exemplo

A tabela do proacuteximo slide monstra as funccedilotildees ACTION e GOTO de uma tabela de anaacutelise LR para a gramaacutetica de expressatildeo estudada nesta aula e repetida aqui com produccedilotildees numeradas

Os coacutedigos para as accedilotildees satildeo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

(1) E rarr E + T

(2) E rarr T

(3) T rarr T F

(4) T rarr F

(5) F rarr ( E )

(6) F rarr id

1 Si significa avanccedila na entrada e empilha o estado i na pilha

2 Rj significa reduce segundo a produccedilatildeo de nuacutemero j

3 Acc significa accept

4 Entrada em branco significa error

61 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Estado ACTION

id + ( ) $

0 s5 s4

1 S6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4

5 r6 r6 r6 r6

6 s5 s4

7 s5 s4

8 r6 s11

9 s1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

GOTO

E T F

1 2 3

8 2 3

9 3

10

O valor de GOTO(s a) para o

terminal a estaacute em ACTION da

tabela de anaacutelise conectado agrave

accedilatildeo de transferecircncia sob a

entrada a e o estado s

O GOTO fornece o GOTO[s a]

para os natildeo-terminais A

Ok

Mas como eu consigo os dados

desta tabela

62 Geovane Griesang

A sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

FOLLOW(E) = FOLLOW(Ersquo) = ) $

FOLLOW(T) = FOLLOW(Trsquo) = + ) $

FOLLOW(F) = + ) $

63 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Construindo tabelas de anaacutelise SLR

Esse meacutetodo eacute o mais simples dos LRs Vamos nos referir a tabela de anaacutelise construiacuteda por este meacutetodo como uma tabela SLR e o analisador LR usando uma tabela SLR como um analisador sintaacutetico SLR

O meacutetodo SLR comeccedila com os itens LR(0) e autocircmatos LR(0) ou seja dada uma gramaacutetica G estendemos G para produzir Grsquo com o novo siacutembolo inicial Srsquo A partir de Grsquo construiacutemos C a coleccedilatildeo canocircnica de conj de itens para Grsquo junto com a funccedilatildeo GOTO

Para construir as entradas ACTION e GOTO da tabela de anaacutelise usando o algoritmo a seguir eacute preciso que conheccedilamos FOLLOW(A) para cada natildeo-terminal A de uma gramaacutetica

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 12: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

12 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Itens e o autocircmato LR

Como o analisador sintaacutetico shift-reduce sabe quando transferir p a pilha e quando reduzir

Ex Dado o conteuacutedo de pilha $T e o proacuteximo siacutembolo da entrada como o analisador sabe que T no topo da pilha natildeo eacute um handle de modo que a accedilatildeo apropriada seja transferir o ldquordquo para a pilha e natildeo reduzir T para E

Entrada id id E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

id id

F rarr id F id

T rarr F T id

E rarr T E id ou F rarr id T F

13 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Itens e o autocircmato LR

Um analisador LR decide sobre as accedilotildees shift-reduce mantendo estados para acompanhar onde se encontra a anaacutelise

Os estados representam conjuntos de ldquoitensrdquo

Um item LR(0) de uma gramaacutetica G eacute a produccedilatildeo de G com um ponto em alguma posiccedilatildeo do seu lado direito

A produccedilatildeo A rarr XYZ gera os quatro itens A rarr XYZ

A rarr XYZ

A rarr XYZ

A rarr XYZ A produccedilatildeo A rarr 120576 gera apenas um item A rarr

14 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR - Itens e o autocircmato LR Representaccedilatildeo dos conjuntos de itens

Um gerador de analisadores sintaacuteticos que produz um analisador ascendente

deve representar os itens e conjunto de itens convenientemente

Um item pode ser representado por um par de inteiros onde o primeiro

representa o nuacutemero de uma das produccedilotildees da gramaacutetica subjacente e o

segundo indica a posiccedilatildeo do ponto

Conjuntos de itens podem ser representados por uma lista desses pares

A rarr XYZ

A rarr XYZ

A rarr XYZ

A rarr XYZ

15 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR - Itens e o autocircmato LR Representaccedilatildeo dos conjuntos de itens

O conjunto de itens necessaacuterios frequentemente incluem itens de

ldquofechamentordquo (ldquoclosurerdquo) onde o ponto estaacute no iniacutecio do corpo

Esses itens sempre podem ser reconstruiacutedos a partir dos outros itens no

conjunto e natildeo temos de incluiacute-los na lista

A rarr XYZ

A rarr XYZ

A rarr XYZ

A rarr XYZ

16 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Itens e o autocircmato LR

Um item indica quanto de uma produccedilatildeo jaacute foi visto em determinado ponto no processo de reconhecimento sintaacutetico Ex

O item ArarrXYZ indica o iniacutecio da busca de uma cadeia derivaacutevel de XYZ na entrada

O item A rarr XYZ indica que no ponto atual onde se encontra a anaacutelise uma cadeia X jaacute foi encontrada e que esperamos em seguida ver uma cadeia derivaacutevel de YZ

O item A rarr XYZ indica o fim da busca ou seja jaacute derivamos o lado direito XYZ de A e que pode ser o momento de reduzir XYZ para A

A rarr XYZ

A rarr XYZ

A rarr XYZ

A rarr XYZ

17 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Itens e o autocircmato LR

Uma coleccedilatildeo de conj de itens LR(0) chamada coleccedilatildeo LR(0) canocircnica oferece a base para construccedilatildeo de um autocircmato finito determinista que eacute usado para dirigir as decisotildees durante a anaacutelise

Esse autocircmato eacute chamado de autocircmato LR(0)

Em particular cada estado do autocircmato LR(0) representa um conjunto de itens na coleccedilatildeo LR(0) canocircnica

18 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Exemplo Para construir a coleccedilatildeo LR(0) canocircnica para uma gramaacutetica definimos uma gramaacutetica estendida e duas funccedilotildees

funccedilatildeo de fechamento (function CLOSURE)

funccedilatildeo de transiccedilatildeo (function GOTO)

Se G eacute uma gramaacutetica com siacutembolo inicial S entatildeo Grsquo eacute uma gramaacutetica estendida para G com o novo siacutembolo inicial Srsquo e a produccedilatildeo Srsquo rarr S

O objetivo dessa nova produccedilatildeo eacute simplificar a identificaccedilatildeo de quando o reconhecedor sintaacutetico deve parar e anunciar a aceitaccedilatildeo da cadeia de entrada

Ou seja a aceitaccedilatildeo ocorre se e somente se o analisador estiver para reduzir por Srsquo rarr S

19 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Se I eacute um conj de itens para a gramaacutetica G entatildeo CLOSURE(I) eacute o conj de itens construiacutedos a partir de I pelas duas regras

1 Inicialmente acrescente todo item de I no CLOSURE(I)

2 Se A rarr αBβ estaacute em CLOSEURE(I) e B rarr γ eacute uma produccedilatildeo entatildeo adicione o item B rarr γ em CLOSURE(I) se ele ainda natildeo estaacute laacute

Ix

A rarr αBβ

B rarr γ

20 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Intuitivamente A rarr αBβ em CLOSURE(I) indica que em algum ponto no processo de reconhecimento os itens correspondentes as produccedilotildees-B devem ser acrescentados para dirigir a busca por B

A subcadeia derivaacutevel de Bβ na entrada teraacute um prefixo derivaacutevel de B aplicando umas das produccedilotildees-B

Portanto incluiacutemos itens para todas as produccedilotildees-B ou seja se B rarr γ eacute uma produccedilatildeo tambeacutem incluiacutemos B rarr γ em CLOSURE(I) este processo eacute conhecido como fechamento de estado

Ix

A rarr αBβ

B rarr γ

21 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

P ver como o fechamento de um estado eacute computado Ersquo rarr E eacute colocado em CLOSURE(I) pela regra (1)

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Acrescente todo item de I no CLOSURE(I)

I0

Ersquo rarr E

22 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Como existe um natildeo-terminal E agrave direita de um ponto acrescentamos as produccedilotildees-E com pontos mais agrave esquerda do lado direito dos itens ex

E rarr E + T e E rarr T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

23 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Agora existe um natildeo-terminal T imediatamente agrave direita de um ponto no segundo item incluiacutedo (E rarr T) de modo que acrescentamos as produccedilotildees-T T rarr T F e T rarr F

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

24 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Em seguida o natildeo-terminal F agrave direita de um ponto nos forccedila a incluir os itens Frarr (E) e F rarr id mas nenhum outro item precisa ser acrescentado

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr (E)

F rarr id

25 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Um modo conveniente de implementar a funccedilatildeo de fechamento (closure) eacute manter um arranjo booleano added indexado pelos natildeo-terminais de G de modo que added[B] seja definido como verdadeiro (true) se e quando incluirmos o item B rarr γ para cada produccedilatildeo-B B rarr γ

SetOfItems CLOSURE(I)

J=I

repeat

for (cada item A rarr αBβ em J)

for (cada produccedilatildeo B rarr γ de G)

if (B rarr γ natildeo estaacute em J)

Adicione B rarr γ em J

until mais nenhum item seja adicionado a J em um passo do loop

return J

Ix

A rarr αBβ

B rarr γ

26 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Observe que se uma produccedilatildeo-B for incluiacuteda no fechamento de I com o ponto mais agrave esquerda do seu lado direito entatildeo todas as produccedilotildees-B seratildeo igualmente incluiacutedas no fechamento Ex A rarr αBβ

Uma lista de natildeo-terminais B cujas produccedilotildees foram incluiacutedas dessa forma eacute suficiente Dividimos todos os conjuntos de itens de interesse em duas classes

1 Itens de base (kernel) o item inicial Srsquo rarr S e todos itens cujos pontos natildeo estatildeo mais agrave esquerda em seus lados direitos

2 Itens que natildeo satildeo de base todos os itens com seus pontos mais agrave esquerda em seus lados direitos exceto Srsquo rarr S Ex B rarr γ

Ix

A rarr αBβ

B rarr γ

27 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Aleacutem do mais cada conjunto de itens de interesse eacute formado a partir do fechamento de um conjunto de itens de base

Os itens adicionados no fechamento nunca podem ser itens de base naturalmente

Assim podemos representar os conjuntos de itens em que realmente estamos interessados com pouca memoacuteria se desprezarmos todos que natildeo satildeo itens de base sabendo que esses podem ser gerados novamente no processo de fechamento Ex B rarr γ exceto Srsquo rarr S

Ix

A rarr αBβ

B rarr γ

28 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

A segunda funccedilatildeo usada na construccedilatildeo da coleccedilatildeo canocircnica LR(0) eacute a funccedilatildeo de transiccedilatildeo GOTO(I X) onde I eacute o conjunto de itens de base e X eacute um siacutembolo da gramaacutetica

GOTO(I X) eacute definido como fechamento do conjunto de todos os itens [ArarrαXβ] tais que

[A rarr αXβ] estaacute em I

A funccedilatildeo de transiccedilatildeo GOTO eacute utilizada para definir as transaccedilotildees no autocircmato LR(0) para uma gramaacutetica

I1

Ersquo rarr E

E rarr E + T

I0

Ersquo rarr E

E rarr E + T

E

29 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Estados do autocircmato correspondem aos conjuntos de itens e GOTO(I +) especifica a transaccedilatildeo do estado I para um novo estado I sob a entrada X

Se I representa o conjunto com dois itens [Ersquo rarr E][E rarr E+T] entatildeo GOTO(I +) conteacutem os itens

Calculamos GOTO(I +) examinando os itens em I com o + imediatamente agrave direita do ponto

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

A rarr αXβ

A rarr αXβ

I1

Ersquo rarr E

E rarr E + T +

I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

30 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Calculamos GOTO(I +) examinando os itens em I com o + imediatamente agrave direita do ponto

O item Ersquo rarr E natildeo eacute desse tipo mas Ersquo rarr E + T sim

Movemos o ponto para imediatamente agrave direita de + e obtemos ErarrE + T

e entatildeo calculamos o fechamento desse conjunto unitaacuterio

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Itens em I

[Ersquo rarr E]

[E rarr E+T]

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I1

Ersquo rarr E

E rarr E + T +

31 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Agora estamos prontos para construir C a coleccedilatildeo canocircnica de conjuntos

de itens LR(0) para uma gramaacutetica estendida Grsquo

void Itens(Grsquo)

C = CLOSURE([Srsquo rarr S])

repeat

for (cada conjunto de itens I em C)

for (cada siacutembolo da gramaacutetica X)

if (GOTO(I X) natildeo eacute vazio e natildeo estaacute em C)

Adicione GOTO(I X) em C

until nenhum novo conjunto de itens seja adicionado em C em uma rodada

32 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

A ideia central por traacutes da anaacutelise ldquoLR Simplesrdquo ou SLR eacute a construccedilatildeo do autocircmato LR(0) a partir da gramaacutetica dada

Os estados desses autocircmatos satildeo os conjuntos de itens da coleccedilatildeo LR canocircnica e as transiccedilotildees satildeo dadas pela funccedilatildeo de transiccedilatildeo GOTO

O estado inicial do autocircmato LR eacute dado por CLOSURE([Srsquo rarr S]) onde Srsquo eacute o siacutembolo inicial da gramaacutetica estendida

Todos os estados satildeo estados de aceitaccedilatildeo Nos referimos ao ldquoestado jrdquo como o estado correspondente ao conjunto de itens Ij

33 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E

Aceitar $

I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

34 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Como os autocircmatos LR(0) podem ajudar-nos a decidir por uma das accedilotildees shift-reduce (veja as decisotildees entre shift-reduce a seguir)

Suponha que a cadeia γ dos siacutembolos da gramaacutetica leve o autocircmato LR(0) do estado inicial 0 para algum estado j

Desta forma avance sobre o proacuteximo siacutembolo a se o estado j possuir uma transaccedilatildeo sob a

Caso contraacuterio escolha reduzir

Os itens no estado j nos diratildeo qual produccedilatildeo usar

35 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

O algoritmo LR abaixo utiliza sua pilha para acompanhar os estados e tambeacutem os siacutembolos da gramaacutetica

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Na verdade

O siacutembolo da gramaacutetica pode ser

recuperado a parir do estado de

modo que a pilha possua estados

ao inveacutes de siacutembolos

36 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Usamos uma pilha

p conter os estados

Os siacutembolos que correspondem aos estados estatildeo na coluna ldquoSiacutembolosrdquo

A pilha da linha (1) tecircm o estado inicial 0 do autocircmato

37 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Portanto fazemos a transferecircncia

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

O siacutembolo da linha 1 eacute o marcador de fundo da pilha $

O proacuteximo siacutembolo de entrada eacute id e o estado 0 tem uma transiccedilatildeo sob id p o estado 5

38 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

A partir do item [F rarr id ] no estado 5 efetuamos uma reduccedilatildeo segundo a produccedilatildeo F rarr id

Na linha 2 o estado 5 eacute empilhado (siacutembolo id)

I5

F rarr id

Natildeo haacute transiccedilatildeo a partir do estado 5 sob a entrada por isso reduzimos

39 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o lado direito da produccedilatildeo da linha (2) eacute id correspondendo ao estado 5 e seu lado direito eacute o F

Com os estados ao desempilhar o estado 5 correspondendo ao siacutembolo id o estado 0 passa a ser o topo

0 F $

40 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id I3

T rarr F

F

Procuramos uma transiccedilatildeo sob F o lado esquerdo da produccedilatildeo

0 F $

O estado 0 possui uma transiccedilatildeo em F p o estado 3 onde empilhamos o estado 3 com o siacutembolo F Ver linha (3)

3

41 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I3

T rarr F

Natildeo haacute transiccedilatildeo a partir do estado 3 sob a entrada por isso reduzimos

A partir do item [T rarr F ] no estado 3 efetuamos uma reduccedilatildeo segundo a produccedilatildeo T rarr F

3

0

T $

42 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

I7

T rarr T F

F rarr ( E )

F rarr id

id

Como outro exemplo considere a linha (5) com o estado 7 referente ao siacutembolo no topo da pilha

Esse estado 7 possui uma transaccedilatildeo para o estado 5 sob a entrada id de modo que empilhamos o estado 5

43 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o estado 5 natildeo possui transiccedilotildees de modo que reduzimos segundo F rarr id

quando removemos da pilha o estado 5 correspondente ao lado direito id o estado 7 passa a ser o topo da pilha

44 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Como o estado 7 possui uma transaccedilatildeo sob F para o estado 10 empilhamos o estado 10 (siacutembolo F)

I7

T rarr T F

F rarr ( E )

F rarr id

I10

T rarr T F

F

45 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O algoritmo eacute o mesmo para todos

os analisadores sintaacuteticos LR

Soacute a tabela de anaacutelise eacute diferente

de um analisador para o outro

O algoritmo lecirc caracteres de um

buffer de entrada um de cada vez

46 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O analisador sintaacutetico shift-reduce

transfere um siacutembolo para pilha jaacute

o analisador sintaacutetico LR transfere

um estado

Cada estado resume a informaccedilatildeo

contida na pilha abaixo dele

47 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

A pilha conteacutem uma sequencia de

estados s0s1 sm onde sm estaacute

no topo

No meacutetodo SLR a pilha conteacutem

estados do autocircmato LR(0)

Por construccedilatildeo a cada estado eacute

associado 1 siacutembolo da gramaacutetica

48 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Lembrem-se de que os estados

correspondem a conj de itens e

que haacute uma transiccedilatildeo do estado i

para o estado j se GOTO(Ii X) = Ij

Todas as transiccedilotildees para o estado

j devem ser para o mesmo siacutembolo

da gramaacutetica X

49 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

Sm

Sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Desta forma cada estado exceto

o estado inicial 0 possui um uacutenico

siacutembolo da gramaacutetica associado a

ele

50 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

A tabela LR consiste em duas partes ACTION uma funccedilatildeo de accedilatildeo de anaacutelise e GOTO uma funccedilatildeo de transiccedilatildeo

1 A funccedilatildeo ACTION recebe como argumentos um estado i e um estado a (ou $) O valor de ACTION(i a) pode ter um dos quatro formatos

a) Shift j onde j eacute um estado

A accedilatildeo tomada pelo analisador sintaacutetico efetivamente transfere a entrada a para a pilha mas usa o estado j para representar a

51 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

b) Reduce Ararr β A accedilatildeo do analisador efetivamente reduz β no topo da pilha para A o lado esquerdo da produccedilatildeo

c) Accept O analisador aceita a entrada e termina a anaacutelise

d) Error O analisador descobre um erro em sua entrada passa o controle p o recuperador de erro que toma alguma accedilatildeo corretiva

2 Estendemos a funccedilatildeo GOTO definida sobre um conjunto de itens para os estados se GOTO(Ii A) = Ij entatildeo GOTO tambeacutem mapeia um estado i e um natildeo-terminal A para o estado j

52 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

Para descrever o comportamento de uma analisador LR eacute recomendaacutevel ter uma notaccedilatildeo representado o estado completo do analisador sua pilha e a entrada restante

Uma configuraccedilatildeo p um analisador LR eacute um par (s0s1sm aiai+1an $) O primeiro componente eacute o conteuacutedo da pilha com o topo agrave direita e o segundo componente representa a entrada restante

Essa configuraccedilatildeo representa a seguinte forma sentencial agrave direita (X0X1Xmaiai+1an) Assim como faria um analisador shift-reduce

53 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

A uacutenica diferenccedila eacute que em inveacutes de siacutembolos da gramaacutetica a pilha conteacutem estados a partir dos quais os siacutembolos da gramaacutetica podem ser recuperados

Ou seja Xi eacute o siacutembolo da gramaacutetica representado pelo estado si

Observe que s0 o estado inicial do analisador sintaacutetico natildeo representa um siacutembolo da gramaacutetica e serve como marcador de fundo da pilha aleacutem de desempenhar um papel importante na anaacutelise

54 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

O proacuteximo movimento do analisador a partir da configuraccedilatildeo dada eacute determinado pela leitura de ai o siacutembolo de entrada corrente e sm o estado do topo da pilha e entatildeo consultando a entrada ACTION[sm ai] na tabela de accedilatildeo de anaacutelise

As configuraccedilotildees restantes apoacutes cada um dos quatro tipos de movimentaccedilatildeo satildeo as seguintes

1 Se ACTION[Sm ai] = shift s o analisador sintaacutetico executa um movimento de transferecircncia (shift move) ele empilha o estado s e avanccedila da entrada resultando na configuraccedilatildeo (s0s1 sm ai+1an $)

55 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2 Se ACTION[Sm ai]=reduce Ararrβ entatildeo o analisador sintaacutetico executa um movimento de reduzir (reduce move) resultando na configuraccedilatildeo (s0s1 sm-rs aiai+1an $)

onde r eacute o comprimento de β e s = GOTO[sm-r A]

Aqui o analisador sintaacutetico incialmente desempilhou os r siacutembolos de estado da pilha expondo o estado sm-r

O analisador sintaacutetico entatildeo empilhou s a entrada para GOTO[sm-r A] na pilha O siacutembolo corrente da entrada natildeo eacute alterado em um movimento de reduzir

56 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2

Para os LR que construiremos Xm-r+1Xm a sequencia de siacutembolos da gramaacutetica correspondendo aos estados retirados da pilha sempre iratildeo casar com β o lado direito da produccedilatildeo sendo reduzida

A saiacuteda de um analisador LR eacute gerada apoacutes um movimento de reduzir executando a accedilatildeo semacircntica associada agrave produccedilatildeo que estaacute sendo reduzida

No momento vamos considerar que a saiacuteda consiste soacute na impressatildeo da produccedilatildeo de reduccedilatildeo

57 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

3 Se ACTION[sm ai] = accept a anaacutelise estaacute concluiacuteda

4 Se ACTION[sm ai] = error o analisador sintaacutetico descobriu um erro e ativa uma rotina para recuperaccedilatildeo de erro

Todos os analisadores sintaacuteticos LR se comportam dessa maneira

A uacutenica diferenccedila entre eles diz respeito a informaccedilatildeo contida nos campos ACTION e GOTO da tabela de anaacutelise

O algoritmo de anaacutelise LR eacute resumido nos proacuteximos slides

58 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

Entrada Uma cadeia de entrada w e uma tabela de anaacutelise com funccedilotildees ACTION e GOTO para uma gramaacutetica G

Saiacuteda Se w estaacute em L(G) os passos os passos de uma reduccedilatildeo de uma anaacutelise ascendente para w

Caso contraacuterio uma indicaccedilatildeo de erro

Meacutetodo Inicialmente o analisador sintaacutetico possui w$ no buffer de entrada e s0 em sua pilha onde s0 representa o estado inicial

O analisador sintaacutetico entatildeo executa o algoritmo

59 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

[PSEUDO] seja a o primeiro siacutembolo de w$ while (1) Seja s o estado no topo da pilha if (ACTION[s a] = shift t) empilha t na pilha seja a o proacuteximo siacutembolo da entrada else if (ACTION[s a] = reduce Ararr β) desempilha siacutembolos |β| da pilha faccedila o estado t agora ser o topo da pilha empilhe GOTO[t A] na pilha imprima a produccedilatildeo Ararr β else if (ACTION[s a] = accept) pare a anaacutelise terminou

else chame uma rotina de recuperaccedilatildeo de erros

60 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR ndash Exemplo

A tabela do proacuteximo slide monstra as funccedilotildees ACTION e GOTO de uma tabela de anaacutelise LR para a gramaacutetica de expressatildeo estudada nesta aula e repetida aqui com produccedilotildees numeradas

Os coacutedigos para as accedilotildees satildeo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

(1) E rarr E + T

(2) E rarr T

(3) T rarr T F

(4) T rarr F

(5) F rarr ( E )

(6) F rarr id

1 Si significa avanccedila na entrada e empilha o estado i na pilha

2 Rj significa reduce segundo a produccedilatildeo de nuacutemero j

3 Acc significa accept

4 Entrada em branco significa error

61 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Estado ACTION

id + ( ) $

0 s5 s4

1 S6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4

5 r6 r6 r6 r6

6 s5 s4

7 s5 s4

8 r6 s11

9 s1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

GOTO

E T F

1 2 3

8 2 3

9 3

10

O valor de GOTO(s a) para o

terminal a estaacute em ACTION da

tabela de anaacutelise conectado agrave

accedilatildeo de transferecircncia sob a

entrada a e o estado s

O GOTO fornece o GOTO[s a]

para os natildeo-terminais A

Ok

Mas como eu consigo os dados

desta tabela

62 Geovane Griesang

A sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

FOLLOW(E) = FOLLOW(Ersquo) = ) $

FOLLOW(T) = FOLLOW(Trsquo) = + ) $

FOLLOW(F) = + ) $

63 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Construindo tabelas de anaacutelise SLR

Esse meacutetodo eacute o mais simples dos LRs Vamos nos referir a tabela de anaacutelise construiacuteda por este meacutetodo como uma tabela SLR e o analisador LR usando uma tabela SLR como um analisador sintaacutetico SLR

O meacutetodo SLR comeccedila com os itens LR(0) e autocircmatos LR(0) ou seja dada uma gramaacutetica G estendemos G para produzir Grsquo com o novo siacutembolo inicial Srsquo A partir de Grsquo construiacutemos C a coleccedilatildeo canocircnica de conj de itens para Grsquo junto com a funccedilatildeo GOTO

Para construir as entradas ACTION e GOTO da tabela de anaacutelise usando o algoritmo a seguir eacute preciso que conheccedilamos FOLLOW(A) para cada natildeo-terminal A de uma gramaacutetica

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 13: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

13 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Itens e o autocircmato LR

Um analisador LR decide sobre as accedilotildees shift-reduce mantendo estados para acompanhar onde se encontra a anaacutelise

Os estados representam conjuntos de ldquoitensrdquo

Um item LR(0) de uma gramaacutetica G eacute a produccedilatildeo de G com um ponto em alguma posiccedilatildeo do seu lado direito

A produccedilatildeo A rarr XYZ gera os quatro itens A rarr XYZ

A rarr XYZ

A rarr XYZ

A rarr XYZ A produccedilatildeo A rarr 120576 gera apenas um item A rarr

14 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR - Itens e o autocircmato LR Representaccedilatildeo dos conjuntos de itens

Um gerador de analisadores sintaacuteticos que produz um analisador ascendente

deve representar os itens e conjunto de itens convenientemente

Um item pode ser representado por um par de inteiros onde o primeiro

representa o nuacutemero de uma das produccedilotildees da gramaacutetica subjacente e o

segundo indica a posiccedilatildeo do ponto

Conjuntos de itens podem ser representados por uma lista desses pares

A rarr XYZ

A rarr XYZ

A rarr XYZ

A rarr XYZ

15 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR - Itens e o autocircmato LR Representaccedilatildeo dos conjuntos de itens

O conjunto de itens necessaacuterios frequentemente incluem itens de

ldquofechamentordquo (ldquoclosurerdquo) onde o ponto estaacute no iniacutecio do corpo

Esses itens sempre podem ser reconstruiacutedos a partir dos outros itens no

conjunto e natildeo temos de incluiacute-los na lista

A rarr XYZ

A rarr XYZ

A rarr XYZ

A rarr XYZ

16 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Itens e o autocircmato LR

Um item indica quanto de uma produccedilatildeo jaacute foi visto em determinado ponto no processo de reconhecimento sintaacutetico Ex

O item ArarrXYZ indica o iniacutecio da busca de uma cadeia derivaacutevel de XYZ na entrada

O item A rarr XYZ indica que no ponto atual onde se encontra a anaacutelise uma cadeia X jaacute foi encontrada e que esperamos em seguida ver uma cadeia derivaacutevel de YZ

O item A rarr XYZ indica o fim da busca ou seja jaacute derivamos o lado direito XYZ de A e que pode ser o momento de reduzir XYZ para A

A rarr XYZ

A rarr XYZ

A rarr XYZ

A rarr XYZ

17 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Itens e o autocircmato LR

Uma coleccedilatildeo de conj de itens LR(0) chamada coleccedilatildeo LR(0) canocircnica oferece a base para construccedilatildeo de um autocircmato finito determinista que eacute usado para dirigir as decisotildees durante a anaacutelise

Esse autocircmato eacute chamado de autocircmato LR(0)

Em particular cada estado do autocircmato LR(0) representa um conjunto de itens na coleccedilatildeo LR(0) canocircnica

18 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Exemplo Para construir a coleccedilatildeo LR(0) canocircnica para uma gramaacutetica definimos uma gramaacutetica estendida e duas funccedilotildees

funccedilatildeo de fechamento (function CLOSURE)

funccedilatildeo de transiccedilatildeo (function GOTO)

Se G eacute uma gramaacutetica com siacutembolo inicial S entatildeo Grsquo eacute uma gramaacutetica estendida para G com o novo siacutembolo inicial Srsquo e a produccedilatildeo Srsquo rarr S

O objetivo dessa nova produccedilatildeo eacute simplificar a identificaccedilatildeo de quando o reconhecedor sintaacutetico deve parar e anunciar a aceitaccedilatildeo da cadeia de entrada

Ou seja a aceitaccedilatildeo ocorre se e somente se o analisador estiver para reduzir por Srsquo rarr S

19 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Se I eacute um conj de itens para a gramaacutetica G entatildeo CLOSURE(I) eacute o conj de itens construiacutedos a partir de I pelas duas regras

1 Inicialmente acrescente todo item de I no CLOSURE(I)

2 Se A rarr αBβ estaacute em CLOSEURE(I) e B rarr γ eacute uma produccedilatildeo entatildeo adicione o item B rarr γ em CLOSURE(I) se ele ainda natildeo estaacute laacute

Ix

A rarr αBβ

B rarr γ

20 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Intuitivamente A rarr αBβ em CLOSURE(I) indica que em algum ponto no processo de reconhecimento os itens correspondentes as produccedilotildees-B devem ser acrescentados para dirigir a busca por B

A subcadeia derivaacutevel de Bβ na entrada teraacute um prefixo derivaacutevel de B aplicando umas das produccedilotildees-B

Portanto incluiacutemos itens para todas as produccedilotildees-B ou seja se B rarr γ eacute uma produccedilatildeo tambeacutem incluiacutemos B rarr γ em CLOSURE(I) este processo eacute conhecido como fechamento de estado

Ix

A rarr αBβ

B rarr γ

21 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

P ver como o fechamento de um estado eacute computado Ersquo rarr E eacute colocado em CLOSURE(I) pela regra (1)

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Acrescente todo item de I no CLOSURE(I)

I0

Ersquo rarr E

22 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Como existe um natildeo-terminal E agrave direita de um ponto acrescentamos as produccedilotildees-E com pontos mais agrave esquerda do lado direito dos itens ex

E rarr E + T e E rarr T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

23 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Agora existe um natildeo-terminal T imediatamente agrave direita de um ponto no segundo item incluiacutedo (E rarr T) de modo que acrescentamos as produccedilotildees-T T rarr T F e T rarr F

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

24 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Em seguida o natildeo-terminal F agrave direita de um ponto nos forccedila a incluir os itens Frarr (E) e F rarr id mas nenhum outro item precisa ser acrescentado

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr (E)

F rarr id

25 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Um modo conveniente de implementar a funccedilatildeo de fechamento (closure) eacute manter um arranjo booleano added indexado pelos natildeo-terminais de G de modo que added[B] seja definido como verdadeiro (true) se e quando incluirmos o item B rarr γ para cada produccedilatildeo-B B rarr γ

SetOfItems CLOSURE(I)

J=I

repeat

for (cada item A rarr αBβ em J)

for (cada produccedilatildeo B rarr γ de G)

if (B rarr γ natildeo estaacute em J)

Adicione B rarr γ em J

until mais nenhum item seja adicionado a J em um passo do loop

return J

Ix

A rarr αBβ

B rarr γ

26 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Observe que se uma produccedilatildeo-B for incluiacuteda no fechamento de I com o ponto mais agrave esquerda do seu lado direito entatildeo todas as produccedilotildees-B seratildeo igualmente incluiacutedas no fechamento Ex A rarr αBβ

Uma lista de natildeo-terminais B cujas produccedilotildees foram incluiacutedas dessa forma eacute suficiente Dividimos todos os conjuntos de itens de interesse em duas classes

1 Itens de base (kernel) o item inicial Srsquo rarr S e todos itens cujos pontos natildeo estatildeo mais agrave esquerda em seus lados direitos

2 Itens que natildeo satildeo de base todos os itens com seus pontos mais agrave esquerda em seus lados direitos exceto Srsquo rarr S Ex B rarr γ

Ix

A rarr αBβ

B rarr γ

27 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Aleacutem do mais cada conjunto de itens de interesse eacute formado a partir do fechamento de um conjunto de itens de base

Os itens adicionados no fechamento nunca podem ser itens de base naturalmente

Assim podemos representar os conjuntos de itens em que realmente estamos interessados com pouca memoacuteria se desprezarmos todos que natildeo satildeo itens de base sabendo que esses podem ser gerados novamente no processo de fechamento Ex B rarr γ exceto Srsquo rarr S

Ix

A rarr αBβ

B rarr γ

28 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

A segunda funccedilatildeo usada na construccedilatildeo da coleccedilatildeo canocircnica LR(0) eacute a funccedilatildeo de transiccedilatildeo GOTO(I X) onde I eacute o conjunto de itens de base e X eacute um siacutembolo da gramaacutetica

GOTO(I X) eacute definido como fechamento do conjunto de todos os itens [ArarrαXβ] tais que

[A rarr αXβ] estaacute em I

A funccedilatildeo de transiccedilatildeo GOTO eacute utilizada para definir as transaccedilotildees no autocircmato LR(0) para uma gramaacutetica

I1

Ersquo rarr E

E rarr E + T

I0

Ersquo rarr E

E rarr E + T

E

29 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Estados do autocircmato correspondem aos conjuntos de itens e GOTO(I +) especifica a transaccedilatildeo do estado I para um novo estado I sob a entrada X

Se I representa o conjunto com dois itens [Ersquo rarr E][E rarr E+T] entatildeo GOTO(I +) conteacutem os itens

Calculamos GOTO(I +) examinando os itens em I com o + imediatamente agrave direita do ponto

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

A rarr αXβ

A rarr αXβ

I1

Ersquo rarr E

E rarr E + T +

I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

30 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Calculamos GOTO(I +) examinando os itens em I com o + imediatamente agrave direita do ponto

O item Ersquo rarr E natildeo eacute desse tipo mas Ersquo rarr E + T sim

Movemos o ponto para imediatamente agrave direita de + e obtemos ErarrE + T

e entatildeo calculamos o fechamento desse conjunto unitaacuterio

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Itens em I

[Ersquo rarr E]

[E rarr E+T]

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I1

Ersquo rarr E

E rarr E + T +

31 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Agora estamos prontos para construir C a coleccedilatildeo canocircnica de conjuntos

de itens LR(0) para uma gramaacutetica estendida Grsquo

void Itens(Grsquo)

C = CLOSURE([Srsquo rarr S])

repeat

for (cada conjunto de itens I em C)

for (cada siacutembolo da gramaacutetica X)

if (GOTO(I X) natildeo eacute vazio e natildeo estaacute em C)

Adicione GOTO(I X) em C

until nenhum novo conjunto de itens seja adicionado em C em uma rodada

32 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

A ideia central por traacutes da anaacutelise ldquoLR Simplesrdquo ou SLR eacute a construccedilatildeo do autocircmato LR(0) a partir da gramaacutetica dada

Os estados desses autocircmatos satildeo os conjuntos de itens da coleccedilatildeo LR canocircnica e as transiccedilotildees satildeo dadas pela funccedilatildeo de transiccedilatildeo GOTO

O estado inicial do autocircmato LR eacute dado por CLOSURE([Srsquo rarr S]) onde Srsquo eacute o siacutembolo inicial da gramaacutetica estendida

Todos os estados satildeo estados de aceitaccedilatildeo Nos referimos ao ldquoestado jrdquo como o estado correspondente ao conjunto de itens Ij

33 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E

Aceitar $

I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

34 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Como os autocircmatos LR(0) podem ajudar-nos a decidir por uma das accedilotildees shift-reduce (veja as decisotildees entre shift-reduce a seguir)

Suponha que a cadeia γ dos siacutembolos da gramaacutetica leve o autocircmato LR(0) do estado inicial 0 para algum estado j

Desta forma avance sobre o proacuteximo siacutembolo a se o estado j possuir uma transaccedilatildeo sob a

Caso contraacuterio escolha reduzir

Os itens no estado j nos diratildeo qual produccedilatildeo usar

35 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

O algoritmo LR abaixo utiliza sua pilha para acompanhar os estados e tambeacutem os siacutembolos da gramaacutetica

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Na verdade

O siacutembolo da gramaacutetica pode ser

recuperado a parir do estado de

modo que a pilha possua estados

ao inveacutes de siacutembolos

36 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Usamos uma pilha

p conter os estados

Os siacutembolos que correspondem aos estados estatildeo na coluna ldquoSiacutembolosrdquo

A pilha da linha (1) tecircm o estado inicial 0 do autocircmato

37 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Portanto fazemos a transferecircncia

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

O siacutembolo da linha 1 eacute o marcador de fundo da pilha $

O proacuteximo siacutembolo de entrada eacute id e o estado 0 tem uma transiccedilatildeo sob id p o estado 5

38 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

A partir do item [F rarr id ] no estado 5 efetuamos uma reduccedilatildeo segundo a produccedilatildeo F rarr id

Na linha 2 o estado 5 eacute empilhado (siacutembolo id)

I5

F rarr id

Natildeo haacute transiccedilatildeo a partir do estado 5 sob a entrada por isso reduzimos

39 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o lado direito da produccedilatildeo da linha (2) eacute id correspondendo ao estado 5 e seu lado direito eacute o F

Com os estados ao desempilhar o estado 5 correspondendo ao siacutembolo id o estado 0 passa a ser o topo

0 F $

40 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id I3

T rarr F

F

Procuramos uma transiccedilatildeo sob F o lado esquerdo da produccedilatildeo

0 F $

O estado 0 possui uma transiccedilatildeo em F p o estado 3 onde empilhamos o estado 3 com o siacutembolo F Ver linha (3)

3

41 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I3

T rarr F

Natildeo haacute transiccedilatildeo a partir do estado 3 sob a entrada por isso reduzimos

A partir do item [T rarr F ] no estado 3 efetuamos uma reduccedilatildeo segundo a produccedilatildeo T rarr F

3

0

T $

42 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

I7

T rarr T F

F rarr ( E )

F rarr id

id

Como outro exemplo considere a linha (5) com o estado 7 referente ao siacutembolo no topo da pilha

Esse estado 7 possui uma transaccedilatildeo para o estado 5 sob a entrada id de modo que empilhamos o estado 5

43 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o estado 5 natildeo possui transiccedilotildees de modo que reduzimos segundo F rarr id

quando removemos da pilha o estado 5 correspondente ao lado direito id o estado 7 passa a ser o topo da pilha

44 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Como o estado 7 possui uma transaccedilatildeo sob F para o estado 10 empilhamos o estado 10 (siacutembolo F)

I7

T rarr T F

F rarr ( E )

F rarr id

I10

T rarr T F

F

45 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O algoritmo eacute o mesmo para todos

os analisadores sintaacuteticos LR

Soacute a tabela de anaacutelise eacute diferente

de um analisador para o outro

O algoritmo lecirc caracteres de um

buffer de entrada um de cada vez

46 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O analisador sintaacutetico shift-reduce

transfere um siacutembolo para pilha jaacute

o analisador sintaacutetico LR transfere

um estado

Cada estado resume a informaccedilatildeo

contida na pilha abaixo dele

47 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

A pilha conteacutem uma sequencia de

estados s0s1 sm onde sm estaacute

no topo

No meacutetodo SLR a pilha conteacutem

estados do autocircmato LR(0)

Por construccedilatildeo a cada estado eacute

associado 1 siacutembolo da gramaacutetica

48 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Lembrem-se de que os estados

correspondem a conj de itens e

que haacute uma transiccedilatildeo do estado i

para o estado j se GOTO(Ii X) = Ij

Todas as transiccedilotildees para o estado

j devem ser para o mesmo siacutembolo

da gramaacutetica X

49 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

Sm

Sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Desta forma cada estado exceto

o estado inicial 0 possui um uacutenico

siacutembolo da gramaacutetica associado a

ele

50 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

A tabela LR consiste em duas partes ACTION uma funccedilatildeo de accedilatildeo de anaacutelise e GOTO uma funccedilatildeo de transiccedilatildeo

1 A funccedilatildeo ACTION recebe como argumentos um estado i e um estado a (ou $) O valor de ACTION(i a) pode ter um dos quatro formatos

a) Shift j onde j eacute um estado

A accedilatildeo tomada pelo analisador sintaacutetico efetivamente transfere a entrada a para a pilha mas usa o estado j para representar a

51 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

b) Reduce Ararr β A accedilatildeo do analisador efetivamente reduz β no topo da pilha para A o lado esquerdo da produccedilatildeo

c) Accept O analisador aceita a entrada e termina a anaacutelise

d) Error O analisador descobre um erro em sua entrada passa o controle p o recuperador de erro que toma alguma accedilatildeo corretiva

2 Estendemos a funccedilatildeo GOTO definida sobre um conjunto de itens para os estados se GOTO(Ii A) = Ij entatildeo GOTO tambeacutem mapeia um estado i e um natildeo-terminal A para o estado j

52 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

Para descrever o comportamento de uma analisador LR eacute recomendaacutevel ter uma notaccedilatildeo representado o estado completo do analisador sua pilha e a entrada restante

Uma configuraccedilatildeo p um analisador LR eacute um par (s0s1sm aiai+1an $) O primeiro componente eacute o conteuacutedo da pilha com o topo agrave direita e o segundo componente representa a entrada restante

Essa configuraccedilatildeo representa a seguinte forma sentencial agrave direita (X0X1Xmaiai+1an) Assim como faria um analisador shift-reduce

53 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

A uacutenica diferenccedila eacute que em inveacutes de siacutembolos da gramaacutetica a pilha conteacutem estados a partir dos quais os siacutembolos da gramaacutetica podem ser recuperados

Ou seja Xi eacute o siacutembolo da gramaacutetica representado pelo estado si

Observe que s0 o estado inicial do analisador sintaacutetico natildeo representa um siacutembolo da gramaacutetica e serve como marcador de fundo da pilha aleacutem de desempenhar um papel importante na anaacutelise

54 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

O proacuteximo movimento do analisador a partir da configuraccedilatildeo dada eacute determinado pela leitura de ai o siacutembolo de entrada corrente e sm o estado do topo da pilha e entatildeo consultando a entrada ACTION[sm ai] na tabela de accedilatildeo de anaacutelise

As configuraccedilotildees restantes apoacutes cada um dos quatro tipos de movimentaccedilatildeo satildeo as seguintes

1 Se ACTION[Sm ai] = shift s o analisador sintaacutetico executa um movimento de transferecircncia (shift move) ele empilha o estado s e avanccedila da entrada resultando na configuraccedilatildeo (s0s1 sm ai+1an $)

55 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2 Se ACTION[Sm ai]=reduce Ararrβ entatildeo o analisador sintaacutetico executa um movimento de reduzir (reduce move) resultando na configuraccedilatildeo (s0s1 sm-rs aiai+1an $)

onde r eacute o comprimento de β e s = GOTO[sm-r A]

Aqui o analisador sintaacutetico incialmente desempilhou os r siacutembolos de estado da pilha expondo o estado sm-r

O analisador sintaacutetico entatildeo empilhou s a entrada para GOTO[sm-r A] na pilha O siacutembolo corrente da entrada natildeo eacute alterado em um movimento de reduzir

56 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2

Para os LR que construiremos Xm-r+1Xm a sequencia de siacutembolos da gramaacutetica correspondendo aos estados retirados da pilha sempre iratildeo casar com β o lado direito da produccedilatildeo sendo reduzida

A saiacuteda de um analisador LR eacute gerada apoacutes um movimento de reduzir executando a accedilatildeo semacircntica associada agrave produccedilatildeo que estaacute sendo reduzida

No momento vamos considerar que a saiacuteda consiste soacute na impressatildeo da produccedilatildeo de reduccedilatildeo

57 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

3 Se ACTION[sm ai] = accept a anaacutelise estaacute concluiacuteda

4 Se ACTION[sm ai] = error o analisador sintaacutetico descobriu um erro e ativa uma rotina para recuperaccedilatildeo de erro

Todos os analisadores sintaacuteticos LR se comportam dessa maneira

A uacutenica diferenccedila entre eles diz respeito a informaccedilatildeo contida nos campos ACTION e GOTO da tabela de anaacutelise

O algoritmo de anaacutelise LR eacute resumido nos proacuteximos slides

58 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

Entrada Uma cadeia de entrada w e uma tabela de anaacutelise com funccedilotildees ACTION e GOTO para uma gramaacutetica G

Saiacuteda Se w estaacute em L(G) os passos os passos de uma reduccedilatildeo de uma anaacutelise ascendente para w

Caso contraacuterio uma indicaccedilatildeo de erro

Meacutetodo Inicialmente o analisador sintaacutetico possui w$ no buffer de entrada e s0 em sua pilha onde s0 representa o estado inicial

O analisador sintaacutetico entatildeo executa o algoritmo

59 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

[PSEUDO] seja a o primeiro siacutembolo de w$ while (1) Seja s o estado no topo da pilha if (ACTION[s a] = shift t) empilha t na pilha seja a o proacuteximo siacutembolo da entrada else if (ACTION[s a] = reduce Ararr β) desempilha siacutembolos |β| da pilha faccedila o estado t agora ser o topo da pilha empilhe GOTO[t A] na pilha imprima a produccedilatildeo Ararr β else if (ACTION[s a] = accept) pare a anaacutelise terminou

else chame uma rotina de recuperaccedilatildeo de erros

60 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR ndash Exemplo

A tabela do proacuteximo slide monstra as funccedilotildees ACTION e GOTO de uma tabela de anaacutelise LR para a gramaacutetica de expressatildeo estudada nesta aula e repetida aqui com produccedilotildees numeradas

Os coacutedigos para as accedilotildees satildeo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

(1) E rarr E + T

(2) E rarr T

(3) T rarr T F

(4) T rarr F

(5) F rarr ( E )

(6) F rarr id

1 Si significa avanccedila na entrada e empilha o estado i na pilha

2 Rj significa reduce segundo a produccedilatildeo de nuacutemero j

3 Acc significa accept

4 Entrada em branco significa error

61 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Estado ACTION

id + ( ) $

0 s5 s4

1 S6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4

5 r6 r6 r6 r6

6 s5 s4

7 s5 s4

8 r6 s11

9 s1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

GOTO

E T F

1 2 3

8 2 3

9 3

10

O valor de GOTO(s a) para o

terminal a estaacute em ACTION da

tabela de anaacutelise conectado agrave

accedilatildeo de transferecircncia sob a

entrada a e o estado s

O GOTO fornece o GOTO[s a]

para os natildeo-terminais A

Ok

Mas como eu consigo os dados

desta tabela

62 Geovane Griesang

A sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

FOLLOW(E) = FOLLOW(Ersquo) = ) $

FOLLOW(T) = FOLLOW(Trsquo) = + ) $

FOLLOW(F) = + ) $

63 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Construindo tabelas de anaacutelise SLR

Esse meacutetodo eacute o mais simples dos LRs Vamos nos referir a tabela de anaacutelise construiacuteda por este meacutetodo como uma tabela SLR e o analisador LR usando uma tabela SLR como um analisador sintaacutetico SLR

O meacutetodo SLR comeccedila com os itens LR(0) e autocircmatos LR(0) ou seja dada uma gramaacutetica G estendemos G para produzir Grsquo com o novo siacutembolo inicial Srsquo A partir de Grsquo construiacutemos C a coleccedilatildeo canocircnica de conj de itens para Grsquo junto com a funccedilatildeo GOTO

Para construir as entradas ACTION e GOTO da tabela de anaacutelise usando o algoritmo a seguir eacute preciso que conheccedilamos FOLLOW(A) para cada natildeo-terminal A de uma gramaacutetica

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 14: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

14 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR - Itens e o autocircmato LR Representaccedilatildeo dos conjuntos de itens

Um gerador de analisadores sintaacuteticos que produz um analisador ascendente

deve representar os itens e conjunto de itens convenientemente

Um item pode ser representado por um par de inteiros onde o primeiro

representa o nuacutemero de uma das produccedilotildees da gramaacutetica subjacente e o

segundo indica a posiccedilatildeo do ponto

Conjuntos de itens podem ser representados por uma lista desses pares

A rarr XYZ

A rarr XYZ

A rarr XYZ

A rarr XYZ

15 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR - Itens e o autocircmato LR Representaccedilatildeo dos conjuntos de itens

O conjunto de itens necessaacuterios frequentemente incluem itens de

ldquofechamentordquo (ldquoclosurerdquo) onde o ponto estaacute no iniacutecio do corpo

Esses itens sempre podem ser reconstruiacutedos a partir dos outros itens no

conjunto e natildeo temos de incluiacute-los na lista

A rarr XYZ

A rarr XYZ

A rarr XYZ

A rarr XYZ

16 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Itens e o autocircmato LR

Um item indica quanto de uma produccedilatildeo jaacute foi visto em determinado ponto no processo de reconhecimento sintaacutetico Ex

O item ArarrXYZ indica o iniacutecio da busca de uma cadeia derivaacutevel de XYZ na entrada

O item A rarr XYZ indica que no ponto atual onde se encontra a anaacutelise uma cadeia X jaacute foi encontrada e que esperamos em seguida ver uma cadeia derivaacutevel de YZ

O item A rarr XYZ indica o fim da busca ou seja jaacute derivamos o lado direito XYZ de A e que pode ser o momento de reduzir XYZ para A

A rarr XYZ

A rarr XYZ

A rarr XYZ

A rarr XYZ

17 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Itens e o autocircmato LR

Uma coleccedilatildeo de conj de itens LR(0) chamada coleccedilatildeo LR(0) canocircnica oferece a base para construccedilatildeo de um autocircmato finito determinista que eacute usado para dirigir as decisotildees durante a anaacutelise

Esse autocircmato eacute chamado de autocircmato LR(0)

Em particular cada estado do autocircmato LR(0) representa um conjunto de itens na coleccedilatildeo LR(0) canocircnica

18 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Exemplo Para construir a coleccedilatildeo LR(0) canocircnica para uma gramaacutetica definimos uma gramaacutetica estendida e duas funccedilotildees

funccedilatildeo de fechamento (function CLOSURE)

funccedilatildeo de transiccedilatildeo (function GOTO)

Se G eacute uma gramaacutetica com siacutembolo inicial S entatildeo Grsquo eacute uma gramaacutetica estendida para G com o novo siacutembolo inicial Srsquo e a produccedilatildeo Srsquo rarr S

O objetivo dessa nova produccedilatildeo eacute simplificar a identificaccedilatildeo de quando o reconhecedor sintaacutetico deve parar e anunciar a aceitaccedilatildeo da cadeia de entrada

Ou seja a aceitaccedilatildeo ocorre se e somente se o analisador estiver para reduzir por Srsquo rarr S

19 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Se I eacute um conj de itens para a gramaacutetica G entatildeo CLOSURE(I) eacute o conj de itens construiacutedos a partir de I pelas duas regras

1 Inicialmente acrescente todo item de I no CLOSURE(I)

2 Se A rarr αBβ estaacute em CLOSEURE(I) e B rarr γ eacute uma produccedilatildeo entatildeo adicione o item B rarr γ em CLOSURE(I) se ele ainda natildeo estaacute laacute

Ix

A rarr αBβ

B rarr γ

20 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Intuitivamente A rarr αBβ em CLOSURE(I) indica que em algum ponto no processo de reconhecimento os itens correspondentes as produccedilotildees-B devem ser acrescentados para dirigir a busca por B

A subcadeia derivaacutevel de Bβ na entrada teraacute um prefixo derivaacutevel de B aplicando umas das produccedilotildees-B

Portanto incluiacutemos itens para todas as produccedilotildees-B ou seja se B rarr γ eacute uma produccedilatildeo tambeacutem incluiacutemos B rarr γ em CLOSURE(I) este processo eacute conhecido como fechamento de estado

Ix

A rarr αBβ

B rarr γ

21 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

P ver como o fechamento de um estado eacute computado Ersquo rarr E eacute colocado em CLOSURE(I) pela regra (1)

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Acrescente todo item de I no CLOSURE(I)

I0

Ersquo rarr E

22 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Como existe um natildeo-terminal E agrave direita de um ponto acrescentamos as produccedilotildees-E com pontos mais agrave esquerda do lado direito dos itens ex

E rarr E + T e E rarr T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

23 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Agora existe um natildeo-terminal T imediatamente agrave direita de um ponto no segundo item incluiacutedo (E rarr T) de modo que acrescentamos as produccedilotildees-T T rarr T F e T rarr F

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

24 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Em seguida o natildeo-terminal F agrave direita de um ponto nos forccedila a incluir os itens Frarr (E) e F rarr id mas nenhum outro item precisa ser acrescentado

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr (E)

F rarr id

25 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Um modo conveniente de implementar a funccedilatildeo de fechamento (closure) eacute manter um arranjo booleano added indexado pelos natildeo-terminais de G de modo que added[B] seja definido como verdadeiro (true) se e quando incluirmos o item B rarr γ para cada produccedilatildeo-B B rarr γ

SetOfItems CLOSURE(I)

J=I

repeat

for (cada item A rarr αBβ em J)

for (cada produccedilatildeo B rarr γ de G)

if (B rarr γ natildeo estaacute em J)

Adicione B rarr γ em J

until mais nenhum item seja adicionado a J em um passo do loop

return J

Ix

A rarr αBβ

B rarr γ

26 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Observe que se uma produccedilatildeo-B for incluiacuteda no fechamento de I com o ponto mais agrave esquerda do seu lado direito entatildeo todas as produccedilotildees-B seratildeo igualmente incluiacutedas no fechamento Ex A rarr αBβ

Uma lista de natildeo-terminais B cujas produccedilotildees foram incluiacutedas dessa forma eacute suficiente Dividimos todos os conjuntos de itens de interesse em duas classes

1 Itens de base (kernel) o item inicial Srsquo rarr S e todos itens cujos pontos natildeo estatildeo mais agrave esquerda em seus lados direitos

2 Itens que natildeo satildeo de base todos os itens com seus pontos mais agrave esquerda em seus lados direitos exceto Srsquo rarr S Ex B rarr γ

Ix

A rarr αBβ

B rarr γ

27 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Aleacutem do mais cada conjunto de itens de interesse eacute formado a partir do fechamento de um conjunto de itens de base

Os itens adicionados no fechamento nunca podem ser itens de base naturalmente

Assim podemos representar os conjuntos de itens em que realmente estamos interessados com pouca memoacuteria se desprezarmos todos que natildeo satildeo itens de base sabendo que esses podem ser gerados novamente no processo de fechamento Ex B rarr γ exceto Srsquo rarr S

Ix

A rarr αBβ

B rarr γ

28 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

A segunda funccedilatildeo usada na construccedilatildeo da coleccedilatildeo canocircnica LR(0) eacute a funccedilatildeo de transiccedilatildeo GOTO(I X) onde I eacute o conjunto de itens de base e X eacute um siacutembolo da gramaacutetica

GOTO(I X) eacute definido como fechamento do conjunto de todos os itens [ArarrαXβ] tais que

[A rarr αXβ] estaacute em I

A funccedilatildeo de transiccedilatildeo GOTO eacute utilizada para definir as transaccedilotildees no autocircmato LR(0) para uma gramaacutetica

I1

Ersquo rarr E

E rarr E + T

I0

Ersquo rarr E

E rarr E + T

E

29 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Estados do autocircmato correspondem aos conjuntos de itens e GOTO(I +) especifica a transaccedilatildeo do estado I para um novo estado I sob a entrada X

Se I representa o conjunto com dois itens [Ersquo rarr E][E rarr E+T] entatildeo GOTO(I +) conteacutem os itens

Calculamos GOTO(I +) examinando os itens em I com o + imediatamente agrave direita do ponto

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

A rarr αXβ

A rarr αXβ

I1

Ersquo rarr E

E rarr E + T +

I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

30 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Calculamos GOTO(I +) examinando os itens em I com o + imediatamente agrave direita do ponto

O item Ersquo rarr E natildeo eacute desse tipo mas Ersquo rarr E + T sim

Movemos o ponto para imediatamente agrave direita de + e obtemos ErarrE + T

e entatildeo calculamos o fechamento desse conjunto unitaacuterio

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Itens em I

[Ersquo rarr E]

[E rarr E+T]

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I1

Ersquo rarr E

E rarr E + T +

31 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Agora estamos prontos para construir C a coleccedilatildeo canocircnica de conjuntos

de itens LR(0) para uma gramaacutetica estendida Grsquo

void Itens(Grsquo)

C = CLOSURE([Srsquo rarr S])

repeat

for (cada conjunto de itens I em C)

for (cada siacutembolo da gramaacutetica X)

if (GOTO(I X) natildeo eacute vazio e natildeo estaacute em C)

Adicione GOTO(I X) em C

until nenhum novo conjunto de itens seja adicionado em C em uma rodada

32 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

A ideia central por traacutes da anaacutelise ldquoLR Simplesrdquo ou SLR eacute a construccedilatildeo do autocircmato LR(0) a partir da gramaacutetica dada

Os estados desses autocircmatos satildeo os conjuntos de itens da coleccedilatildeo LR canocircnica e as transiccedilotildees satildeo dadas pela funccedilatildeo de transiccedilatildeo GOTO

O estado inicial do autocircmato LR eacute dado por CLOSURE([Srsquo rarr S]) onde Srsquo eacute o siacutembolo inicial da gramaacutetica estendida

Todos os estados satildeo estados de aceitaccedilatildeo Nos referimos ao ldquoestado jrdquo como o estado correspondente ao conjunto de itens Ij

33 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E

Aceitar $

I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

34 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Como os autocircmatos LR(0) podem ajudar-nos a decidir por uma das accedilotildees shift-reduce (veja as decisotildees entre shift-reduce a seguir)

Suponha que a cadeia γ dos siacutembolos da gramaacutetica leve o autocircmato LR(0) do estado inicial 0 para algum estado j

Desta forma avance sobre o proacuteximo siacutembolo a se o estado j possuir uma transaccedilatildeo sob a

Caso contraacuterio escolha reduzir

Os itens no estado j nos diratildeo qual produccedilatildeo usar

35 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

O algoritmo LR abaixo utiliza sua pilha para acompanhar os estados e tambeacutem os siacutembolos da gramaacutetica

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Na verdade

O siacutembolo da gramaacutetica pode ser

recuperado a parir do estado de

modo que a pilha possua estados

ao inveacutes de siacutembolos

36 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Usamos uma pilha

p conter os estados

Os siacutembolos que correspondem aos estados estatildeo na coluna ldquoSiacutembolosrdquo

A pilha da linha (1) tecircm o estado inicial 0 do autocircmato

37 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Portanto fazemos a transferecircncia

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

O siacutembolo da linha 1 eacute o marcador de fundo da pilha $

O proacuteximo siacutembolo de entrada eacute id e o estado 0 tem uma transiccedilatildeo sob id p o estado 5

38 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

A partir do item [F rarr id ] no estado 5 efetuamos uma reduccedilatildeo segundo a produccedilatildeo F rarr id

Na linha 2 o estado 5 eacute empilhado (siacutembolo id)

I5

F rarr id

Natildeo haacute transiccedilatildeo a partir do estado 5 sob a entrada por isso reduzimos

39 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o lado direito da produccedilatildeo da linha (2) eacute id correspondendo ao estado 5 e seu lado direito eacute o F

Com os estados ao desempilhar o estado 5 correspondendo ao siacutembolo id o estado 0 passa a ser o topo

0 F $

40 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id I3

T rarr F

F

Procuramos uma transiccedilatildeo sob F o lado esquerdo da produccedilatildeo

0 F $

O estado 0 possui uma transiccedilatildeo em F p o estado 3 onde empilhamos o estado 3 com o siacutembolo F Ver linha (3)

3

41 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I3

T rarr F

Natildeo haacute transiccedilatildeo a partir do estado 3 sob a entrada por isso reduzimos

A partir do item [T rarr F ] no estado 3 efetuamos uma reduccedilatildeo segundo a produccedilatildeo T rarr F

3

0

T $

42 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

I7

T rarr T F

F rarr ( E )

F rarr id

id

Como outro exemplo considere a linha (5) com o estado 7 referente ao siacutembolo no topo da pilha

Esse estado 7 possui uma transaccedilatildeo para o estado 5 sob a entrada id de modo que empilhamos o estado 5

43 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o estado 5 natildeo possui transiccedilotildees de modo que reduzimos segundo F rarr id

quando removemos da pilha o estado 5 correspondente ao lado direito id o estado 7 passa a ser o topo da pilha

44 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Como o estado 7 possui uma transaccedilatildeo sob F para o estado 10 empilhamos o estado 10 (siacutembolo F)

I7

T rarr T F

F rarr ( E )

F rarr id

I10

T rarr T F

F

45 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O algoritmo eacute o mesmo para todos

os analisadores sintaacuteticos LR

Soacute a tabela de anaacutelise eacute diferente

de um analisador para o outro

O algoritmo lecirc caracteres de um

buffer de entrada um de cada vez

46 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O analisador sintaacutetico shift-reduce

transfere um siacutembolo para pilha jaacute

o analisador sintaacutetico LR transfere

um estado

Cada estado resume a informaccedilatildeo

contida na pilha abaixo dele

47 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

A pilha conteacutem uma sequencia de

estados s0s1 sm onde sm estaacute

no topo

No meacutetodo SLR a pilha conteacutem

estados do autocircmato LR(0)

Por construccedilatildeo a cada estado eacute

associado 1 siacutembolo da gramaacutetica

48 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Lembrem-se de que os estados

correspondem a conj de itens e

que haacute uma transiccedilatildeo do estado i

para o estado j se GOTO(Ii X) = Ij

Todas as transiccedilotildees para o estado

j devem ser para o mesmo siacutembolo

da gramaacutetica X

49 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

Sm

Sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Desta forma cada estado exceto

o estado inicial 0 possui um uacutenico

siacutembolo da gramaacutetica associado a

ele

50 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

A tabela LR consiste em duas partes ACTION uma funccedilatildeo de accedilatildeo de anaacutelise e GOTO uma funccedilatildeo de transiccedilatildeo

1 A funccedilatildeo ACTION recebe como argumentos um estado i e um estado a (ou $) O valor de ACTION(i a) pode ter um dos quatro formatos

a) Shift j onde j eacute um estado

A accedilatildeo tomada pelo analisador sintaacutetico efetivamente transfere a entrada a para a pilha mas usa o estado j para representar a

51 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

b) Reduce Ararr β A accedilatildeo do analisador efetivamente reduz β no topo da pilha para A o lado esquerdo da produccedilatildeo

c) Accept O analisador aceita a entrada e termina a anaacutelise

d) Error O analisador descobre um erro em sua entrada passa o controle p o recuperador de erro que toma alguma accedilatildeo corretiva

2 Estendemos a funccedilatildeo GOTO definida sobre um conjunto de itens para os estados se GOTO(Ii A) = Ij entatildeo GOTO tambeacutem mapeia um estado i e um natildeo-terminal A para o estado j

52 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

Para descrever o comportamento de uma analisador LR eacute recomendaacutevel ter uma notaccedilatildeo representado o estado completo do analisador sua pilha e a entrada restante

Uma configuraccedilatildeo p um analisador LR eacute um par (s0s1sm aiai+1an $) O primeiro componente eacute o conteuacutedo da pilha com o topo agrave direita e o segundo componente representa a entrada restante

Essa configuraccedilatildeo representa a seguinte forma sentencial agrave direita (X0X1Xmaiai+1an) Assim como faria um analisador shift-reduce

53 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

A uacutenica diferenccedila eacute que em inveacutes de siacutembolos da gramaacutetica a pilha conteacutem estados a partir dos quais os siacutembolos da gramaacutetica podem ser recuperados

Ou seja Xi eacute o siacutembolo da gramaacutetica representado pelo estado si

Observe que s0 o estado inicial do analisador sintaacutetico natildeo representa um siacutembolo da gramaacutetica e serve como marcador de fundo da pilha aleacutem de desempenhar um papel importante na anaacutelise

54 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

O proacuteximo movimento do analisador a partir da configuraccedilatildeo dada eacute determinado pela leitura de ai o siacutembolo de entrada corrente e sm o estado do topo da pilha e entatildeo consultando a entrada ACTION[sm ai] na tabela de accedilatildeo de anaacutelise

As configuraccedilotildees restantes apoacutes cada um dos quatro tipos de movimentaccedilatildeo satildeo as seguintes

1 Se ACTION[Sm ai] = shift s o analisador sintaacutetico executa um movimento de transferecircncia (shift move) ele empilha o estado s e avanccedila da entrada resultando na configuraccedilatildeo (s0s1 sm ai+1an $)

55 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2 Se ACTION[Sm ai]=reduce Ararrβ entatildeo o analisador sintaacutetico executa um movimento de reduzir (reduce move) resultando na configuraccedilatildeo (s0s1 sm-rs aiai+1an $)

onde r eacute o comprimento de β e s = GOTO[sm-r A]

Aqui o analisador sintaacutetico incialmente desempilhou os r siacutembolos de estado da pilha expondo o estado sm-r

O analisador sintaacutetico entatildeo empilhou s a entrada para GOTO[sm-r A] na pilha O siacutembolo corrente da entrada natildeo eacute alterado em um movimento de reduzir

56 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2

Para os LR que construiremos Xm-r+1Xm a sequencia de siacutembolos da gramaacutetica correspondendo aos estados retirados da pilha sempre iratildeo casar com β o lado direito da produccedilatildeo sendo reduzida

A saiacuteda de um analisador LR eacute gerada apoacutes um movimento de reduzir executando a accedilatildeo semacircntica associada agrave produccedilatildeo que estaacute sendo reduzida

No momento vamos considerar que a saiacuteda consiste soacute na impressatildeo da produccedilatildeo de reduccedilatildeo

57 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

3 Se ACTION[sm ai] = accept a anaacutelise estaacute concluiacuteda

4 Se ACTION[sm ai] = error o analisador sintaacutetico descobriu um erro e ativa uma rotina para recuperaccedilatildeo de erro

Todos os analisadores sintaacuteticos LR se comportam dessa maneira

A uacutenica diferenccedila entre eles diz respeito a informaccedilatildeo contida nos campos ACTION e GOTO da tabela de anaacutelise

O algoritmo de anaacutelise LR eacute resumido nos proacuteximos slides

58 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

Entrada Uma cadeia de entrada w e uma tabela de anaacutelise com funccedilotildees ACTION e GOTO para uma gramaacutetica G

Saiacuteda Se w estaacute em L(G) os passos os passos de uma reduccedilatildeo de uma anaacutelise ascendente para w

Caso contraacuterio uma indicaccedilatildeo de erro

Meacutetodo Inicialmente o analisador sintaacutetico possui w$ no buffer de entrada e s0 em sua pilha onde s0 representa o estado inicial

O analisador sintaacutetico entatildeo executa o algoritmo

59 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

[PSEUDO] seja a o primeiro siacutembolo de w$ while (1) Seja s o estado no topo da pilha if (ACTION[s a] = shift t) empilha t na pilha seja a o proacuteximo siacutembolo da entrada else if (ACTION[s a] = reduce Ararr β) desempilha siacutembolos |β| da pilha faccedila o estado t agora ser o topo da pilha empilhe GOTO[t A] na pilha imprima a produccedilatildeo Ararr β else if (ACTION[s a] = accept) pare a anaacutelise terminou

else chame uma rotina de recuperaccedilatildeo de erros

60 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR ndash Exemplo

A tabela do proacuteximo slide monstra as funccedilotildees ACTION e GOTO de uma tabela de anaacutelise LR para a gramaacutetica de expressatildeo estudada nesta aula e repetida aqui com produccedilotildees numeradas

Os coacutedigos para as accedilotildees satildeo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

(1) E rarr E + T

(2) E rarr T

(3) T rarr T F

(4) T rarr F

(5) F rarr ( E )

(6) F rarr id

1 Si significa avanccedila na entrada e empilha o estado i na pilha

2 Rj significa reduce segundo a produccedilatildeo de nuacutemero j

3 Acc significa accept

4 Entrada em branco significa error

61 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Estado ACTION

id + ( ) $

0 s5 s4

1 S6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4

5 r6 r6 r6 r6

6 s5 s4

7 s5 s4

8 r6 s11

9 s1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

GOTO

E T F

1 2 3

8 2 3

9 3

10

O valor de GOTO(s a) para o

terminal a estaacute em ACTION da

tabela de anaacutelise conectado agrave

accedilatildeo de transferecircncia sob a

entrada a e o estado s

O GOTO fornece o GOTO[s a]

para os natildeo-terminais A

Ok

Mas como eu consigo os dados

desta tabela

62 Geovane Griesang

A sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

FOLLOW(E) = FOLLOW(Ersquo) = ) $

FOLLOW(T) = FOLLOW(Trsquo) = + ) $

FOLLOW(F) = + ) $

63 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Construindo tabelas de anaacutelise SLR

Esse meacutetodo eacute o mais simples dos LRs Vamos nos referir a tabela de anaacutelise construiacuteda por este meacutetodo como uma tabela SLR e o analisador LR usando uma tabela SLR como um analisador sintaacutetico SLR

O meacutetodo SLR comeccedila com os itens LR(0) e autocircmatos LR(0) ou seja dada uma gramaacutetica G estendemos G para produzir Grsquo com o novo siacutembolo inicial Srsquo A partir de Grsquo construiacutemos C a coleccedilatildeo canocircnica de conj de itens para Grsquo junto com a funccedilatildeo GOTO

Para construir as entradas ACTION e GOTO da tabela de anaacutelise usando o algoritmo a seguir eacute preciso que conheccedilamos FOLLOW(A) para cada natildeo-terminal A de uma gramaacutetica

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 15: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

15 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR - Itens e o autocircmato LR Representaccedilatildeo dos conjuntos de itens

O conjunto de itens necessaacuterios frequentemente incluem itens de

ldquofechamentordquo (ldquoclosurerdquo) onde o ponto estaacute no iniacutecio do corpo

Esses itens sempre podem ser reconstruiacutedos a partir dos outros itens no

conjunto e natildeo temos de incluiacute-los na lista

A rarr XYZ

A rarr XYZ

A rarr XYZ

A rarr XYZ

16 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Itens e o autocircmato LR

Um item indica quanto de uma produccedilatildeo jaacute foi visto em determinado ponto no processo de reconhecimento sintaacutetico Ex

O item ArarrXYZ indica o iniacutecio da busca de uma cadeia derivaacutevel de XYZ na entrada

O item A rarr XYZ indica que no ponto atual onde se encontra a anaacutelise uma cadeia X jaacute foi encontrada e que esperamos em seguida ver uma cadeia derivaacutevel de YZ

O item A rarr XYZ indica o fim da busca ou seja jaacute derivamos o lado direito XYZ de A e que pode ser o momento de reduzir XYZ para A

A rarr XYZ

A rarr XYZ

A rarr XYZ

A rarr XYZ

17 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Itens e o autocircmato LR

Uma coleccedilatildeo de conj de itens LR(0) chamada coleccedilatildeo LR(0) canocircnica oferece a base para construccedilatildeo de um autocircmato finito determinista que eacute usado para dirigir as decisotildees durante a anaacutelise

Esse autocircmato eacute chamado de autocircmato LR(0)

Em particular cada estado do autocircmato LR(0) representa um conjunto de itens na coleccedilatildeo LR(0) canocircnica

18 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Exemplo Para construir a coleccedilatildeo LR(0) canocircnica para uma gramaacutetica definimos uma gramaacutetica estendida e duas funccedilotildees

funccedilatildeo de fechamento (function CLOSURE)

funccedilatildeo de transiccedilatildeo (function GOTO)

Se G eacute uma gramaacutetica com siacutembolo inicial S entatildeo Grsquo eacute uma gramaacutetica estendida para G com o novo siacutembolo inicial Srsquo e a produccedilatildeo Srsquo rarr S

O objetivo dessa nova produccedilatildeo eacute simplificar a identificaccedilatildeo de quando o reconhecedor sintaacutetico deve parar e anunciar a aceitaccedilatildeo da cadeia de entrada

Ou seja a aceitaccedilatildeo ocorre se e somente se o analisador estiver para reduzir por Srsquo rarr S

19 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Se I eacute um conj de itens para a gramaacutetica G entatildeo CLOSURE(I) eacute o conj de itens construiacutedos a partir de I pelas duas regras

1 Inicialmente acrescente todo item de I no CLOSURE(I)

2 Se A rarr αBβ estaacute em CLOSEURE(I) e B rarr γ eacute uma produccedilatildeo entatildeo adicione o item B rarr γ em CLOSURE(I) se ele ainda natildeo estaacute laacute

Ix

A rarr αBβ

B rarr γ

20 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Intuitivamente A rarr αBβ em CLOSURE(I) indica que em algum ponto no processo de reconhecimento os itens correspondentes as produccedilotildees-B devem ser acrescentados para dirigir a busca por B

A subcadeia derivaacutevel de Bβ na entrada teraacute um prefixo derivaacutevel de B aplicando umas das produccedilotildees-B

Portanto incluiacutemos itens para todas as produccedilotildees-B ou seja se B rarr γ eacute uma produccedilatildeo tambeacutem incluiacutemos B rarr γ em CLOSURE(I) este processo eacute conhecido como fechamento de estado

Ix

A rarr αBβ

B rarr γ

21 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

P ver como o fechamento de um estado eacute computado Ersquo rarr E eacute colocado em CLOSURE(I) pela regra (1)

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Acrescente todo item de I no CLOSURE(I)

I0

Ersquo rarr E

22 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Como existe um natildeo-terminal E agrave direita de um ponto acrescentamos as produccedilotildees-E com pontos mais agrave esquerda do lado direito dos itens ex

E rarr E + T e E rarr T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

23 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Agora existe um natildeo-terminal T imediatamente agrave direita de um ponto no segundo item incluiacutedo (E rarr T) de modo que acrescentamos as produccedilotildees-T T rarr T F e T rarr F

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

24 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Em seguida o natildeo-terminal F agrave direita de um ponto nos forccedila a incluir os itens Frarr (E) e F rarr id mas nenhum outro item precisa ser acrescentado

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr (E)

F rarr id

25 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Um modo conveniente de implementar a funccedilatildeo de fechamento (closure) eacute manter um arranjo booleano added indexado pelos natildeo-terminais de G de modo que added[B] seja definido como verdadeiro (true) se e quando incluirmos o item B rarr γ para cada produccedilatildeo-B B rarr γ

SetOfItems CLOSURE(I)

J=I

repeat

for (cada item A rarr αBβ em J)

for (cada produccedilatildeo B rarr γ de G)

if (B rarr γ natildeo estaacute em J)

Adicione B rarr γ em J

until mais nenhum item seja adicionado a J em um passo do loop

return J

Ix

A rarr αBβ

B rarr γ

26 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Observe que se uma produccedilatildeo-B for incluiacuteda no fechamento de I com o ponto mais agrave esquerda do seu lado direito entatildeo todas as produccedilotildees-B seratildeo igualmente incluiacutedas no fechamento Ex A rarr αBβ

Uma lista de natildeo-terminais B cujas produccedilotildees foram incluiacutedas dessa forma eacute suficiente Dividimos todos os conjuntos de itens de interesse em duas classes

1 Itens de base (kernel) o item inicial Srsquo rarr S e todos itens cujos pontos natildeo estatildeo mais agrave esquerda em seus lados direitos

2 Itens que natildeo satildeo de base todos os itens com seus pontos mais agrave esquerda em seus lados direitos exceto Srsquo rarr S Ex B rarr γ

Ix

A rarr αBβ

B rarr γ

27 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Aleacutem do mais cada conjunto de itens de interesse eacute formado a partir do fechamento de um conjunto de itens de base

Os itens adicionados no fechamento nunca podem ser itens de base naturalmente

Assim podemos representar os conjuntos de itens em que realmente estamos interessados com pouca memoacuteria se desprezarmos todos que natildeo satildeo itens de base sabendo que esses podem ser gerados novamente no processo de fechamento Ex B rarr γ exceto Srsquo rarr S

Ix

A rarr αBβ

B rarr γ

28 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

A segunda funccedilatildeo usada na construccedilatildeo da coleccedilatildeo canocircnica LR(0) eacute a funccedilatildeo de transiccedilatildeo GOTO(I X) onde I eacute o conjunto de itens de base e X eacute um siacutembolo da gramaacutetica

GOTO(I X) eacute definido como fechamento do conjunto de todos os itens [ArarrαXβ] tais que

[A rarr αXβ] estaacute em I

A funccedilatildeo de transiccedilatildeo GOTO eacute utilizada para definir as transaccedilotildees no autocircmato LR(0) para uma gramaacutetica

I1

Ersquo rarr E

E rarr E + T

I0

Ersquo rarr E

E rarr E + T

E

29 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Estados do autocircmato correspondem aos conjuntos de itens e GOTO(I +) especifica a transaccedilatildeo do estado I para um novo estado I sob a entrada X

Se I representa o conjunto com dois itens [Ersquo rarr E][E rarr E+T] entatildeo GOTO(I +) conteacutem os itens

Calculamos GOTO(I +) examinando os itens em I com o + imediatamente agrave direita do ponto

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

A rarr αXβ

A rarr αXβ

I1

Ersquo rarr E

E rarr E + T +

I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

30 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Calculamos GOTO(I +) examinando os itens em I com o + imediatamente agrave direita do ponto

O item Ersquo rarr E natildeo eacute desse tipo mas Ersquo rarr E + T sim

Movemos o ponto para imediatamente agrave direita de + e obtemos ErarrE + T

e entatildeo calculamos o fechamento desse conjunto unitaacuterio

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Itens em I

[Ersquo rarr E]

[E rarr E+T]

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I1

Ersquo rarr E

E rarr E + T +

31 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Agora estamos prontos para construir C a coleccedilatildeo canocircnica de conjuntos

de itens LR(0) para uma gramaacutetica estendida Grsquo

void Itens(Grsquo)

C = CLOSURE([Srsquo rarr S])

repeat

for (cada conjunto de itens I em C)

for (cada siacutembolo da gramaacutetica X)

if (GOTO(I X) natildeo eacute vazio e natildeo estaacute em C)

Adicione GOTO(I X) em C

until nenhum novo conjunto de itens seja adicionado em C em uma rodada

32 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

A ideia central por traacutes da anaacutelise ldquoLR Simplesrdquo ou SLR eacute a construccedilatildeo do autocircmato LR(0) a partir da gramaacutetica dada

Os estados desses autocircmatos satildeo os conjuntos de itens da coleccedilatildeo LR canocircnica e as transiccedilotildees satildeo dadas pela funccedilatildeo de transiccedilatildeo GOTO

O estado inicial do autocircmato LR eacute dado por CLOSURE([Srsquo rarr S]) onde Srsquo eacute o siacutembolo inicial da gramaacutetica estendida

Todos os estados satildeo estados de aceitaccedilatildeo Nos referimos ao ldquoestado jrdquo como o estado correspondente ao conjunto de itens Ij

33 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E

Aceitar $

I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

34 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Como os autocircmatos LR(0) podem ajudar-nos a decidir por uma das accedilotildees shift-reduce (veja as decisotildees entre shift-reduce a seguir)

Suponha que a cadeia γ dos siacutembolos da gramaacutetica leve o autocircmato LR(0) do estado inicial 0 para algum estado j

Desta forma avance sobre o proacuteximo siacutembolo a se o estado j possuir uma transaccedilatildeo sob a

Caso contraacuterio escolha reduzir

Os itens no estado j nos diratildeo qual produccedilatildeo usar

35 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

O algoritmo LR abaixo utiliza sua pilha para acompanhar os estados e tambeacutem os siacutembolos da gramaacutetica

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Na verdade

O siacutembolo da gramaacutetica pode ser

recuperado a parir do estado de

modo que a pilha possua estados

ao inveacutes de siacutembolos

36 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Usamos uma pilha

p conter os estados

Os siacutembolos que correspondem aos estados estatildeo na coluna ldquoSiacutembolosrdquo

A pilha da linha (1) tecircm o estado inicial 0 do autocircmato

37 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Portanto fazemos a transferecircncia

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

O siacutembolo da linha 1 eacute o marcador de fundo da pilha $

O proacuteximo siacutembolo de entrada eacute id e o estado 0 tem uma transiccedilatildeo sob id p o estado 5

38 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

A partir do item [F rarr id ] no estado 5 efetuamos uma reduccedilatildeo segundo a produccedilatildeo F rarr id

Na linha 2 o estado 5 eacute empilhado (siacutembolo id)

I5

F rarr id

Natildeo haacute transiccedilatildeo a partir do estado 5 sob a entrada por isso reduzimos

39 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o lado direito da produccedilatildeo da linha (2) eacute id correspondendo ao estado 5 e seu lado direito eacute o F

Com os estados ao desempilhar o estado 5 correspondendo ao siacutembolo id o estado 0 passa a ser o topo

0 F $

40 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id I3

T rarr F

F

Procuramos uma transiccedilatildeo sob F o lado esquerdo da produccedilatildeo

0 F $

O estado 0 possui uma transiccedilatildeo em F p o estado 3 onde empilhamos o estado 3 com o siacutembolo F Ver linha (3)

3

41 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I3

T rarr F

Natildeo haacute transiccedilatildeo a partir do estado 3 sob a entrada por isso reduzimos

A partir do item [T rarr F ] no estado 3 efetuamos uma reduccedilatildeo segundo a produccedilatildeo T rarr F

3

0

T $

42 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

I7

T rarr T F

F rarr ( E )

F rarr id

id

Como outro exemplo considere a linha (5) com o estado 7 referente ao siacutembolo no topo da pilha

Esse estado 7 possui uma transaccedilatildeo para o estado 5 sob a entrada id de modo que empilhamos o estado 5

43 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o estado 5 natildeo possui transiccedilotildees de modo que reduzimos segundo F rarr id

quando removemos da pilha o estado 5 correspondente ao lado direito id o estado 7 passa a ser o topo da pilha

44 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Como o estado 7 possui uma transaccedilatildeo sob F para o estado 10 empilhamos o estado 10 (siacutembolo F)

I7

T rarr T F

F rarr ( E )

F rarr id

I10

T rarr T F

F

45 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O algoritmo eacute o mesmo para todos

os analisadores sintaacuteticos LR

Soacute a tabela de anaacutelise eacute diferente

de um analisador para o outro

O algoritmo lecirc caracteres de um

buffer de entrada um de cada vez

46 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O analisador sintaacutetico shift-reduce

transfere um siacutembolo para pilha jaacute

o analisador sintaacutetico LR transfere

um estado

Cada estado resume a informaccedilatildeo

contida na pilha abaixo dele

47 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

A pilha conteacutem uma sequencia de

estados s0s1 sm onde sm estaacute

no topo

No meacutetodo SLR a pilha conteacutem

estados do autocircmato LR(0)

Por construccedilatildeo a cada estado eacute

associado 1 siacutembolo da gramaacutetica

48 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Lembrem-se de que os estados

correspondem a conj de itens e

que haacute uma transiccedilatildeo do estado i

para o estado j se GOTO(Ii X) = Ij

Todas as transiccedilotildees para o estado

j devem ser para o mesmo siacutembolo

da gramaacutetica X

49 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

Sm

Sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Desta forma cada estado exceto

o estado inicial 0 possui um uacutenico

siacutembolo da gramaacutetica associado a

ele

50 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

A tabela LR consiste em duas partes ACTION uma funccedilatildeo de accedilatildeo de anaacutelise e GOTO uma funccedilatildeo de transiccedilatildeo

1 A funccedilatildeo ACTION recebe como argumentos um estado i e um estado a (ou $) O valor de ACTION(i a) pode ter um dos quatro formatos

a) Shift j onde j eacute um estado

A accedilatildeo tomada pelo analisador sintaacutetico efetivamente transfere a entrada a para a pilha mas usa o estado j para representar a

51 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

b) Reduce Ararr β A accedilatildeo do analisador efetivamente reduz β no topo da pilha para A o lado esquerdo da produccedilatildeo

c) Accept O analisador aceita a entrada e termina a anaacutelise

d) Error O analisador descobre um erro em sua entrada passa o controle p o recuperador de erro que toma alguma accedilatildeo corretiva

2 Estendemos a funccedilatildeo GOTO definida sobre um conjunto de itens para os estados se GOTO(Ii A) = Ij entatildeo GOTO tambeacutem mapeia um estado i e um natildeo-terminal A para o estado j

52 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

Para descrever o comportamento de uma analisador LR eacute recomendaacutevel ter uma notaccedilatildeo representado o estado completo do analisador sua pilha e a entrada restante

Uma configuraccedilatildeo p um analisador LR eacute um par (s0s1sm aiai+1an $) O primeiro componente eacute o conteuacutedo da pilha com o topo agrave direita e o segundo componente representa a entrada restante

Essa configuraccedilatildeo representa a seguinte forma sentencial agrave direita (X0X1Xmaiai+1an) Assim como faria um analisador shift-reduce

53 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

A uacutenica diferenccedila eacute que em inveacutes de siacutembolos da gramaacutetica a pilha conteacutem estados a partir dos quais os siacutembolos da gramaacutetica podem ser recuperados

Ou seja Xi eacute o siacutembolo da gramaacutetica representado pelo estado si

Observe que s0 o estado inicial do analisador sintaacutetico natildeo representa um siacutembolo da gramaacutetica e serve como marcador de fundo da pilha aleacutem de desempenhar um papel importante na anaacutelise

54 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

O proacuteximo movimento do analisador a partir da configuraccedilatildeo dada eacute determinado pela leitura de ai o siacutembolo de entrada corrente e sm o estado do topo da pilha e entatildeo consultando a entrada ACTION[sm ai] na tabela de accedilatildeo de anaacutelise

As configuraccedilotildees restantes apoacutes cada um dos quatro tipos de movimentaccedilatildeo satildeo as seguintes

1 Se ACTION[Sm ai] = shift s o analisador sintaacutetico executa um movimento de transferecircncia (shift move) ele empilha o estado s e avanccedila da entrada resultando na configuraccedilatildeo (s0s1 sm ai+1an $)

55 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2 Se ACTION[Sm ai]=reduce Ararrβ entatildeo o analisador sintaacutetico executa um movimento de reduzir (reduce move) resultando na configuraccedilatildeo (s0s1 sm-rs aiai+1an $)

onde r eacute o comprimento de β e s = GOTO[sm-r A]

Aqui o analisador sintaacutetico incialmente desempilhou os r siacutembolos de estado da pilha expondo o estado sm-r

O analisador sintaacutetico entatildeo empilhou s a entrada para GOTO[sm-r A] na pilha O siacutembolo corrente da entrada natildeo eacute alterado em um movimento de reduzir

56 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2

Para os LR que construiremos Xm-r+1Xm a sequencia de siacutembolos da gramaacutetica correspondendo aos estados retirados da pilha sempre iratildeo casar com β o lado direito da produccedilatildeo sendo reduzida

A saiacuteda de um analisador LR eacute gerada apoacutes um movimento de reduzir executando a accedilatildeo semacircntica associada agrave produccedilatildeo que estaacute sendo reduzida

No momento vamos considerar que a saiacuteda consiste soacute na impressatildeo da produccedilatildeo de reduccedilatildeo

57 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

3 Se ACTION[sm ai] = accept a anaacutelise estaacute concluiacuteda

4 Se ACTION[sm ai] = error o analisador sintaacutetico descobriu um erro e ativa uma rotina para recuperaccedilatildeo de erro

Todos os analisadores sintaacuteticos LR se comportam dessa maneira

A uacutenica diferenccedila entre eles diz respeito a informaccedilatildeo contida nos campos ACTION e GOTO da tabela de anaacutelise

O algoritmo de anaacutelise LR eacute resumido nos proacuteximos slides

58 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

Entrada Uma cadeia de entrada w e uma tabela de anaacutelise com funccedilotildees ACTION e GOTO para uma gramaacutetica G

Saiacuteda Se w estaacute em L(G) os passos os passos de uma reduccedilatildeo de uma anaacutelise ascendente para w

Caso contraacuterio uma indicaccedilatildeo de erro

Meacutetodo Inicialmente o analisador sintaacutetico possui w$ no buffer de entrada e s0 em sua pilha onde s0 representa o estado inicial

O analisador sintaacutetico entatildeo executa o algoritmo

59 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

[PSEUDO] seja a o primeiro siacutembolo de w$ while (1) Seja s o estado no topo da pilha if (ACTION[s a] = shift t) empilha t na pilha seja a o proacuteximo siacutembolo da entrada else if (ACTION[s a] = reduce Ararr β) desempilha siacutembolos |β| da pilha faccedila o estado t agora ser o topo da pilha empilhe GOTO[t A] na pilha imprima a produccedilatildeo Ararr β else if (ACTION[s a] = accept) pare a anaacutelise terminou

else chame uma rotina de recuperaccedilatildeo de erros

60 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR ndash Exemplo

A tabela do proacuteximo slide monstra as funccedilotildees ACTION e GOTO de uma tabela de anaacutelise LR para a gramaacutetica de expressatildeo estudada nesta aula e repetida aqui com produccedilotildees numeradas

Os coacutedigos para as accedilotildees satildeo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

(1) E rarr E + T

(2) E rarr T

(3) T rarr T F

(4) T rarr F

(5) F rarr ( E )

(6) F rarr id

1 Si significa avanccedila na entrada e empilha o estado i na pilha

2 Rj significa reduce segundo a produccedilatildeo de nuacutemero j

3 Acc significa accept

4 Entrada em branco significa error

61 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Estado ACTION

id + ( ) $

0 s5 s4

1 S6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4

5 r6 r6 r6 r6

6 s5 s4

7 s5 s4

8 r6 s11

9 s1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

GOTO

E T F

1 2 3

8 2 3

9 3

10

O valor de GOTO(s a) para o

terminal a estaacute em ACTION da

tabela de anaacutelise conectado agrave

accedilatildeo de transferecircncia sob a

entrada a e o estado s

O GOTO fornece o GOTO[s a]

para os natildeo-terminais A

Ok

Mas como eu consigo os dados

desta tabela

62 Geovane Griesang

A sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

FOLLOW(E) = FOLLOW(Ersquo) = ) $

FOLLOW(T) = FOLLOW(Trsquo) = + ) $

FOLLOW(F) = + ) $

63 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Construindo tabelas de anaacutelise SLR

Esse meacutetodo eacute o mais simples dos LRs Vamos nos referir a tabela de anaacutelise construiacuteda por este meacutetodo como uma tabela SLR e o analisador LR usando uma tabela SLR como um analisador sintaacutetico SLR

O meacutetodo SLR comeccedila com os itens LR(0) e autocircmatos LR(0) ou seja dada uma gramaacutetica G estendemos G para produzir Grsquo com o novo siacutembolo inicial Srsquo A partir de Grsquo construiacutemos C a coleccedilatildeo canocircnica de conj de itens para Grsquo junto com a funccedilatildeo GOTO

Para construir as entradas ACTION e GOTO da tabela de anaacutelise usando o algoritmo a seguir eacute preciso que conheccedilamos FOLLOW(A) para cada natildeo-terminal A de uma gramaacutetica

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 16: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

16 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Itens e o autocircmato LR

Um item indica quanto de uma produccedilatildeo jaacute foi visto em determinado ponto no processo de reconhecimento sintaacutetico Ex

O item ArarrXYZ indica o iniacutecio da busca de uma cadeia derivaacutevel de XYZ na entrada

O item A rarr XYZ indica que no ponto atual onde se encontra a anaacutelise uma cadeia X jaacute foi encontrada e que esperamos em seguida ver uma cadeia derivaacutevel de YZ

O item A rarr XYZ indica o fim da busca ou seja jaacute derivamos o lado direito XYZ de A e que pode ser o momento de reduzir XYZ para A

A rarr XYZ

A rarr XYZ

A rarr XYZ

A rarr XYZ

17 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Itens e o autocircmato LR

Uma coleccedilatildeo de conj de itens LR(0) chamada coleccedilatildeo LR(0) canocircnica oferece a base para construccedilatildeo de um autocircmato finito determinista que eacute usado para dirigir as decisotildees durante a anaacutelise

Esse autocircmato eacute chamado de autocircmato LR(0)

Em particular cada estado do autocircmato LR(0) representa um conjunto de itens na coleccedilatildeo LR(0) canocircnica

18 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Exemplo Para construir a coleccedilatildeo LR(0) canocircnica para uma gramaacutetica definimos uma gramaacutetica estendida e duas funccedilotildees

funccedilatildeo de fechamento (function CLOSURE)

funccedilatildeo de transiccedilatildeo (function GOTO)

Se G eacute uma gramaacutetica com siacutembolo inicial S entatildeo Grsquo eacute uma gramaacutetica estendida para G com o novo siacutembolo inicial Srsquo e a produccedilatildeo Srsquo rarr S

O objetivo dessa nova produccedilatildeo eacute simplificar a identificaccedilatildeo de quando o reconhecedor sintaacutetico deve parar e anunciar a aceitaccedilatildeo da cadeia de entrada

Ou seja a aceitaccedilatildeo ocorre se e somente se o analisador estiver para reduzir por Srsquo rarr S

19 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Se I eacute um conj de itens para a gramaacutetica G entatildeo CLOSURE(I) eacute o conj de itens construiacutedos a partir de I pelas duas regras

1 Inicialmente acrescente todo item de I no CLOSURE(I)

2 Se A rarr αBβ estaacute em CLOSEURE(I) e B rarr γ eacute uma produccedilatildeo entatildeo adicione o item B rarr γ em CLOSURE(I) se ele ainda natildeo estaacute laacute

Ix

A rarr αBβ

B rarr γ

20 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Intuitivamente A rarr αBβ em CLOSURE(I) indica que em algum ponto no processo de reconhecimento os itens correspondentes as produccedilotildees-B devem ser acrescentados para dirigir a busca por B

A subcadeia derivaacutevel de Bβ na entrada teraacute um prefixo derivaacutevel de B aplicando umas das produccedilotildees-B

Portanto incluiacutemos itens para todas as produccedilotildees-B ou seja se B rarr γ eacute uma produccedilatildeo tambeacutem incluiacutemos B rarr γ em CLOSURE(I) este processo eacute conhecido como fechamento de estado

Ix

A rarr αBβ

B rarr γ

21 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

P ver como o fechamento de um estado eacute computado Ersquo rarr E eacute colocado em CLOSURE(I) pela regra (1)

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Acrescente todo item de I no CLOSURE(I)

I0

Ersquo rarr E

22 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Como existe um natildeo-terminal E agrave direita de um ponto acrescentamos as produccedilotildees-E com pontos mais agrave esquerda do lado direito dos itens ex

E rarr E + T e E rarr T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

23 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Agora existe um natildeo-terminal T imediatamente agrave direita de um ponto no segundo item incluiacutedo (E rarr T) de modo que acrescentamos as produccedilotildees-T T rarr T F e T rarr F

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

24 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Em seguida o natildeo-terminal F agrave direita de um ponto nos forccedila a incluir os itens Frarr (E) e F rarr id mas nenhum outro item precisa ser acrescentado

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr (E)

F rarr id

25 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Um modo conveniente de implementar a funccedilatildeo de fechamento (closure) eacute manter um arranjo booleano added indexado pelos natildeo-terminais de G de modo que added[B] seja definido como verdadeiro (true) se e quando incluirmos o item B rarr γ para cada produccedilatildeo-B B rarr γ

SetOfItems CLOSURE(I)

J=I

repeat

for (cada item A rarr αBβ em J)

for (cada produccedilatildeo B rarr γ de G)

if (B rarr γ natildeo estaacute em J)

Adicione B rarr γ em J

until mais nenhum item seja adicionado a J em um passo do loop

return J

Ix

A rarr αBβ

B rarr γ

26 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Observe que se uma produccedilatildeo-B for incluiacuteda no fechamento de I com o ponto mais agrave esquerda do seu lado direito entatildeo todas as produccedilotildees-B seratildeo igualmente incluiacutedas no fechamento Ex A rarr αBβ

Uma lista de natildeo-terminais B cujas produccedilotildees foram incluiacutedas dessa forma eacute suficiente Dividimos todos os conjuntos de itens de interesse em duas classes

1 Itens de base (kernel) o item inicial Srsquo rarr S e todos itens cujos pontos natildeo estatildeo mais agrave esquerda em seus lados direitos

2 Itens que natildeo satildeo de base todos os itens com seus pontos mais agrave esquerda em seus lados direitos exceto Srsquo rarr S Ex B rarr γ

Ix

A rarr αBβ

B rarr γ

27 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Aleacutem do mais cada conjunto de itens de interesse eacute formado a partir do fechamento de um conjunto de itens de base

Os itens adicionados no fechamento nunca podem ser itens de base naturalmente

Assim podemos representar os conjuntos de itens em que realmente estamos interessados com pouca memoacuteria se desprezarmos todos que natildeo satildeo itens de base sabendo que esses podem ser gerados novamente no processo de fechamento Ex B rarr γ exceto Srsquo rarr S

Ix

A rarr αBβ

B rarr γ

28 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

A segunda funccedilatildeo usada na construccedilatildeo da coleccedilatildeo canocircnica LR(0) eacute a funccedilatildeo de transiccedilatildeo GOTO(I X) onde I eacute o conjunto de itens de base e X eacute um siacutembolo da gramaacutetica

GOTO(I X) eacute definido como fechamento do conjunto de todos os itens [ArarrαXβ] tais que

[A rarr αXβ] estaacute em I

A funccedilatildeo de transiccedilatildeo GOTO eacute utilizada para definir as transaccedilotildees no autocircmato LR(0) para uma gramaacutetica

I1

Ersquo rarr E

E rarr E + T

I0

Ersquo rarr E

E rarr E + T

E

29 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Estados do autocircmato correspondem aos conjuntos de itens e GOTO(I +) especifica a transaccedilatildeo do estado I para um novo estado I sob a entrada X

Se I representa o conjunto com dois itens [Ersquo rarr E][E rarr E+T] entatildeo GOTO(I +) conteacutem os itens

Calculamos GOTO(I +) examinando os itens em I com o + imediatamente agrave direita do ponto

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

A rarr αXβ

A rarr αXβ

I1

Ersquo rarr E

E rarr E + T +

I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

30 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Calculamos GOTO(I +) examinando os itens em I com o + imediatamente agrave direita do ponto

O item Ersquo rarr E natildeo eacute desse tipo mas Ersquo rarr E + T sim

Movemos o ponto para imediatamente agrave direita de + e obtemos ErarrE + T

e entatildeo calculamos o fechamento desse conjunto unitaacuterio

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Itens em I

[Ersquo rarr E]

[E rarr E+T]

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I1

Ersquo rarr E

E rarr E + T +

31 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Agora estamos prontos para construir C a coleccedilatildeo canocircnica de conjuntos

de itens LR(0) para uma gramaacutetica estendida Grsquo

void Itens(Grsquo)

C = CLOSURE([Srsquo rarr S])

repeat

for (cada conjunto de itens I em C)

for (cada siacutembolo da gramaacutetica X)

if (GOTO(I X) natildeo eacute vazio e natildeo estaacute em C)

Adicione GOTO(I X) em C

until nenhum novo conjunto de itens seja adicionado em C em uma rodada

32 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

A ideia central por traacutes da anaacutelise ldquoLR Simplesrdquo ou SLR eacute a construccedilatildeo do autocircmato LR(0) a partir da gramaacutetica dada

Os estados desses autocircmatos satildeo os conjuntos de itens da coleccedilatildeo LR canocircnica e as transiccedilotildees satildeo dadas pela funccedilatildeo de transiccedilatildeo GOTO

O estado inicial do autocircmato LR eacute dado por CLOSURE([Srsquo rarr S]) onde Srsquo eacute o siacutembolo inicial da gramaacutetica estendida

Todos os estados satildeo estados de aceitaccedilatildeo Nos referimos ao ldquoestado jrdquo como o estado correspondente ao conjunto de itens Ij

33 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E

Aceitar $

I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

34 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Como os autocircmatos LR(0) podem ajudar-nos a decidir por uma das accedilotildees shift-reduce (veja as decisotildees entre shift-reduce a seguir)

Suponha que a cadeia γ dos siacutembolos da gramaacutetica leve o autocircmato LR(0) do estado inicial 0 para algum estado j

Desta forma avance sobre o proacuteximo siacutembolo a se o estado j possuir uma transaccedilatildeo sob a

Caso contraacuterio escolha reduzir

Os itens no estado j nos diratildeo qual produccedilatildeo usar

35 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

O algoritmo LR abaixo utiliza sua pilha para acompanhar os estados e tambeacutem os siacutembolos da gramaacutetica

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Na verdade

O siacutembolo da gramaacutetica pode ser

recuperado a parir do estado de

modo que a pilha possua estados

ao inveacutes de siacutembolos

36 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Usamos uma pilha

p conter os estados

Os siacutembolos que correspondem aos estados estatildeo na coluna ldquoSiacutembolosrdquo

A pilha da linha (1) tecircm o estado inicial 0 do autocircmato

37 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Portanto fazemos a transferecircncia

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

O siacutembolo da linha 1 eacute o marcador de fundo da pilha $

O proacuteximo siacutembolo de entrada eacute id e o estado 0 tem uma transiccedilatildeo sob id p o estado 5

38 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

A partir do item [F rarr id ] no estado 5 efetuamos uma reduccedilatildeo segundo a produccedilatildeo F rarr id

Na linha 2 o estado 5 eacute empilhado (siacutembolo id)

I5

F rarr id

Natildeo haacute transiccedilatildeo a partir do estado 5 sob a entrada por isso reduzimos

39 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o lado direito da produccedilatildeo da linha (2) eacute id correspondendo ao estado 5 e seu lado direito eacute o F

Com os estados ao desempilhar o estado 5 correspondendo ao siacutembolo id o estado 0 passa a ser o topo

0 F $

40 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id I3

T rarr F

F

Procuramos uma transiccedilatildeo sob F o lado esquerdo da produccedilatildeo

0 F $

O estado 0 possui uma transiccedilatildeo em F p o estado 3 onde empilhamos o estado 3 com o siacutembolo F Ver linha (3)

3

41 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I3

T rarr F

Natildeo haacute transiccedilatildeo a partir do estado 3 sob a entrada por isso reduzimos

A partir do item [T rarr F ] no estado 3 efetuamos uma reduccedilatildeo segundo a produccedilatildeo T rarr F

3

0

T $

42 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

I7

T rarr T F

F rarr ( E )

F rarr id

id

Como outro exemplo considere a linha (5) com o estado 7 referente ao siacutembolo no topo da pilha

Esse estado 7 possui uma transaccedilatildeo para o estado 5 sob a entrada id de modo que empilhamos o estado 5

43 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o estado 5 natildeo possui transiccedilotildees de modo que reduzimos segundo F rarr id

quando removemos da pilha o estado 5 correspondente ao lado direito id o estado 7 passa a ser o topo da pilha

44 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Como o estado 7 possui uma transaccedilatildeo sob F para o estado 10 empilhamos o estado 10 (siacutembolo F)

I7

T rarr T F

F rarr ( E )

F rarr id

I10

T rarr T F

F

45 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O algoritmo eacute o mesmo para todos

os analisadores sintaacuteticos LR

Soacute a tabela de anaacutelise eacute diferente

de um analisador para o outro

O algoritmo lecirc caracteres de um

buffer de entrada um de cada vez

46 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O analisador sintaacutetico shift-reduce

transfere um siacutembolo para pilha jaacute

o analisador sintaacutetico LR transfere

um estado

Cada estado resume a informaccedilatildeo

contida na pilha abaixo dele

47 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

A pilha conteacutem uma sequencia de

estados s0s1 sm onde sm estaacute

no topo

No meacutetodo SLR a pilha conteacutem

estados do autocircmato LR(0)

Por construccedilatildeo a cada estado eacute

associado 1 siacutembolo da gramaacutetica

48 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Lembrem-se de que os estados

correspondem a conj de itens e

que haacute uma transiccedilatildeo do estado i

para o estado j se GOTO(Ii X) = Ij

Todas as transiccedilotildees para o estado

j devem ser para o mesmo siacutembolo

da gramaacutetica X

49 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

Sm

Sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Desta forma cada estado exceto

o estado inicial 0 possui um uacutenico

siacutembolo da gramaacutetica associado a

ele

50 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

A tabela LR consiste em duas partes ACTION uma funccedilatildeo de accedilatildeo de anaacutelise e GOTO uma funccedilatildeo de transiccedilatildeo

1 A funccedilatildeo ACTION recebe como argumentos um estado i e um estado a (ou $) O valor de ACTION(i a) pode ter um dos quatro formatos

a) Shift j onde j eacute um estado

A accedilatildeo tomada pelo analisador sintaacutetico efetivamente transfere a entrada a para a pilha mas usa o estado j para representar a

51 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

b) Reduce Ararr β A accedilatildeo do analisador efetivamente reduz β no topo da pilha para A o lado esquerdo da produccedilatildeo

c) Accept O analisador aceita a entrada e termina a anaacutelise

d) Error O analisador descobre um erro em sua entrada passa o controle p o recuperador de erro que toma alguma accedilatildeo corretiva

2 Estendemos a funccedilatildeo GOTO definida sobre um conjunto de itens para os estados se GOTO(Ii A) = Ij entatildeo GOTO tambeacutem mapeia um estado i e um natildeo-terminal A para o estado j

52 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

Para descrever o comportamento de uma analisador LR eacute recomendaacutevel ter uma notaccedilatildeo representado o estado completo do analisador sua pilha e a entrada restante

Uma configuraccedilatildeo p um analisador LR eacute um par (s0s1sm aiai+1an $) O primeiro componente eacute o conteuacutedo da pilha com o topo agrave direita e o segundo componente representa a entrada restante

Essa configuraccedilatildeo representa a seguinte forma sentencial agrave direita (X0X1Xmaiai+1an) Assim como faria um analisador shift-reduce

53 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

A uacutenica diferenccedila eacute que em inveacutes de siacutembolos da gramaacutetica a pilha conteacutem estados a partir dos quais os siacutembolos da gramaacutetica podem ser recuperados

Ou seja Xi eacute o siacutembolo da gramaacutetica representado pelo estado si

Observe que s0 o estado inicial do analisador sintaacutetico natildeo representa um siacutembolo da gramaacutetica e serve como marcador de fundo da pilha aleacutem de desempenhar um papel importante na anaacutelise

54 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

O proacuteximo movimento do analisador a partir da configuraccedilatildeo dada eacute determinado pela leitura de ai o siacutembolo de entrada corrente e sm o estado do topo da pilha e entatildeo consultando a entrada ACTION[sm ai] na tabela de accedilatildeo de anaacutelise

As configuraccedilotildees restantes apoacutes cada um dos quatro tipos de movimentaccedilatildeo satildeo as seguintes

1 Se ACTION[Sm ai] = shift s o analisador sintaacutetico executa um movimento de transferecircncia (shift move) ele empilha o estado s e avanccedila da entrada resultando na configuraccedilatildeo (s0s1 sm ai+1an $)

55 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2 Se ACTION[Sm ai]=reduce Ararrβ entatildeo o analisador sintaacutetico executa um movimento de reduzir (reduce move) resultando na configuraccedilatildeo (s0s1 sm-rs aiai+1an $)

onde r eacute o comprimento de β e s = GOTO[sm-r A]

Aqui o analisador sintaacutetico incialmente desempilhou os r siacutembolos de estado da pilha expondo o estado sm-r

O analisador sintaacutetico entatildeo empilhou s a entrada para GOTO[sm-r A] na pilha O siacutembolo corrente da entrada natildeo eacute alterado em um movimento de reduzir

56 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2

Para os LR que construiremos Xm-r+1Xm a sequencia de siacutembolos da gramaacutetica correspondendo aos estados retirados da pilha sempre iratildeo casar com β o lado direito da produccedilatildeo sendo reduzida

A saiacuteda de um analisador LR eacute gerada apoacutes um movimento de reduzir executando a accedilatildeo semacircntica associada agrave produccedilatildeo que estaacute sendo reduzida

No momento vamos considerar que a saiacuteda consiste soacute na impressatildeo da produccedilatildeo de reduccedilatildeo

57 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

3 Se ACTION[sm ai] = accept a anaacutelise estaacute concluiacuteda

4 Se ACTION[sm ai] = error o analisador sintaacutetico descobriu um erro e ativa uma rotina para recuperaccedilatildeo de erro

Todos os analisadores sintaacuteticos LR se comportam dessa maneira

A uacutenica diferenccedila entre eles diz respeito a informaccedilatildeo contida nos campos ACTION e GOTO da tabela de anaacutelise

O algoritmo de anaacutelise LR eacute resumido nos proacuteximos slides

58 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

Entrada Uma cadeia de entrada w e uma tabela de anaacutelise com funccedilotildees ACTION e GOTO para uma gramaacutetica G

Saiacuteda Se w estaacute em L(G) os passos os passos de uma reduccedilatildeo de uma anaacutelise ascendente para w

Caso contraacuterio uma indicaccedilatildeo de erro

Meacutetodo Inicialmente o analisador sintaacutetico possui w$ no buffer de entrada e s0 em sua pilha onde s0 representa o estado inicial

O analisador sintaacutetico entatildeo executa o algoritmo

59 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

[PSEUDO] seja a o primeiro siacutembolo de w$ while (1) Seja s o estado no topo da pilha if (ACTION[s a] = shift t) empilha t na pilha seja a o proacuteximo siacutembolo da entrada else if (ACTION[s a] = reduce Ararr β) desempilha siacutembolos |β| da pilha faccedila o estado t agora ser o topo da pilha empilhe GOTO[t A] na pilha imprima a produccedilatildeo Ararr β else if (ACTION[s a] = accept) pare a anaacutelise terminou

else chame uma rotina de recuperaccedilatildeo de erros

60 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR ndash Exemplo

A tabela do proacuteximo slide monstra as funccedilotildees ACTION e GOTO de uma tabela de anaacutelise LR para a gramaacutetica de expressatildeo estudada nesta aula e repetida aqui com produccedilotildees numeradas

Os coacutedigos para as accedilotildees satildeo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

(1) E rarr E + T

(2) E rarr T

(3) T rarr T F

(4) T rarr F

(5) F rarr ( E )

(6) F rarr id

1 Si significa avanccedila na entrada e empilha o estado i na pilha

2 Rj significa reduce segundo a produccedilatildeo de nuacutemero j

3 Acc significa accept

4 Entrada em branco significa error

61 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Estado ACTION

id + ( ) $

0 s5 s4

1 S6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4

5 r6 r6 r6 r6

6 s5 s4

7 s5 s4

8 r6 s11

9 s1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

GOTO

E T F

1 2 3

8 2 3

9 3

10

O valor de GOTO(s a) para o

terminal a estaacute em ACTION da

tabela de anaacutelise conectado agrave

accedilatildeo de transferecircncia sob a

entrada a e o estado s

O GOTO fornece o GOTO[s a]

para os natildeo-terminais A

Ok

Mas como eu consigo os dados

desta tabela

62 Geovane Griesang

A sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

FOLLOW(E) = FOLLOW(Ersquo) = ) $

FOLLOW(T) = FOLLOW(Trsquo) = + ) $

FOLLOW(F) = + ) $

63 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Construindo tabelas de anaacutelise SLR

Esse meacutetodo eacute o mais simples dos LRs Vamos nos referir a tabela de anaacutelise construiacuteda por este meacutetodo como uma tabela SLR e o analisador LR usando uma tabela SLR como um analisador sintaacutetico SLR

O meacutetodo SLR comeccedila com os itens LR(0) e autocircmatos LR(0) ou seja dada uma gramaacutetica G estendemos G para produzir Grsquo com o novo siacutembolo inicial Srsquo A partir de Grsquo construiacutemos C a coleccedilatildeo canocircnica de conj de itens para Grsquo junto com a funccedilatildeo GOTO

Para construir as entradas ACTION e GOTO da tabela de anaacutelise usando o algoritmo a seguir eacute preciso que conheccedilamos FOLLOW(A) para cada natildeo-terminal A de uma gramaacutetica

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 17: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

17 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Itens e o autocircmato LR

Uma coleccedilatildeo de conj de itens LR(0) chamada coleccedilatildeo LR(0) canocircnica oferece a base para construccedilatildeo de um autocircmato finito determinista que eacute usado para dirigir as decisotildees durante a anaacutelise

Esse autocircmato eacute chamado de autocircmato LR(0)

Em particular cada estado do autocircmato LR(0) representa um conjunto de itens na coleccedilatildeo LR(0) canocircnica

18 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Exemplo Para construir a coleccedilatildeo LR(0) canocircnica para uma gramaacutetica definimos uma gramaacutetica estendida e duas funccedilotildees

funccedilatildeo de fechamento (function CLOSURE)

funccedilatildeo de transiccedilatildeo (function GOTO)

Se G eacute uma gramaacutetica com siacutembolo inicial S entatildeo Grsquo eacute uma gramaacutetica estendida para G com o novo siacutembolo inicial Srsquo e a produccedilatildeo Srsquo rarr S

O objetivo dessa nova produccedilatildeo eacute simplificar a identificaccedilatildeo de quando o reconhecedor sintaacutetico deve parar e anunciar a aceitaccedilatildeo da cadeia de entrada

Ou seja a aceitaccedilatildeo ocorre se e somente se o analisador estiver para reduzir por Srsquo rarr S

19 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Se I eacute um conj de itens para a gramaacutetica G entatildeo CLOSURE(I) eacute o conj de itens construiacutedos a partir de I pelas duas regras

1 Inicialmente acrescente todo item de I no CLOSURE(I)

2 Se A rarr αBβ estaacute em CLOSEURE(I) e B rarr γ eacute uma produccedilatildeo entatildeo adicione o item B rarr γ em CLOSURE(I) se ele ainda natildeo estaacute laacute

Ix

A rarr αBβ

B rarr γ

20 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Intuitivamente A rarr αBβ em CLOSURE(I) indica que em algum ponto no processo de reconhecimento os itens correspondentes as produccedilotildees-B devem ser acrescentados para dirigir a busca por B

A subcadeia derivaacutevel de Bβ na entrada teraacute um prefixo derivaacutevel de B aplicando umas das produccedilotildees-B

Portanto incluiacutemos itens para todas as produccedilotildees-B ou seja se B rarr γ eacute uma produccedilatildeo tambeacutem incluiacutemos B rarr γ em CLOSURE(I) este processo eacute conhecido como fechamento de estado

Ix

A rarr αBβ

B rarr γ

21 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

P ver como o fechamento de um estado eacute computado Ersquo rarr E eacute colocado em CLOSURE(I) pela regra (1)

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Acrescente todo item de I no CLOSURE(I)

I0

Ersquo rarr E

22 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Como existe um natildeo-terminal E agrave direita de um ponto acrescentamos as produccedilotildees-E com pontos mais agrave esquerda do lado direito dos itens ex

E rarr E + T e E rarr T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

23 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Agora existe um natildeo-terminal T imediatamente agrave direita de um ponto no segundo item incluiacutedo (E rarr T) de modo que acrescentamos as produccedilotildees-T T rarr T F e T rarr F

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

24 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Em seguida o natildeo-terminal F agrave direita de um ponto nos forccedila a incluir os itens Frarr (E) e F rarr id mas nenhum outro item precisa ser acrescentado

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr (E)

F rarr id

25 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Um modo conveniente de implementar a funccedilatildeo de fechamento (closure) eacute manter um arranjo booleano added indexado pelos natildeo-terminais de G de modo que added[B] seja definido como verdadeiro (true) se e quando incluirmos o item B rarr γ para cada produccedilatildeo-B B rarr γ

SetOfItems CLOSURE(I)

J=I

repeat

for (cada item A rarr αBβ em J)

for (cada produccedilatildeo B rarr γ de G)

if (B rarr γ natildeo estaacute em J)

Adicione B rarr γ em J

until mais nenhum item seja adicionado a J em um passo do loop

return J

Ix

A rarr αBβ

B rarr γ

26 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Observe que se uma produccedilatildeo-B for incluiacuteda no fechamento de I com o ponto mais agrave esquerda do seu lado direito entatildeo todas as produccedilotildees-B seratildeo igualmente incluiacutedas no fechamento Ex A rarr αBβ

Uma lista de natildeo-terminais B cujas produccedilotildees foram incluiacutedas dessa forma eacute suficiente Dividimos todos os conjuntos de itens de interesse em duas classes

1 Itens de base (kernel) o item inicial Srsquo rarr S e todos itens cujos pontos natildeo estatildeo mais agrave esquerda em seus lados direitos

2 Itens que natildeo satildeo de base todos os itens com seus pontos mais agrave esquerda em seus lados direitos exceto Srsquo rarr S Ex B rarr γ

Ix

A rarr αBβ

B rarr γ

27 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Aleacutem do mais cada conjunto de itens de interesse eacute formado a partir do fechamento de um conjunto de itens de base

Os itens adicionados no fechamento nunca podem ser itens de base naturalmente

Assim podemos representar os conjuntos de itens em que realmente estamos interessados com pouca memoacuteria se desprezarmos todos que natildeo satildeo itens de base sabendo que esses podem ser gerados novamente no processo de fechamento Ex B rarr γ exceto Srsquo rarr S

Ix

A rarr αBβ

B rarr γ

28 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

A segunda funccedilatildeo usada na construccedilatildeo da coleccedilatildeo canocircnica LR(0) eacute a funccedilatildeo de transiccedilatildeo GOTO(I X) onde I eacute o conjunto de itens de base e X eacute um siacutembolo da gramaacutetica

GOTO(I X) eacute definido como fechamento do conjunto de todos os itens [ArarrαXβ] tais que

[A rarr αXβ] estaacute em I

A funccedilatildeo de transiccedilatildeo GOTO eacute utilizada para definir as transaccedilotildees no autocircmato LR(0) para uma gramaacutetica

I1

Ersquo rarr E

E rarr E + T

I0

Ersquo rarr E

E rarr E + T

E

29 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Estados do autocircmato correspondem aos conjuntos de itens e GOTO(I +) especifica a transaccedilatildeo do estado I para um novo estado I sob a entrada X

Se I representa o conjunto com dois itens [Ersquo rarr E][E rarr E+T] entatildeo GOTO(I +) conteacutem os itens

Calculamos GOTO(I +) examinando os itens em I com o + imediatamente agrave direita do ponto

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

A rarr αXβ

A rarr αXβ

I1

Ersquo rarr E

E rarr E + T +

I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

30 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Calculamos GOTO(I +) examinando os itens em I com o + imediatamente agrave direita do ponto

O item Ersquo rarr E natildeo eacute desse tipo mas Ersquo rarr E + T sim

Movemos o ponto para imediatamente agrave direita de + e obtemos ErarrE + T

e entatildeo calculamos o fechamento desse conjunto unitaacuterio

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Itens em I

[Ersquo rarr E]

[E rarr E+T]

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I1

Ersquo rarr E

E rarr E + T +

31 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Agora estamos prontos para construir C a coleccedilatildeo canocircnica de conjuntos

de itens LR(0) para uma gramaacutetica estendida Grsquo

void Itens(Grsquo)

C = CLOSURE([Srsquo rarr S])

repeat

for (cada conjunto de itens I em C)

for (cada siacutembolo da gramaacutetica X)

if (GOTO(I X) natildeo eacute vazio e natildeo estaacute em C)

Adicione GOTO(I X) em C

until nenhum novo conjunto de itens seja adicionado em C em uma rodada

32 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

A ideia central por traacutes da anaacutelise ldquoLR Simplesrdquo ou SLR eacute a construccedilatildeo do autocircmato LR(0) a partir da gramaacutetica dada

Os estados desses autocircmatos satildeo os conjuntos de itens da coleccedilatildeo LR canocircnica e as transiccedilotildees satildeo dadas pela funccedilatildeo de transiccedilatildeo GOTO

O estado inicial do autocircmato LR eacute dado por CLOSURE([Srsquo rarr S]) onde Srsquo eacute o siacutembolo inicial da gramaacutetica estendida

Todos os estados satildeo estados de aceitaccedilatildeo Nos referimos ao ldquoestado jrdquo como o estado correspondente ao conjunto de itens Ij

33 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E

Aceitar $

I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

34 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Como os autocircmatos LR(0) podem ajudar-nos a decidir por uma das accedilotildees shift-reduce (veja as decisotildees entre shift-reduce a seguir)

Suponha que a cadeia γ dos siacutembolos da gramaacutetica leve o autocircmato LR(0) do estado inicial 0 para algum estado j

Desta forma avance sobre o proacuteximo siacutembolo a se o estado j possuir uma transaccedilatildeo sob a

Caso contraacuterio escolha reduzir

Os itens no estado j nos diratildeo qual produccedilatildeo usar

35 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

O algoritmo LR abaixo utiliza sua pilha para acompanhar os estados e tambeacutem os siacutembolos da gramaacutetica

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Na verdade

O siacutembolo da gramaacutetica pode ser

recuperado a parir do estado de

modo que a pilha possua estados

ao inveacutes de siacutembolos

36 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Usamos uma pilha

p conter os estados

Os siacutembolos que correspondem aos estados estatildeo na coluna ldquoSiacutembolosrdquo

A pilha da linha (1) tecircm o estado inicial 0 do autocircmato

37 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Portanto fazemos a transferecircncia

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

O siacutembolo da linha 1 eacute o marcador de fundo da pilha $

O proacuteximo siacutembolo de entrada eacute id e o estado 0 tem uma transiccedilatildeo sob id p o estado 5

38 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

A partir do item [F rarr id ] no estado 5 efetuamos uma reduccedilatildeo segundo a produccedilatildeo F rarr id

Na linha 2 o estado 5 eacute empilhado (siacutembolo id)

I5

F rarr id

Natildeo haacute transiccedilatildeo a partir do estado 5 sob a entrada por isso reduzimos

39 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o lado direito da produccedilatildeo da linha (2) eacute id correspondendo ao estado 5 e seu lado direito eacute o F

Com os estados ao desempilhar o estado 5 correspondendo ao siacutembolo id o estado 0 passa a ser o topo

0 F $

40 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id I3

T rarr F

F

Procuramos uma transiccedilatildeo sob F o lado esquerdo da produccedilatildeo

0 F $

O estado 0 possui uma transiccedilatildeo em F p o estado 3 onde empilhamos o estado 3 com o siacutembolo F Ver linha (3)

3

41 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I3

T rarr F

Natildeo haacute transiccedilatildeo a partir do estado 3 sob a entrada por isso reduzimos

A partir do item [T rarr F ] no estado 3 efetuamos uma reduccedilatildeo segundo a produccedilatildeo T rarr F

3

0

T $

42 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

I7

T rarr T F

F rarr ( E )

F rarr id

id

Como outro exemplo considere a linha (5) com o estado 7 referente ao siacutembolo no topo da pilha

Esse estado 7 possui uma transaccedilatildeo para o estado 5 sob a entrada id de modo que empilhamos o estado 5

43 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o estado 5 natildeo possui transiccedilotildees de modo que reduzimos segundo F rarr id

quando removemos da pilha o estado 5 correspondente ao lado direito id o estado 7 passa a ser o topo da pilha

44 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Como o estado 7 possui uma transaccedilatildeo sob F para o estado 10 empilhamos o estado 10 (siacutembolo F)

I7

T rarr T F

F rarr ( E )

F rarr id

I10

T rarr T F

F

45 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O algoritmo eacute o mesmo para todos

os analisadores sintaacuteticos LR

Soacute a tabela de anaacutelise eacute diferente

de um analisador para o outro

O algoritmo lecirc caracteres de um

buffer de entrada um de cada vez

46 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O analisador sintaacutetico shift-reduce

transfere um siacutembolo para pilha jaacute

o analisador sintaacutetico LR transfere

um estado

Cada estado resume a informaccedilatildeo

contida na pilha abaixo dele

47 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

A pilha conteacutem uma sequencia de

estados s0s1 sm onde sm estaacute

no topo

No meacutetodo SLR a pilha conteacutem

estados do autocircmato LR(0)

Por construccedilatildeo a cada estado eacute

associado 1 siacutembolo da gramaacutetica

48 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Lembrem-se de que os estados

correspondem a conj de itens e

que haacute uma transiccedilatildeo do estado i

para o estado j se GOTO(Ii X) = Ij

Todas as transiccedilotildees para o estado

j devem ser para o mesmo siacutembolo

da gramaacutetica X

49 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

Sm

Sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Desta forma cada estado exceto

o estado inicial 0 possui um uacutenico

siacutembolo da gramaacutetica associado a

ele

50 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

A tabela LR consiste em duas partes ACTION uma funccedilatildeo de accedilatildeo de anaacutelise e GOTO uma funccedilatildeo de transiccedilatildeo

1 A funccedilatildeo ACTION recebe como argumentos um estado i e um estado a (ou $) O valor de ACTION(i a) pode ter um dos quatro formatos

a) Shift j onde j eacute um estado

A accedilatildeo tomada pelo analisador sintaacutetico efetivamente transfere a entrada a para a pilha mas usa o estado j para representar a

51 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

b) Reduce Ararr β A accedilatildeo do analisador efetivamente reduz β no topo da pilha para A o lado esquerdo da produccedilatildeo

c) Accept O analisador aceita a entrada e termina a anaacutelise

d) Error O analisador descobre um erro em sua entrada passa o controle p o recuperador de erro que toma alguma accedilatildeo corretiva

2 Estendemos a funccedilatildeo GOTO definida sobre um conjunto de itens para os estados se GOTO(Ii A) = Ij entatildeo GOTO tambeacutem mapeia um estado i e um natildeo-terminal A para o estado j

52 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

Para descrever o comportamento de uma analisador LR eacute recomendaacutevel ter uma notaccedilatildeo representado o estado completo do analisador sua pilha e a entrada restante

Uma configuraccedilatildeo p um analisador LR eacute um par (s0s1sm aiai+1an $) O primeiro componente eacute o conteuacutedo da pilha com o topo agrave direita e o segundo componente representa a entrada restante

Essa configuraccedilatildeo representa a seguinte forma sentencial agrave direita (X0X1Xmaiai+1an) Assim como faria um analisador shift-reduce

53 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

A uacutenica diferenccedila eacute que em inveacutes de siacutembolos da gramaacutetica a pilha conteacutem estados a partir dos quais os siacutembolos da gramaacutetica podem ser recuperados

Ou seja Xi eacute o siacutembolo da gramaacutetica representado pelo estado si

Observe que s0 o estado inicial do analisador sintaacutetico natildeo representa um siacutembolo da gramaacutetica e serve como marcador de fundo da pilha aleacutem de desempenhar um papel importante na anaacutelise

54 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

O proacuteximo movimento do analisador a partir da configuraccedilatildeo dada eacute determinado pela leitura de ai o siacutembolo de entrada corrente e sm o estado do topo da pilha e entatildeo consultando a entrada ACTION[sm ai] na tabela de accedilatildeo de anaacutelise

As configuraccedilotildees restantes apoacutes cada um dos quatro tipos de movimentaccedilatildeo satildeo as seguintes

1 Se ACTION[Sm ai] = shift s o analisador sintaacutetico executa um movimento de transferecircncia (shift move) ele empilha o estado s e avanccedila da entrada resultando na configuraccedilatildeo (s0s1 sm ai+1an $)

55 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2 Se ACTION[Sm ai]=reduce Ararrβ entatildeo o analisador sintaacutetico executa um movimento de reduzir (reduce move) resultando na configuraccedilatildeo (s0s1 sm-rs aiai+1an $)

onde r eacute o comprimento de β e s = GOTO[sm-r A]

Aqui o analisador sintaacutetico incialmente desempilhou os r siacutembolos de estado da pilha expondo o estado sm-r

O analisador sintaacutetico entatildeo empilhou s a entrada para GOTO[sm-r A] na pilha O siacutembolo corrente da entrada natildeo eacute alterado em um movimento de reduzir

56 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2

Para os LR que construiremos Xm-r+1Xm a sequencia de siacutembolos da gramaacutetica correspondendo aos estados retirados da pilha sempre iratildeo casar com β o lado direito da produccedilatildeo sendo reduzida

A saiacuteda de um analisador LR eacute gerada apoacutes um movimento de reduzir executando a accedilatildeo semacircntica associada agrave produccedilatildeo que estaacute sendo reduzida

No momento vamos considerar que a saiacuteda consiste soacute na impressatildeo da produccedilatildeo de reduccedilatildeo

57 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

3 Se ACTION[sm ai] = accept a anaacutelise estaacute concluiacuteda

4 Se ACTION[sm ai] = error o analisador sintaacutetico descobriu um erro e ativa uma rotina para recuperaccedilatildeo de erro

Todos os analisadores sintaacuteticos LR se comportam dessa maneira

A uacutenica diferenccedila entre eles diz respeito a informaccedilatildeo contida nos campos ACTION e GOTO da tabela de anaacutelise

O algoritmo de anaacutelise LR eacute resumido nos proacuteximos slides

58 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

Entrada Uma cadeia de entrada w e uma tabela de anaacutelise com funccedilotildees ACTION e GOTO para uma gramaacutetica G

Saiacuteda Se w estaacute em L(G) os passos os passos de uma reduccedilatildeo de uma anaacutelise ascendente para w

Caso contraacuterio uma indicaccedilatildeo de erro

Meacutetodo Inicialmente o analisador sintaacutetico possui w$ no buffer de entrada e s0 em sua pilha onde s0 representa o estado inicial

O analisador sintaacutetico entatildeo executa o algoritmo

59 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

[PSEUDO] seja a o primeiro siacutembolo de w$ while (1) Seja s o estado no topo da pilha if (ACTION[s a] = shift t) empilha t na pilha seja a o proacuteximo siacutembolo da entrada else if (ACTION[s a] = reduce Ararr β) desempilha siacutembolos |β| da pilha faccedila o estado t agora ser o topo da pilha empilhe GOTO[t A] na pilha imprima a produccedilatildeo Ararr β else if (ACTION[s a] = accept) pare a anaacutelise terminou

else chame uma rotina de recuperaccedilatildeo de erros

60 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR ndash Exemplo

A tabela do proacuteximo slide monstra as funccedilotildees ACTION e GOTO de uma tabela de anaacutelise LR para a gramaacutetica de expressatildeo estudada nesta aula e repetida aqui com produccedilotildees numeradas

Os coacutedigos para as accedilotildees satildeo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

(1) E rarr E + T

(2) E rarr T

(3) T rarr T F

(4) T rarr F

(5) F rarr ( E )

(6) F rarr id

1 Si significa avanccedila na entrada e empilha o estado i na pilha

2 Rj significa reduce segundo a produccedilatildeo de nuacutemero j

3 Acc significa accept

4 Entrada em branco significa error

61 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Estado ACTION

id + ( ) $

0 s5 s4

1 S6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4

5 r6 r6 r6 r6

6 s5 s4

7 s5 s4

8 r6 s11

9 s1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

GOTO

E T F

1 2 3

8 2 3

9 3

10

O valor de GOTO(s a) para o

terminal a estaacute em ACTION da

tabela de anaacutelise conectado agrave

accedilatildeo de transferecircncia sob a

entrada a e o estado s

O GOTO fornece o GOTO[s a]

para os natildeo-terminais A

Ok

Mas como eu consigo os dados

desta tabela

62 Geovane Griesang

A sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

FOLLOW(E) = FOLLOW(Ersquo) = ) $

FOLLOW(T) = FOLLOW(Trsquo) = + ) $

FOLLOW(F) = + ) $

63 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Construindo tabelas de anaacutelise SLR

Esse meacutetodo eacute o mais simples dos LRs Vamos nos referir a tabela de anaacutelise construiacuteda por este meacutetodo como uma tabela SLR e o analisador LR usando uma tabela SLR como um analisador sintaacutetico SLR

O meacutetodo SLR comeccedila com os itens LR(0) e autocircmatos LR(0) ou seja dada uma gramaacutetica G estendemos G para produzir Grsquo com o novo siacutembolo inicial Srsquo A partir de Grsquo construiacutemos C a coleccedilatildeo canocircnica de conj de itens para Grsquo junto com a funccedilatildeo GOTO

Para construir as entradas ACTION e GOTO da tabela de anaacutelise usando o algoritmo a seguir eacute preciso que conheccedilamos FOLLOW(A) para cada natildeo-terminal A de uma gramaacutetica

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 18: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

18 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Exemplo Para construir a coleccedilatildeo LR(0) canocircnica para uma gramaacutetica definimos uma gramaacutetica estendida e duas funccedilotildees

funccedilatildeo de fechamento (function CLOSURE)

funccedilatildeo de transiccedilatildeo (function GOTO)

Se G eacute uma gramaacutetica com siacutembolo inicial S entatildeo Grsquo eacute uma gramaacutetica estendida para G com o novo siacutembolo inicial Srsquo e a produccedilatildeo Srsquo rarr S

O objetivo dessa nova produccedilatildeo eacute simplificar a identificaccedilatildeo de quando o reconhecedor sintaacutetico deve parar e anunciar a aceitaccedilatildeo da cadeia de entrada

Ou seja a aceitaccedilatildeo ocorre se e somente se o analisador estiver para reduzir por Srsquo rarr S

19 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Se I eacute um conj de itens para a gramaacutetica G entatildeo CLOSURE(I) eacute o conj de itens construiacutedos a partir de I pelas duas regras

1 Inicialmente acrescente todo item de I no CLOSURE(I)

2 Se A rarr αBβ estaacute em CLOSEURE(I) e B rarr γ eacute uma produccedilatildeo entatildeo adicione o item B rarr γ em CLOSURE(I) se ele ainda natildeo estaacute laacute

Ix

A rarr αBβ

B rarr γ

20 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Intuitivamente A rarr αBβ em CLOSURE(I) indica que em algum ponto no processo de reconhecimento os itens correspondentes as produccedilotildees-B devem ser acrescentados para dirigir a busca por B

A subcadeia derivaacutevel de Bβ na entrada teraacute um prefixo derivaacutevel de B aplicando umas das produccedilotildees-B

Portanto incluiacutemos itens para todas as produccedilotildees-B ou seja se B rarr γ eacute uma produccedilatildeo tambeacutem incluiacutemos B rarr γ em CLOSURE(I) este processo eacute conhecido como fechamento de estado

Ix

A rarr αBβ

B rarr γ

21 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

P ver como o fechamento de um estado eacute computado Ersquo rarr E eacute colocado em CLOSURE(I) pela regra (1)

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Acrescente todo item de I no CLOSURE(I)

I0

Ersquo rarr E

22 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Como existe um natildeo-terminal E agrave direita de um ponto acrescentamos as produccedilotildees-E com pontos mais agrave esquerda do lado direito dos itens ex

E rarr E + T e E rarr T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

23 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Agora existe um natildeo-terminal T imediatamente agrave direita de um ponto no segundo item incluiacutedo (E rarr T) de modo que acrescentamos as produccedilotildees-T T rarr T F e T rarr F

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

24 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Em seguida o natildeo-terminal F agrave direita de um ponto nos forccedila a incluir os itens Frarr (E) e F rarr id mas nenhum outro item precisa ser acrescentado

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr (E)

F rarr id

25 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Um modo conveniente de implementar a funccedilatildeo de fechamento (closure) eacute manter um arranjo booleano added indexado pelos natildeo-terminais de G de modo que added[B] seja definido como verdadeiro (true) se e quando incluirmos o item B rarr γ para cada produccedilatildeo-B B rarr γ

SetOfItems CLOSURE(I)

J=I

repeat

for (cada item A rarr αBβ em J)

for (cada produccedilatildeo B rarr γ de G)

if (B rarr γ natildeo estaacute em J)

Adicione B rarr γ em J

until mais nenhum item seja adicionado a J em um passo do loop

return J

Ix

A rarr αBβ

B rarr γ

26 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Observe que se uma produccedilatildeo-B for incluiacuteda no fechamento de I com o ponto mais agrave esquerda do seu lado direito entatildeo todas as produccedilotildees-B seratildeo igualmente incluiacutedas no fechamento Ex A rarr αBβ

Uma lista de natildeo-terminais B cujas produccedilotildees foram incluiacutedas dessa forma eacute suficiente Dividimos todos os conjuntos de itens de interesse em duas classes

1 Itens de base (kernel) o item inicial Srsquo rarr S e todos itens cujos pontos natildeo estatildeo mais agrave esquerda em seus lados direitos

2 Itens que natildeo satildeo de base todos os itens com seus pontos mais agrave esquerda em seus lados direitos exceto Srsquo rarr S Ex B rarr γ

Ix

A rarr αBβ

B rarr γ

27 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Aleacutem do mais cada conjunto de itens de interesse eacute formado a partir do fechamento de um conjunto de itens de base

Os itens adicionados no fechamento nunca podem ser itens de base naturalmente

Assim podemos representar os conjuntos de itens em que realmente estamos interessados com pouca memoacuteria se desprezarmos todos que natildeo satildeo itens de base sabendo que esses podem ser gerados novamente no processo de fechamento Ex B rarr γ exceto Srsquo rarr S

Ix

A rarr αBβ

B rarr γ

28 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

A segunda funccedilatildeo usada na construccedilatildeo da coleccedilatildeo canocircnica LR(0) eacute a funccedilatildeo de transiccedilatildeo GOTO(I X) onde I eacute o conjunto de itens de base e X eacute um siacutembolo da gramaacutetica

GOTO(I X) eacute definido como fechamento do conjunto de todos os itens [ArarrαXβ] tais que

[A rarr αXβ] estaacute em I

A funccedilatildeo de transiccedilatildeo GOTO eacute utilizada para definir as transaccedilotildees no autocircmato LR(0) para uma gramaacutetica

I1

Ersquo rarr E

E rarr E + T

I0

Ersquo rarr E

E rarr E + T

E

29 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Estados do autocircmato correspondem aos conjuntos de itens e GOTO(I +) especifica a transaccedilatildeo do estado I para um novo estado I sob a entrada X

Se I representa o conjunto com dois itens [Ersquo rarr E][E rarr E+T] entatildeo GOTO(I +) conteacutem os itens

Calculamos GOTO(I +) examinando os itens em I com o + imediatamente agrave direita do ponto

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

A rarr αXβ

A rarr αXβ

I1

Ersquo rarr E

E rarr E + T +

I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

30 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Calculamos GOTO(I +) examinando os itens em I com o + imediatamente agrave direita do ponto

O item Ersquo rarr E natildeo eacute desse tipo mas Ersquo rarr E + T sim

Movemos o ponto para imediatamente agrave direita de + e obtemos ErarrE + T

e entatildeo calculamos o fechamento desse conjunto unitaacuterio

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Itens em I

[Ersquo rarr E]

[E rarr E+T]

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I1

Ersquo rarr E

E rarr E + T +

31 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Agora estamos prontos para construir C a coleccedilatildeo canocircnica de conjuntos

de itens LR(0) para uma gramaacutetica estendida Grsquo

void Itens(Grsquo)

C = CLOSURE([Srsquo rarr S])

repeat

for (cada conjunto de itens I em C)

for (cada siacutembolo da gramaacutetica X)

if (GOTO(I X) natildeo eacute vazio e natildeo estaacute em C)

Adicione GOTO(I X) em C

until nenhum novo conjunto de itens seja adicionado em C em uma rodada

32 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

A ideia central por traacutes da anaacutelise ldquoLR Simplesrdquo ou SLR eacute a construccedilatildeo do autocircmato LR(0) a partir da gramaacutetica dada

Os estados desses autocircmatos satildeo os conjuntos de itens da coleccedilatildeo LR canocircnica e as transiccedilotildees satildeo dadas pela funccedilatildeo de transiccedilatildeo GOTO

O estado inicial do autocircmato LR eacute dado por CLOSURE([Srsquo rarr S]) onde Srsquo eacute o siacutembolo inicial da gramaacutetica estendida

Todos os estados satildeo estados de aceitaccedilatildeo Nos referimos ao ldquoestado jrdquo como o estado correspondente ao conjunto de itens Ij

33 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E

Aceitar $

I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

34 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Como os autocircmatos LR(0) podem ajudar-nos a decidir por uma das accedilotildees shift-reduce (veja as decisotildees entre shift-reduce a seguir)

Suponha que a cadeia γ dos siacutembolos da gramaacutetica leve o autocircmato LR(0) do estado inicial 0 para algum estado j

Desta forma avance sobre o proacuteximo siacutembolo a se o estado j possuir uma transaccedilatildeo sob a

Caso contraacuterio escolha reduzir

Os itens no estado j nos diratildeo qual produccedilatildeo usar

35 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

O algoritmo LR abaixo utiliza sua pilha para acompanhar os estados e tambeacutem os siacutembolos da gramaacutetica

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Na verdade

O siacutembolo da gramaacutetica pode ser

recuperado a parir do estado de

modo que a pilha possua estados

ao inveacutes de siacutembolos

36 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Usamos uma pilha

p conter os estados

Os siacutembolos que correspondem aos estados estatildeo na coluna ldquoSiacutembolosrdquo

A pilha da linha (1) tecircm o estado inicial 0 do autocircmato

37 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Portanto fazemos a transferecircncia

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

O siacutembolo da linha 1 eacute o marcador de fundo da pilha $

O proacuteximo siacutembolo de entrada eacute id e o estado 0 tem uma transiccedilatildeo sob id p o estado 5

38 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

A partir do item [F rarr id ] no estado 5 efetuamos uma reduccedilatildeo segundo a produccedilatildeo F rarr id

Na linha 2 o estado 5 eacute empilhado (siacutembolo id)

I5

F rarr id

Natildeo haacute transiccedilatildeo a partir do estado 5 sob a entrada por isso reduzimos

39 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o lado direito da produccedilatildeo da linha (2) eacute id correspondendo ao estado 5 e seu lado direito eacute o F

Com os estados ao desempilhar o estado 5 correspondendo ao siacutembolo id o estado 0 passa a ser o topo

0 F $

40 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id I3

T rarr F

F

Procuramos uma transiccedilatildeo sob F o lado esquerdo da produccedilatildeo

0 F $

O estado 0 possui uma transiccedilatildeo em F p o estado 3 onde empilhamos o estado 3 com o siacutembolo F Ver linha (3)

3

41 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I3

T rarr F

Natildeo haacute transiccedilatildeo a partir do estado 3 sob a entrada por isso reduzimos

A partir do item [T rarr F ] no estado 3 efetuamos uma reduccedilatildeo segundo a produccedilatildeo T rarr F

3

0

T $

42 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

I7

T rarr T F

F rarr ( E )

F rarr id

id

Como outro exemplo considere a linha (5) com o estado 7 referente ao siacutembolo no topo da pilha

Esse estado 7 possui uma transaccedilatildeo para o estado 5 sob a entrada id de modo que empilhamos o estado 5

43 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o estado 5 natildeo possui transiccedilotildees de modo que reduzimos segundo F rarr id

quando removemos da pilha o estado 5 correspondente ao lado direito id o estado 7 passa a ser o topo da pilha

44 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Como o estado 7 possui uma transaccedilatildeo sob F para o estado 10 empilhamos o estado 10 (siacutembolo F)

I7

T rarr T F

F rarr ( E )

F rarr id

I10

T rarr T F

F

45 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O algoritmo eacute o mesmo para todos

os analisadores sintaacuteticos LR

Soacute a tabela de anaacutelise eacute diferente

de um analisador para o outro

O algoritmo lecirc caracteres de um

buffer de entrada um de cada vez

46 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O analisador sintaacutetico shift-reduce

transfere um siacutembolo para pilha jaacute

o analisador sintaacutetico LR transfere

um estado

Cada estado resume a informaccedilatildeo

contida na pilha abaixo dele

47 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

A pilha conteacutem uma sequencia de

estados s0s1 sm onde sm estaacute

no topo

No meacutetodo SLR a pilha conteacutem

estados do autocircmato LR(0)

Por construccedilatildeo a cada estado eacute

associado 1 siacutembolo da gramaacutetica

48 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Lembrem-se de que os estados

correspondem a conj de itens e

que haacute uma transiccedilatildeo do estado i

para o estado j se GOTO(Ii X) = Ij

Todas as transiccedilotildees para o estado

j devem ser para o mesmo siacutembolo

da gramaacutetica X

49 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

Sm

Sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Desta forma cada estado exceto

o estado inicial 0 possui um uacutenico

siacutembolo da gramaacutetica associado a

ele

50 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

A tabela LR consiste em duas partes ACTION uma funccedilatildeo de accedilatildeo de anaacutelise e GOTO uma funccedilatildeo de transiccedilatildeo

1 A funccedilatildeo ACTION recebe como argumentos um estado i e um estado a (ou $) O valor de ACTION(i a) pode ter um dos quatro formatos

a) Shift j onde j eacute um estado

A accedilatildeo tomada pelo analisador sintaacutetico efetivamente transfere a entrada a para a pilha mas usa o estado j para representar a

51 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

b) Reduce Ararr β A accedilatildeo do analisador efetivamente reduz β no topo da pilha para A o lado esquerdo da produccedilatildeo

c) Accept O analisador aceita a entrada e termina a anaacutelise

d) Error O analisador descobre um erro em sua entrada passa o controle p o recuperador de erro que toma alguma accedilatildeo corretiva

2 Estendemos a funccedilatildeo GOTO definida sobre um conjunto de itens para os estados se GOTO(Ii A) = Ij entatildeo GOTO tambeacutem mapeia um estado i e um natildeo-terminal A para o estado j

52 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

Para descrever o comportamento de uma analisador LR eacute recomendaacutevel ter uma notaccedilatildeo representado o estado completo do analisador sua pilha e a entrada restante

Uma configuraccedilatildeo p um analisador LR eacute um par (s0s1sm aiai+1an $) O primeiro componente eacute o conteuacutedo da pilha com o topo agrave direita e o segundo componente representa a entrada restante

Essa configuraccedilatildeo representa a seguinte forma sentencial agrave direita (X0X1Xmaiai+1an) Assim como faria um analisador shift-reduce

53 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

A uacutenica diferenccedila eacute que em inveacutes de siacutembolos da gramaacutetica a pilha conteacutem estados a partir dos quais os siacutembolos da gramaacutetica podem ser recuperados

Ou seja Xi eacute o siacutembolo da gramaacutetica representado pelo estado si

Observe que s0 o estado inicial do analisador sintaacutetico natildeo representa um siacutembolo da gramaacutetica e serve como marcador de fundo da pilha aleacutem de desempenhar um papel importante na anaacutelise

54 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

O proacuteximo movimento do analisador a partir da configuraccedilatildeo dada eacute determinado pela leitura de ai o siacutembolo de entrada corrente e sm o estado do topo da pilha e entatildeo consultando a entrada ACTION[sm ai] na tabela de accedilatildeo de anaacutelise

As configuraccedilotildees restantes apoacutes cada um dos quatro tipos de movimentaccedilatildeo satildeo as seguintes

1 Se ACTION[Sm ai] = shift s o analisador sintaacutetico executa um movimento de transferecircncia (shift move) ele empilha o estado s e avanccedila da entrada resultando na configuraccedilatildeo (s0s1 sm ai+1an $)

55 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2 Se ACTION[Sm ai]=reduce Ararrβ entatildeo o analisador sintaacutetico executa um movimento de reduzir (reduce move) resultando na configuraccedilatildeo (s0s1 sm-rs aiai+1an $)

onde r eacute o comprimento de β e s = GOTO[sm-r A]

Aqui o analisador sintaacutetico incialmente desempilhou os r siacutembolos de estado da pilha expondo o estado sm-r

O analisador sintaacutetico entatildeo empilhou s a entrada para GOTO[sm-r A] na pilha O siacutembolo corrente da entrada natildeo eacute alterado em um movimento de reduzir

56 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2

Para os LR que construiremos Xm-r+1Xm a sequencia de siacutembolos da gramaacutetica correspondendo aos estados retirados da pilha sempre iratildeo casar com β o lado direito da produccedilatildeo sendo reduzida

A saiacuteda de um analisador LR eacute gerada apoacutes um movimento de reduzir executando a accedilatildeo semacircntica associada agrave produccedilatildeo que estaacute sendo reduzida

No momento vamos considerar que a saiacuteda consiste soacute na impressatildeo da produccedilatildeo de reduccedilatildeo

57 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

3 Se ACTION[sm ai] = accept a anaacutelise estaacute concluiacuteda

4 Se ACTION[sm ai] = error o analisador sintaacutetico descobriu um erro e ativa uma rotina para recuperaccedilatildeo de erro

Todos os analisadores sintaacuteticos LR se comportam dessa maneira

A uacutenica diferenccedila entre eles diz respeito a informaccedilatildeo contida nos campos ACTION e GOTO da tabela de anaacutelise

O algoritmo de anaacutelise LR eacute resumido nos proacuteximos slides

58 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

Entrada Uma cadeia de entrada w e uma tabela de anaacutelise com funccedilotildees ACTION e GOTO para uma gramaacutetica G

Saiacuteda Se w estaacute em L(G) os passos os passos de uma reduccedilatildeo de uma anaacutelise ascendente para w

Caso contraacuterio uma indicaccedilatildeo de erro

Meacutetodo Inicialmente o analisador sintaacutetico possui w$ no buffer de entrada e s0 em sua pilha onde s0 representa o estado inicial

O analisador sintaacutetico entatildeo executa o algoritmo

59 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

[PSEUDO] seja a o primeiro siacutembolo de w$ while (1) Seja s o estado no topo da pilha if (ACTION[s a] = shift t) empilha t na pilha seja a o proacuteximo siacutembolo da entrada else if (ACTION[s a] = reduce Ararr β) desempilha siacutembolos |β| da pilha faccedila o estado t agora ser o topo da pilha empilhe GOTO[t A] na pilha imprima a produccedilatildeo Ararr β else if (ACTION[s a] = accept) pare a anaacutelise terminou

else chame uma rotina de recuperaccedilatildeo de erros

60 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR ndash Exemplo

A tabela do proacuteximo slide monstra as funccedilotildees ACTION e GOTO de uma tabela de anaacutelise LR para a gramaacutetica de expressatildeo estudada nesta aula e repetida aqui com produccedilotildees numeradas

Os coacutedigos para as accedilotildees satildeo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

(1) E rarr E + T

(2) E rarr T

(3) T rarr T F

(4) T rarr F

(5) F rarr ( E )

(6) F rarr id

1 Si significa avanccedila na entrada e empilha o estado i na pilha

2 Rj significa reduce segundo a produccedilatildeo de nuacutemero j

3 Acc significa accept

4 Entrada em branco significa error

61 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Estado ACTION

id + ( ) $

0 s5 s4

1 S6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4

5 r6 r6 r6 r6

6 s5 s4

7 s5 s4

8 r6 s11

9 s1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

GOTO

E T F

1 2 3

8 2 3

9 3

10

O valor de GOTO(s a) para o

terminal a estaacute em ACTION da

tabela de anaacutelise conectado agrave

accedilatildeo de transferecircncia sob a

entrada a e o estado s

O GOTO fornece o GOTO[s a]

para os natildeo-terminais A

Ok

Mas como eu consigo os dados

desta tabela

62 Geovane Griesang

A sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

FOLLOW(E) = FOLLOW(Ersquo) = ) $

FOLLOW(T) = FOLLOW(Trsquo) = + ) $

FOLLOW(F) = + ) $

63 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Construindo tabelas de anaacutelise SLR

Esse meacutetodo eacute o mais simples dos LRs Vamos nos referir a tabela de anaacutelise construiacuteda por este meacutetodo como uma tabela SLR e o analisador LR usando uma tabela SLR como um analisador sintaacutetico SLR

O meacutetodo SLR comeccedila com os itens LR(0) e autocircmatos LR(0) ou seja dada uma gramaacutetica G estendemos G para produzir Grsquo com o novo siacutembolo inicial Srsquo A partir de Grsquo construiacutemos C a coleccedilatildeo canocircnica de conj de itens para Grsquo junto com a funccedilatildeo GOTO

Para construir as entradas ACTION e GOTO da tabela de anaacutelise usando o algoritmo a seguir eacute preciso que conheccedilamos FOLLOW(A) para cada natildeo-terminal A de uma gramaacutetica

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 19: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

19 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Se I eacute um conj de itens para a gramaacutetica G entatildeo CLOSURE(I) eacute o conj de itens construiacutedos a partir de I pelas duas regras

1 Inicialmente acrescente todo item de I no CLOSURE(I)

2 Se A rarr αBβ estaacute em CLOSEURE(I) e B rarr γ eacute uma produccedilatildeo entatildeo adicione o item B rarr γ em CLOSURE(I) se ele ainda natildeo estaacute laacute

Ix

A rarr αBβ

B rarr γ

20 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Intuitivamente A rarr αBβ em CLOSURE(I) indica que em algum ponto no processo de reconhecimento os itens correspondentes as produccedilotildees-B devem ser acrescentados para dirigir a busca por B

A subcadeia derivaacutevel de Bβ na entrada teraacute um prefixo derivaacutevel de B aplicando umas das produccedilotildees-B

Portanto incluiacutemos itens para todas as produccedilotildees-B ou seja se B rarr γ eacute uma produccedilatildeo tambeacutem incluiacutemos B rarr γ em CLOSURE(I) este processo eacute conhecido como fechamento de estado

Ix

A rarr αBβ

B rarr γ

21 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

P ver como o fechamento de um estado eacute computado Ersquo rarr E eacute colocado em CLOSURE(I) pela regra (1)

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Acrescente todo item de I no CLOSURE(I)

I0

Ersquo rarr E

22 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Como existe um natildeo-terminal E agrave direita de um ponto acrescentamos as produccedilotildees-E com pontos mais agrave esquerda do lado direito dos itens ex

E rarr E + T e E rarr T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

23 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Agora existe um natildeo-terminal T imediatamente agrave direita de um ponto no segundo item incluiacutedo (E rarr T) de modo que acrescentamos as produccedilotildees-T T rarr T F e T rarr F

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

24 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Em seguida o natildeo-terminal F agrave direita de um ponto nos forccedila a incluir os itens Frarr (E) e F rarr id mas nenhum outro item precisa ser acrescentado

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr (E)

F rarr id

25 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Um modo conveniente de implementar a funccedilatildeo de fechamento (closure) eacute manter um arranjo booleano added indexado pelos natildeo-terminais de G de modo que added[B] seja definido como verdadeiro (true) se e quando incluirmos o item B rarr γ para cada produccedilatildeo-B B rarr γ

SetOfItems CLOSURE(I)

J=I

repeat

for (cada item A rarr αBβ em J)

for (cada produccedilatildeo B rarr γ de G)

if (B rarr γ natildeo estaacute em J)

Adicione B rarr γ em J

until mais nenhum item seja adicionado a J em um passo do loop

return J

Ix

A rarr αBβ

B rarr γ

26 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Observe que se uma produccedilatildeo-B for incluiacuteda no fechamento de I com o ponto mais agrave esquerda do seu lado direito entatildeo todas as produccedilotildees-B seratildeo igualmente incluiacutedas no fechamento Ex A rarr αBβ

Uma lista de natildeo-terminais B cujas produccedilotildees foram incluiacutedas dessa forma eacute suficiente Dividimos todos os conjuntos de itens de interesse em duas classes

1 Itens de base (kernel) o item inicial Srsquo rarr S e todos itens cujos pontos natildeo estatildeo mais agrave esquerda em seus lados direitos

2 Itens que natildeo satildeo de base todos os itens com seus pontos mais agrave esquerda em seus lados direitos exceto Srsquo rarr S Ex B rarr γ

Ix

A rarr αBβ

B rarr γ

27 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Aleacutem do mais cada conjunto de itens de interesse eacute formado a partir do fechamento de um conjunto de itens de base

Os itens adicionados no fechamento nunca podem ser itens de base naturalmente

Assim podemos representar os conjuntos de itens em que realmente estamos interessados com pouca memoacuteria se desprezarmos todos que natildeo satildeo itens de base sabendo que esses podem ser gerados novamente no processo de fechamento Ex B rarr γ exceto Srsquo rarr S

Ix

A rarr αBβ

B rarr γ

28 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

A segunda funccedilatildeo usada na construccedilatildeo da coleccedilatildeo canocircnica LR(0) eacute a funccedilatildeo de transiccedilatildeo GOTO(I X) onde I eacute o conjunto de itens de base e X eacute um siacutembolo da gramaacutetica

GOTO(I X) eacute definido como fechamento do conjunto de todos os itens [ArarrαXβ] tais que

[A rarr αXβ] estaacute em I

A funccedilatildeo de transiccedilatildeo GOTO eacute utilizada para definir as transaccedilotildees no autocircmato LR(0) para uma gramaacutetica

I1

Ersquo rarr E

E rarr E + T

I0

Ersquo rarr E

E rarr E + T

E

29 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Estados do autocircmato correspondem aos conjuntos de itens e GOTO(I +) especifica a transaccedilatildeo do estado I para um novo estado I sob a entrada X

Se I representa o conjunto com dois itens [Ersquo rarr E][E rarr E+T] entatildeo GOTO(I +) conteacutem os itens

Calculamos GOTO(I +) examinando os itens em I com o + imediatamente agrave direita do ponto

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

A rarr αXβ

A rarr αXβ

I1

Ersquo rarr E

E rarr E + T +

I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

30 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Calculamos GOTO(I +) examinando os itens em I com o + imediatamente agrave direita do ponto

O item Ersquo rarr E natildeo eacute desse tipo mas Ersquo rarr E + T sim

Movemos o ponto para imediatamente agrave direita de + e obtemos ErarrE + T

e entatildeo calculamos o fechamento desse conjunto unitaacuterio

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Itens em I

[Ersquo rarr E]

[E rarr E+T]

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I1

Ersquo rarr E

E rarr E + T +

31 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Agora estamos prontos para construir C a coleccedilatildeo canocircnica de conjuntos

de itens LR(0) para uma gramaacutetica estendida Grsquo

void Itens(Grsquo)

C = CLOSURE([Srsquo rarr S])

repeat

for (cada conjunto de itens I em C)

for (cada siacutembolo da gramaacutetica X)

if (GOTO(I X) natildeo eacute vazio e natildeo estaacute em C)

Adicione GOTO(I X) em C

until nenhum novo conjunto de itens seja adicionado em C em uma rodada

32 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

A ideia central por traacutes da anaacutelise ldquoLR Simplesrdquo ou SLR eacute a construccedilatildeo do autocircmato LR(0) a partir da gramaacutetica dada

Os estados desses autocircmatos satildeo os conjuntos de itens da coleccedilatildeo LR canocircnica e as transiccedilotildees satildeo dadas pela funccedilatildeo de transiccedilatildeo GOTO

O estado inicial do autocircmato LR eacute dado por CLOSURE([Srsquo rarr S]) onde Srsquo eacute o siacutembolo inicial da gramaacutetica estendida

Todos os estados satildeo estados de aceitaccedilatildeo Nos referimos ao ldquoestado jrdquo como o estado correspondente ao conjunto de itens Ij

33 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E

Aceitar $

I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

34 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Como os autocircmatos LR(0) podem ajudar-nos a decidir por uma das accedilotildees shift-reduce (veja as decisotildees entre shift-reduce a seguir)

Suponha que a cadeia γ dos siacutembolos da gramaacutetica leve o autocircmato LR(0) do estado inicial 0 para algum estado j

Desta forma avance sobre o proacuteximo siacutembolo a se o estado j possuir uma transaccedilatildeo sob a

Caso contraacuterio escolha reduzir

Os itens no estado j nos diratildeo qual produccedilatildeo usar

35 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

O algoritmo LR abaixo utiliza sua pilha para acompanhar os estados e tambeacutem os siacutembolos da gramaacutetica

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Na verdade

O siacutembolo da gramaacutetica pode ser

recuperado a parir do estado de

modo que a pilha possua estados

ao inveacutes de siacutembolos

36 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Usamos uma pilha

p conter os estados

Os siacutembolos que correspondem aos estados estatildeo na coluna ldquoSiacutembolosrdquo

A pilha da linha (1) tecircm o estado inicial 0 do autocircmato

37 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Portanto fazemos a transferecircncia

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

O siacutembolo da linha 1 eacute o marcador de fundo da pilha $

O proacuteximo siacutembolo de entrada eacute id e o estado 0 tem uma transiccedilatildeo sob id p o estado 5

38 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

A partir do item [F rarr id ] no estado 5 efetuamos uma reduccedilatildeo segundo a produccedilatildeo F rarr id

Na linha 2 o estado 5 eacute empilhado (siacutembolo id)

I5

F rarr id

Natildeo haacute transiccedilatildeo a partir do estado 5 sob a entrada por isso reduzimos

39 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o lado direito da produccedilatildeo da linha (2) eacute id correspondendo ao estado 5 e seu lado direito eacute o F

Com os estados ao desempilhar o estado 5 correspondendo ao siacutembolo id o estado 0 passa a ser o topo

0 F $

40 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id I3

T rarr F

F

Procuramos uma transiccedilatildeo sob F o lado esquerdo da produccedilatildeo

0 F $

O estado 0 possui uma transiccedilatildeo em F p o estado 3 onde empilhamos o estado 3 com o siacutembolo F Ver linha (3)

3

41 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I3

T rarr F

Natildeo haacute transiccedilatildeo a partir do estado 3 sob a entrada por isso reduzimos

A partir do item [T rarr F ] no estado 3 efetuamos uma reduccedilatildeo segundo a produccedilatildeo T rarr F

3

0

T $

42 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

I7

T rarr T F

F rarr ( E )

F rarr id

id

Como outro exemplo considere a linha (5) com o estado 7 referente ao siacutembolo no topo da pilha

Esse estado 7 possui uma transaccedilatildeo para o estado 5 sob a entrada id de modo que empilhamos o estado 5

43 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o estado 5 natildeo possui transiccedilotildees de modo que reduzimos segundo F rarr id

quando removemos da pilha o estado 5 correspondente ao lado direito id o estado 7 passa a ser o topo da pilha

44 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Como o estado 7 possui uma transaccedilatildeo sob F para o estado 10 empilhamos o estado 10 (siacutembolo F)

I7

T rarr T F

F rarr ( E )

F rarr id

I10

T rarr T F

F

45 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O algoritmo eacute o mesmo para todos

os analisadores sintaacuteticos LR

Soacute a tabela de anaacutelise eacute diferente

de um analisador para o outro

O algoritmo lecirc caracteres de um

buffer de entrada um de cada vez

46 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O analisador sintaacutetico shift-reduce

transfere um siacutembolo para pilha jaacute

o analisador sintaacutetico LR transfere

um estado

Cada estado resume a informaccedilatildeo

contida na pilha abaixo dele

47 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

A pilha conteacutem uma sequencia de

estados s0s1 sm onde sm estaacute

no topo

No meacutetodo SLR a pilha conteacutem

estados do autocircmato LR(0)

Por construccedilatildeo a cada estado eacute

associado 1 siacutembolo da gramaacutetica

48 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Lembrem-se de que os estados

correspondem a conj de itens e

que haacute uma transiccedilatildeo do estado i

para o estado j se GOTO(Ii X) = Ij

Todas as transiccedilotildees para o estado

j devem ser para o mesmo siacutembolo

da gramaacutetica X

49 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

Sm

Sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Desta forma cada estado exceto

o estado inicial 0 possui um uacutenico

siacutembolo da gramaacutetica associado a

ele

50 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

A tabela LR consiste em duas partes ACTION uma funccedilatildeo de accedilatildeo de anaacutelise e GOTO uma funccedilatildeo de transiccedilatildeo

1 A funccedilatildeo ACTION recebe como argumentos um estado i e um estado a (ou $) O valor de ACTION(i a) pode ter um dos quatro formatos

a) Shift j onde j eacute um estado

A accedilatildeo tomada pelo analisador sintaacutetico efetivamente transfere a entrada a para a pilha mas usa o estado j para representar a

51 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

b) Reduce Ararr β A accedilatildeo do analisador efetivamente reduz β no topo da pilha para A o lado esquerdo da produccedilatildeo

c) Accept O analisador aceita a entrada e termina a anaacutelise

d) Error O analisador descobre um erro em sua entrada passa o controle p o recuperador de erro que toma alguma accedilatildeo corretiva

2 Estendemos a funccedilatildeo GOTO definida sobre um conjunto de itens para os estados se GOTO(Ii A) = Ij entatildeo GOTO tambeacutem mapeia um estado i e um natildeo-terminal A para o estado j

52 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

Para descrever o comportamento de uma analisador LR eacute recomendaacutevel ter uma notaccedilatildeo representado o estado completo do analisador sua pilha e a entrada restante

Uma configuraccedilatildeo p um analisador LR eacute um par (s0s1sm aiai+1an $) O primeiro componente eacute o conteuacutedo da pilha com o topo agrave direita e o segundo componente representa a entrada restante

Essa configuraccedilatildeo representa a seguinte forma sentencial agrave direita (X0X1Xmaiai+1an) Assim como faria um analisador shift-reduce

53 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

A uacutenica diferenccedila eacute que em inveacutes de siacutembolos da gramaacutetica a pilha conteacutem estados a partir dos quais os siacutembolos da gramaacutetica podem ser recuperados

Ou seja Xi eacute o siacutembolo da gramaacutetica representado pelo estado si

Observe que s0 o estado inicial do analisador sintaacutetico natildeo representa um siacutembolo da gramaacutetica e serve como marcador de fundo da pilha aleacutem de desempenhar um papel importante na anaacutelise

54 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

O proacuteximo movimento do analisador a partir da configuraccedilatildeo dada eacute determinado pela leitura de ai o siacutembolo de entrada corrente e sm o estado do topo da pilha e entatildeo consultando a entrada ACTION[sm ai] na tabela de accedilatildeo de anaacutelise

As configuraccedilotildees restantes apoacutes cada um dos quatro tipos de movimentaccedilatildeo satildeo as seguintes

1 Se ACTION[Sm ai] = shift s o analisador sintaacutetico executa um movimento de transferecircncia (shift move) ele empilha o estado s e avanccedila da entrada resultando na configuraccedilatildeo (s0s1 sm ai+1an $)

55 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2 Se ACTION[Sm ai]=reduce Ararrβ entatildeo o analisador sintaacutetico executa um movimento de reduzir (reduce move) resultando na configuraccedilatildeo (s0s1 sm-rs aiai+1an $)

onde r eacute o comprimento de β e s = GOTO[sm-r A]

Aqui o analisador sintaacutetico incialmente desempilhou os r siacutembolos de estado da pilha expondo o estado sm-r

O analisador sintaacutetico entatildeo empilhou s a entrada para GOTO[sm-r A] na pilha O siacutembolo corrente da entrada natildeo eacute alterado em um movimento de reduzir

56 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2

Para os LR que construiremos Xm-r+1Xm a sequencia de siacutembolos da gramaacutetica correspondendo aos estados retirados da pilha sempre iratildeo casar com β o lado direito da produccedilatildeo sendo reduzida

A saiacuteda de um analisador LR eacute gerada apoacutes um movimento de reduzir executando a accedilatildeo semacircntica associada agrave produccedilatildeo que estaacute sendo reduzida

No momento vamos considerar que a saiacuteda consiste soacute na impressatildeo da produccedilatildeo de reduccedilatildeo

57 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

3 Se ACTION[sm ai] = accept a anaacutelise estaacute concluiacuteda

4 Se ACTION[sm ai] = error o analisador sintaacutetico descobriu um erro e ativa uma rotina para recuperaccedilatildeo de erro

Todos os analisadores sintaacuteticos LR se comportam dessa maneira

A uacutenica diferenccedila entre eles diz respeito a informaccedilatildeo contida nos campos ACTION e GOTO da tabela de anaacutelise

O algoritmo de anaacutelise LR eacute resumido nos proacuteximos slides

58 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

Entrada Uma cadeia de entrada w e uma tabela de anaacutelise com funccedilotildees ACTION e GOTO para uma gramaacutetica G

Saiacuteda Se w estaacute em L(G) os passos os passos de uma reduccedilatildeo de uma anaacutelise ascendente para w

Caso contraacuterio uma indicaccedilatildeo de erro

Meacutetodo Inicialmente o analisador sintaacutetico possui w$ no buffer de entrada e s0 em sua pilha onde s0 representa o estado inicial

O analisador sintaacutetico entatildeo executa o algoritmo

59 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

[PSEUDO] seja a o primeiro siacutembolo de w$ while (1) Seja s o estado no topo da pilha if (ACTION[s a] = shift t) empilha t na pilha seja a o proacuteximo siacutembolo da entrada else if (ACTION[s a] = reduce Ararr β) desempilha siacutembolos |β| da pilha faccedila o estado t agora ser o topo da pilha empilhe GOTO[t A] na pilha imprima a produccedilatildeo Ararr β else if (ACTION[s a] = accept) pare a anaacutelise terminou

else chame uma rotina de recuperaccedilatildeo de erros

60 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR ndash Exemplo

A tabela do proacuteximo slide monstra as funccedilotildees ACTION e GOTO de uma tabela de anaacutelise LR para a gramaacutetica de expressatildeo estudada nesta aula e repetida aqui com produccedilotildees numeradas

Os coacutedigos para as accedilotildees satildeo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

(1) E rarr E + T

(2) E rarr T

(3) T rarr T F

(4) T rarr F

(5) F rarr ( E )

(6) F rarr id

1 Si significa avanccedila na entrada e empilha o estado i na pilha

2 Rj significa reduce segundo a produccedilatildeo de nuacutemero j

3 Acc significa accept

4 Entrada em branco significa error

61 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Estado ACTION

id + ( ) $

0 s5 s4

1 S6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4

5 r6 r6 r6 r6

6 s5 s4

7 s5 s4

8 r6 s11

9 s1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

GOTO

E T F

1 2 3

8 2 3

9 3

10

O valor de GOTO(s a) para o

terminal a estaacute em ACTION da

tabela de anaacutelise conectado agrave

accedilatildeo de transferecircncia sob a

entrada a e o estado s

O GOTO fornece o GOTO[s a]

para os natildeo-terminais A

Ok

Mas como eu consigo os dados

desta tabela

62 Geovane Griesang

A sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

FOLLOW(E) = FOLLOW(Ersquo) = ) $

FOLLOW(T) = FOLLOW(Trsquo) = + ) $

FOLLOW(F) = + ) $

63 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Construindo tabelas de anaacutelise SLR

Esse meacutetodo eacute o mais simples dos LRs Vamos nos referir a tabela de anaacutelise construiacuteda por este meacutetodo como uma tabela SLR e o analisador LR usando uma tabela SLR como um analisador sintaacutetico SLR

O meacutetodo SLR comeccedila com os itens LR(0) e autocircmatos LR(0) ou seja dada uma gramaacutetica G estendemos G para produzir Grsquo com o novo siacutembolo inicial Srsquo A partir de Grsquo construiacutemos C a coleccedilatildeo canocircnica de conj de itens para Grsquo junto com a funccedilatildeo GOTO

Para construir as entradas ACTION e GOTO da tabela de anaacutelise usando o algoritmo a seguir eacute preciso que conheccedilamos FOLLOW(A) para cada natildeo-terminal A de uma gramaacutetica

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 20: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

20 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Intuitivamente A rarr αBβ em CLOSURE(I) indica que em algum ponto no processo de reconhecimento os itens correspondentes as produccedilotildees-B devem ser acrescentados para dirigir a busca por B

A subcadeia derivaacutevel de Bβ na entrada teraacute um prefixo derivaacutevel de B aplicando umas das produccedilotildees-B

Portanto incluiacutemos itens para todas as produccedilotildees-B ou seja se B rarr γ eacute uma produccedilatildeo tambeacutem incluiacutemos B rarr γ em CLOSURE(I) este processo eacute conhecido como fechamento de estado

Ix

A rarr αBβ

B rarr γ

21 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

P ver como o fechamento de um estado eacute computado Ersquo rarr E eacute colocado em CLOSURE(I) pela regra (1)

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Acrescente todo item de I no CLOSURE(I)

I0

Ersquo rarr E

22 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Como existe um natildeo-terminal E agrave direita de um ponto acrescentamos as produccedilotildees-E com pontos mais agrave esquerda do lado direito dos itens ex

E rarr E + T e E rarr T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

23 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Agora existe um natildeo-terminal T imediatamente agrave direita de um ponto no segundo item incluiacutedo (E rarr T) de modo que acrescentamos as produccedilotildees-T T rarr T F e T rarr F

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

24 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Em seguida o natildeo-terminal F agrave direita de um ponto nos forccedila a incluir os itens Frarr (E) e F rarr id mas nenhum outro item precisa ser acrescentado

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr (E)

F rarr id

25 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Um modo conveniente de implementar a funccedilatildeo de fechamento (closure) eacute manter um arranjo booleano added indexado pelos natildeo-terminais de G de modo que added[B] seja definido como verdadeiro (true) se e quando incluirmos o item B rarr γ para cada produccedilatildeo-B B rarr γ

SetOfItems CLOSURE(I)

J=I

repeat

for (cada item A rarr αBβ em J)

for (cada produccedilatildeo B rarr γ de G)

if (B rarr γ natildeo estaacute em J)

Adicione B rarr γ em J

until mais nenhum item seja adicionado a J em um passo do loop

return J

Ix

A rarr αBβ

B rarr γ

26 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Observe que se uma produccedilatildeo-B for incluiacuteda no fechamento de I com o ponto mais agrave esquerda do seu lado direito entatildeo todas as produccedilotildees-B seratildeo igualmente incluiacutedas no fechamento Ex A rarr αBβ

Uma lista de natildeo-terminais B cujas produccedilotildees foram incluiacutedas dessa forma eacute suficiente Dividimos todos os conjuntos de itens de interesse em duas classes

1 Itens de base (kernel) o item inicial Srsquo rarr S e todos itens cujos pontos natildeo estatildeo mais agrave esquerda em seus lados direitos

2 Itens que natildeo satildeo de base todos os itens com seus pontos mais agrave esquerda em seus lados direitos exceto Srsquo rarr S Ex B rarr γ

Ix

A rarr αBβ

B rarr γ

27 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Aleacutem do mais cada conjunto de itens de interesse eacute formado a partir do fechamento de um conjunto de itens de base

Os itens adicionados no fechamento nunca podem ser itens de base naturalmente

Assim podemos representar os conjuntos de itens em que realmente estamos interessados com pouca memoacuteria se desprezarmos todos que natildeo satildeo itens de base sabendo que esses podem ser gerados novamente no processo de fechamento Ex B rarr γ exceto Srsquo rarr S

Ix

A rarr αBβ

B rarr γ

28 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

A segunda funccedilatildeo usada na construccedilatildeo da coleccedilatildeo canocircnica LR(0) eacute a funccedilatildeo de transiccedilatildeo GOTO(I X) onde I eacute o conjunto de itens de base e X eacute um siacutembolo da gramaacutetica

GOTO(I X) eacute definido como fechamento do conjunto de todos os itens [ArarrαXβ] tais que

[A rarr αXβ] estaacute em I

A funccedilatildeo de transiccedilatildeo GOTO eacute utilizada para definir as transaccedilotildees no autocircmato LR(0) para uma gramaacutetica

I1

Ersquo rarr E

E rarr E + T

I0

Ersquo rarr E

E rarr E + T

E

29 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Estados do autocircmato correspondem aos conjuntos de itens e GOTO(I +) especifica a transaccedilatildeo do estado I para um novo estado I sob a entrada X

Se I representa o conjunto com dois itens [Ersquo rarr E][E rarr E+T] entatildeo GOTO(I +) conteacutem os itens

Calculamos GOTO(I +) examinando os itens em I com o + imediatamente agrave direita do ponto

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

A rarr αXβ

A rarr αXβ

I1

Ersquo rarr E

E rarr E + T +

I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

30 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Calculamos GOTO(I +) examinando os itens em I com o + imediatamente agrave direita do ponto

O item Ersquo rarr E natildeo eacute desse tipo mas Ersquo rarr E + T sim

Movemos o ponto para imediatamente agrave direita de + e obtemos ErarrE + T

e entatildeo calculamos o fechamento desse conjunto unitaacuterio

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Itens em I

[Ersquo rarr E]

[E rarr E+T]

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I1

Ersquo rarr E

E rarr E + T +

31 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Agora estamos prontos para construir C a coleccedilatildeo canocircnica de conjuntos

de itens LR(0) para uma gramaacutetica estendida Grsquo

void Itens(Grsquo)

C = CLOSURE([Srsquo rarr S])

repeat

for (cada conjunto de itens I em C)

for (cada siacutembolo da gramaacutetica X)

if (GOTO(I X) natildeo eacute vazio e natildeo estaacute em C)

Adicione GOTO(I X) em C

until nenhum novo conjunto de itens seja adicionado em C em uma rodada

32 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

A ideia central por traacutes da anaacutelise ldquoLR Simplesrdquo ou SLR eacute a construccedilatildeo do autocircmato LR(0) a partir da gramaacutetica dada

Os estados desses autocircmatos satildeo os conjuntos de itens da coleccedilatildeo LR canocircnica e as transiccedilotildees satildeo dadas pela funccedilatildeo de transiccedilatildeo GOTO

O estado inicial do autocircmato LR eacute dado por CLOSURE([Srsquo rarr S]) onde Srsquo eacute o siacutembolo inicial da gramaacutetica estendida

Todos os estados satildeo estados de aceitaccedilatildeo Nos referimos ao ldquoestado jrdquo como o estado correspondente ao conjunto de itens Ij

33 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E

Aceitar $

I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

34 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Como os autocircmatos LR(0) podem ajudar-nos a decidir por uma das accedilotildees shift-reduce (veja as decisotildees entre shift-reduce a seguir)

Suponha que a cadeia γ dos siacutembolos da gramaacutetica leve o autocircmato LR(0) do estado inicial 0 para algum estado j

Desta forma avance sobre o proacuteximo siacutembolo a se o estado j possuir uma transaccedilatildeo sob a

Caso contraacuterio escolha reduzir

Os itens no estado j nos diratildeo qual produccedilatildeo usar

35 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

O algoritmo LR abaixo utiliza sua pilha para acompanhar os estados e tambeacutem os siacutembolos da gramaacutetica

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Na verdade

O siacutembolo da gramaacutetica pode ser

recuperado a parir do estado de

modo que a pilha possua estados

ao inveacutes de siacutembolos

36 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Usamos uma pilha

p conter os estados

Os siacutembolos que correspondem aos estados estatildeo na coluna ldquoSiacutembolosrdquo

A pilha da linha (1) tecircm o estado inicial 0 do autocircmato

37 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Portanto fazemos a transferecircncia

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

O siacutembolo da linha 1 eacute o marcador de fundo da pilha $

O proacuteximo siacutembolo de entrada eacute id e o estado 0 tem uma transiccedilatildeo sob id p o estado 5

38 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

A partir do item [F rarr id ] no estado 5 efetuamos uma reduccedilatildeo segundo a produccedilatildeo F rarr id

Na linha 2 o estado 5 eacute empilhado (siacutembolo id)

I5

F rarr id

Natildeo haacute transiccedilatildeo a partir do estado 5 sob a entrada por isso reduzimos

39 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o lado direito da produccedilatildeo da linha (2) eacute id correspondendo ao estado 5 e seu lado direito eacute o F

Com os estados ao desempilhar o estado 5 correspondendo ao siacutembolo id o estado 0 passa a ser o topo

0 F $

40 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id I3

T rarr F

F

Procuramos uma transiccedilatildeo sob F o lado esquerdo da produccedilatildeo

0 F $

O estado 0 possui uma transiccedilatildeo em F p o estado 3 onde empilhamos o estado 3 com o siacutembolo F Ver linha (3)

3

41 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I3

T rarr F

Natildeo haacute transiccedilatildeo a partir do estado 3 sob a entrada por isso reduzimos

A partir do item [T rarr F ] no estado 3 efetuamos uma reduccedilatildeo segundo a produccedilatildeo T rarr F

3

0

T $

42 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

I7

T rarr T F

F rarr ( E )

F rarr id

id

Como outro exemplo considere a linha (5) com o estado 7 referente ao siacutembolo no topo da pilha

Esse estado 7 possui uma transaccedilatildeo para o estado 5 sob a entrada id de modo que empilhamos o estado 5

43 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o estado 5 natildeo possui transiccedilotildees de modo que reduzimos segundo F rarr id

quando removemos da pilha o estado 5 correspondente ao lado direito id o estado 7 passa a ser o topo da pilha

44 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Como o estado 7 possui uma transaccedilatildeo sob F para o estado 10 empilhamos o estado 10 (siacutembolo F)

I7

T rarr T F

F rarr ( E )

F rarr id

I10

T rarr T F

F

45 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O algoritmo eacute o mesmo para todos

os analisadores sintaacuteticos LR

Soacute a tabela de anaacutelise eacute diferente

de um analisador para o outro

O algoritmo lecirc caracteres de um

buffer de entrada um de cada vez

46 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O analisador sintaacutetico shift-reduce

transfere um siacutembolo para pilha jaacute

o analisador sintaacutetico LR transfere

um estado

Cada estado resume a informaccedilatildeo

contida na pilha abaixo dele

47 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

A pilha conteacutem uma sequencia de

estados s0s1 sm onde sm estaacute

no topo

No meacutetodo SLR a pilha conteacutem

estados do autocircmato LR(0)

Por construccedilatildeo a cada estado eacute

associado 1 siacutembolo da gramaacutetica

48 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Lembrem-se de que os estados

correspondem a conj de itens e

que haacute uma transiccedilatildeo do estado i

para o estado j se GOTO(Ii X) = Ij

Todas as transiccedilotildees para o estado

j devem ser para o mesmo siacutembolo

da gramaacutetica X

49 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

Sm

Sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Desta forma cada estado exceto

o estado inicial 0 possui um uacutenico

siacutembolo da gramaacutetica associado a

ele

50 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

A tabela LR consiste em duas partes ACTION uma funccedilatildeo de accedilatildeo de anaacutelise e GOTO uma funccedilatildeo de transiccedilatildeo

1 A funccedilatildeo ACTION recebe como argumentos um estado i e um estado a (ou $) O valor de ACTION(i a) pode ter um dos quatro formatos

a) Shift j onde j eacute um estado

A accedilatildeo tomada pelo analisador sintaacutetico efetivamente transfere a entrada a para a pilha mas usa o estado j para representar a

51 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

b) Reduce Ararr β A accedilatildeo do analisador efetivamente reduz β no topo da pilha para A o lado esquerdo da produccedilatildeo

c) Accept O analisador aceita a entrada e termina a anaacutelise

d) Error O analisador descobre um erro em sua entrada passa o controle p o recuperador de erro que toma alguma accedilatildeo corretiva

2 Estendemos a funccedilatildeo GOTO definida sobre um conjunto de itens para os estados se GOTO(Ii A) = Ij entatildeo GOTO tambeacutem mapeia um estado i e um natildeo-terminal A para o estado j

52 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

Para descrever o comportamento de uma analisador LR eacute recomendaacutevel ter uma notaccedilatildeo representado o estado completo do analisador sua pilha e a entrada restante

Uma configuraccedilatildeo p um analisador LR eacute um par (s0s1sm aiai+1an $) O primeiro componente eacute o conteuacutedo da pilha com o topo agrave direita e o segundo componente representa a entrada restante

Essa configuraccedilatildeo representa a seguinte forma sentencial agrave direita (X0X1Xmaiai+1an) Assim como faria um analisador shift-reduce

53 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

A uacutenica diferenccedila eacute que em inveacutes de siacutembolos da gramaacutetica a pilha conteacutem estados a partir dos quais os siacutembolos da gramaacutetica podem ser recuperados

Ou seja Xi eacute o siacutembolo da gramaacutetica representado pelo estado si

Observe que s0 o estado inicial do analisador sintaacutetico natildeo representa um siacutembolo da gramaacutetica e serve como marcador de fundo da pilha aleacutem de desempenhar um papel importante na anaacutelise

54 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

O proacuteximo movimento do analisador a partir da configuraccedilatildeo dada eacute determinado pela leitura de ai o siacutembolo de entrada corrente e sm o estado do topo da pilha e entatildeo consultando a entrada ACTION[sm ai] na tabela de accedilatildeo de anaacutelise

As configuraccedilotildees restantes apoacutes cada um dos quatro tipos de movimentaccedilatildeo satildeo as seguintes

1 Se ACTION[Sm ai] = shift s o analisador sintaacutetico executa um movimento de transferecircncia (shift move) ele empilha o estado s e avanccedila da entrada resultando na configuraccedilatildeo (s0s1 sm ai+1an $)

55 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2 Se ACTION[Sm ai]=reduce Ararrβ entatildeo o analisador sintaacutetico executa um movimento de reduzir (reduce move) resultando na configuraccedilatildeo (s0s1 sm-rs aiai+1an $)

onde r eacute o comprimento de β e s = GOTO[sm-r A]

Aqui o analisador sintaacutetico incialmente desempilhou os r siacutembolos de estado da pilha expondo o estado sm-r

O analisador sintaacutetico entatildeo empilhou s a entrada para GOTO[sm-r A] na pilha O siacutembolo corrente da entrada natildeo eacute alterado em um movimento de reduzir

56 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2

Para os LR que construiremos Xm-r+1Xm a sequencia de siacutembolos da gramaacutetica correspondendo aos estados retirados da pilha sempre iratildeo casar com β o lado direito da produccedilatildeo sendo reduzida

A saiacuteda de um analisador LR eacute gerada apoacutes um movimento de reduzir executando a accedilatildeo semacircntica associada agrave produccedilatildeo que estaacute sendo reduzida

No momento vamos considerar que a saiacuteda consiste soacute na impressatildeo da produccedilatildeo de reduccedilatildeo

57 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

3 Se ACTION[sm ai] = accept a anaacutelise estaacute concluiacuteda

4 Se ACTION[sm ai] = error o analisador sintaacutetico descobriu um erro e ativa uma rotina para recuperaccedilatildeo de erro

Todos os analisadores sintaacuteticos LR se comportam dessa maneira

A uacutenica diferenccedila entre eles diz respeito a informaccedilatildeo contida nos campos ACTION e GOTO da tabela de anaacutelise

O algoritmo de anaacutelise LR eacute resumido nos proacuteximos slides

58 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

Entrada Uma cadeia de entrada w e uma tabela de anaacutelise com funccedilotildees ACTION e GOTO para uma gramaacutetica G

Saiacuteda Se w estaacute em L(G) os passos os passos de uma reduccedilatildeo de uma anaacutelise ascendente para w

Caso contraacuterio uma indicaccedilatildeo de erro

Meacutetodo Inicialmente o analisador sintaacutetico possui w$ no buffer de entrada e s0 em sua pilha onde s0 representa o estado inicial

O analisador sintaacutetico entatildeo executa o algoritmo

59 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

[PSEUDO] seja a o primeiro siacutembolo de w$ while (1) Seja s o estado no topo da pilha if (ACTION[s a] = shift t) empilha t na pilha seja a o proacuteximo siacutembolo da entrada else if (ACTION[s a] = reduce Ararr β) desempilha siacutembolos |β| da pilha faccedila o estado t agora ser o topo da pilha empilhe GOTO[t A] na pilha imprima a produccedilatildeo Ararr β else if (ACTION[s a] = accept) pare a anaacutelise terminou

else chame uma rotina de recuperaccedilatildeo de erros

60 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR ndash Exemplo

A tabela do proacuteximo slide monstra as funccedilotildees ACTION e GOTO de uma tabela de anaacutelise LR para a gramaacutetica de expressatildeo estudada nesta aula e repetida aqui com produccedilotildees numeradas

Os coacutedigos para as accedilotildees satildeo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

(1) E rarr E + T

(2) E rarr T

(3) T rarr T F

(4) T rarr F

(5) F rarr ( E )

(6) F rarr id

1 Si significa avanccedila na entrada e empilha o estado i na pilha

2 Rj significa reduce segundo a produccedilatildeo de nuacutemero j

3 Acc significa accept

4 Entrada em branco significa error

61 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Estado ACTION

id + ( ) $

0 s5 s4

1 S6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4

5 r6 r6 r6 r6

6 s5 s4

7 s5 s4

8 r6 s11

9 s1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

GOTO

E T F

1 2 3

8 2 3

9 3

10

O valor de GOTO(s a) para o

terminal a estaacute em ACTION da

tabela de anaacutelise conectado agrave

accedilatildeo de transferecircncia sob a

entrada a e o estado s

O GOTO fornece o GOTO[s a]

para os natildeo-terminais A

Ok

Mas como eu consigo os dados

desta tabela

62 Geovane Griesang

A sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

FOLLOW(E) = FOLLOW(Ersquo) = ) $

FOLLOW(T) = FOLLOW(Trsquo) = + ) $

FOLLOW(F) = + ) $

63 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Construindo tabelas de anaacutelise SLR

Esse meacutetodo eacute o mais simples dos LRs Vamos nos referir a tabela de anaacutelise construiacuteda por este meacutetodo como uma tabela SLR e o analisador LR usando uma tabela SLR como um analisador sintaacutetico SLR

O meacutetodo SLR comeccedila com os itens LR(0) e autocircmatos LR(0) ou seja dada uma gramaacutetica G estendemos G para produzir Grsquo com o novo siacutembolo inicial Srsquo A partir de Grsquo construiacutemos C a coleccedilatildeo canocircnica de conj de itens para Grsquo junto com a funccedilatildeo GOTO

Para construir as entradas ACTION e GOTO da tabela de anaacutelise usando o algoritmo a seguir eacute preciso que conheccedilamos FOLLOW(A) para cada natildeo-terminal A de uma gramaacutetica

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 21: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

21 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

P ver como o fechamento de um estado eacute computado Ersquo rarr E eacute colocado em CLOSURE(I) pela regra (1)

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Acrescente todo item de I no CLOSURE(I)

I0

Ersquo rarr E

22 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Como existe um natildeo-terminal E agrave direita de um ponto acrescentamos as produccedilotildees-E com pontos mais agrave esquerda do lado direito dos itens ex

E rarr E + T e E rarr T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

23 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Agora existe um natildeo-terminal T imediatamente agrave direita de um ponto no segundo item incluiacutedo (E rarr T) de modo que acrescentamos as produccedilotildees-T T rarr T F e T rarr F

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

24 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Em seguida o natildeo-terminal F agrave direita de um ponto nos forccedila a incluir os itens Frarr (E) e F rarr id mas nenhum outro item precisa ser acrescentado

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr (E)

F rarr id

25 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Um modo conveniente de implementar a funccedilatildeo de fechamento (closure) eacute manter um arranjo booleano added indexado pelos natildeo-terminais de G de modo que added[B] seja definido como verdadeiro (true) se e quando incluirmos o item B rarr γ para cada produccedilatildeo-B B rarr γ

SetOfItems CLOSURE(I)

J=I

repeat

for (cada item A rarr αBβ em J)

for (cada produccedilatildeo B rarr γ de G)

if (B rarr γ natildeo estaacute em J)

Adicione B rarr γ em J

until mais nenhum item seja adicionado a J em um passo do loop

return J

Ix

A rarr αBβ

B rarr γ

26 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Observe que se uma produccedilatildeo-B for incluiacuteda no fechamento de I com o ponto mais agrave esquerda do seu lado direito entatildeo todas as produccedilotildees-B seratildeo igualmente incluiacutedas no fechamento Ex A rarr αBβ

Uma lista de natildeo-terminais B cujas produccedilotildees foram incluiacutedas dessa forma eacute suficiente Dividimos todos os conjuntos de itens de interesse em duas classes

1 Itens de base (kernel) o item inicial Srsquo rarr S e todos itens cujos pontos natildeo estatildeo mais agrave esquerda em seus lados direitos

2 Itens que natildeo satildeo de base todos os itens com seus pontos mais agrave esquerda em seus lados direitos exceto Srsquo rarr S Ex B rarr γ

Ix

A rarr αBβ

B rarr γ

27 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Aleacutem do mais cada conjunto de itens de interesse eacute formado a partir do fechamento de um conjunto de itens de base

Os itens adicionados no fechamento nunca podem ser itens de base naturalmente

Assim podemos representar os conjuntos de itens em que realmente estamos interessados com pouca memoacuteria se desprezarmos todos que natildeo satildeo itens de base sabendo que esses podem ser gerados novamente no processo de fechamento Ex B rarr γ exceto Srsquo rarr S

Ix

A rarr αBβ

B rarr γ

28 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

A segunda funccedilatildeo usada na construccedilatildeo da coleccedilatildeo canocircnica LR(0) eacute a funccedilatildeo de transiccedilatildeo GOTO(I X) onde I eacute o conjunto de itens de base e X eacute um siacutembolo da gramaacutetica

GOTO(I X) eacute definido como fechamento do conjunto de todos os itens [ArarrαXβ] tais que

[A rarr αXβ] estaacute em I

A funccedilatildeo de transiccedilatildeo GOTO eacute utilizada para definir as transaccedilotildees no autocircmato LR(0) para uma gramaacutetica

I1

Ersquo rarr E

E rarr E + T

I0

Ersquo rarr E

E rarr E + T

E

29 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Estados do autocircmato correspondem aos conjuntos de itens e GOTO(I +) especifica a transaccedilatildeo do estado I para um novo estado I sob a entrada X

Se I representa o conjunto com dois itens [Ersquo rarr E][E rarr E+T] entatildeo GOTO(I +) conteacutem os itens

Calculamos GOTO(I +) examinando os itens em I com o + imediatamente agrave direita do ponto

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

A rarr αXβ

A rarr αXβ

I1

Ersquo rarr E

E rarr E + T +

I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

30 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Calculamos GOTO(I +) examinando os itens em I com o + imediatamente agrave direita do ponto

O item Ersquo rarr E natildeo eacute desse tipo mas Ersquo rarr E + T sim

Movemos o ponto para imediatamente agrave direita de + e obtemos ErarrE + T

e entatildeo calculamos o fechamento desse conjunto unitaacuterio

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Itens em I

[Ersquo rarr E]

[E rarr E+T]

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I1

Ersquo rarr E

E rarr E + T +

31 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Agora estamos prontos para construir C a coleccedilatildeo canocircnica de conjuntos

de itens LR(0) para uma gramaacutetica estendida Grsquo

void Itens(Grsquo)

C = CLOSURE([Srsquo rarr S])

repeat

for (cada conjunto de itens I em C)

for (cada siacutembolo da gramaacutetica X)

if (GOTO(I X) natildeo eacute vazio e natildeo estaacute em C)

Adicione GOTO(I X) em C

until nenhum novo conjunto de itens seja adicionado em C em uma rodada

32 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

A ideia central por traacutes da anaacutelise ldquoLR Simplesrdquo ou SLR eacute a construccedilatildeo do autocircmato LR(0) a partir da gramaacutetica dada

Os estados desses autocircmatos satildeo os conjuntos de itens da coleccedilatildeo LR canocircnica e as transiccedilotildees satildeo dadas pela funccedilatildeo de transiccedilatildeo GOTO

O estado inicial do autocircmato LR eacute dado por CLOSURE([Srsquo rarr S]) onde Srsquo eacute o siacutembolo inicial da gramaacutetica estendida

Todos os estados satildeo estados de aceitaccedilatildeo Nos referimos ao ldquoestado jrdquo como o estado correspondente ao conjunto de itens Ij

33 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E

Aceitar $

I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

34 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Como os autocircmatos LR(0) podem ajudar-nos a decidir por uma das accedilotildees shift-reduce (veja as decisotildees entre shift-reduce a seguir)

Suponha que a cadeia γ dos siacutembolos da gramaacutetica leve o autocircmato LR(0) do estado inicial 0 para algum estado j

Desta forma avance sobre o proacuteximo siacutembolo a se o estado j possuir uma transaccedilatildeo sob a

Caso contraacuterio escolha reduzir

Os itens no estado j nos diratildeo qual produccedilatildeo usar

35 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

O algoritmo LR abaixo utiliza sua pilha para acompanhar os estados e tambeacutem os siacutembolos da gramaacutetica

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Na verdade

O siacutembolo da gramaacutetica pode ser

recuperado a parir do estado de

modo que a pilha possua estados

ao inveacutes de siacutembolos

36 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Usamos uma pilha

p conter os estados

Os siacutembolos que correspondem aos estados estatildeo na coluna ldquoSiacutembolosrdquo

A pilha da linha (1) tecircm o estado inicial 0 do autocircmato

37 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Portanto fazemos a transferecircncia

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

O siacutembolo da linha 1 eacute o marcador de fundo da pilha $

O proacuteximo siacutembolo de entrada eacute id e o estado 0 tem uma transiccedilatildeo sob id p o estado 5

38 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

A partir do item [F rarr id ] no estado 5 efetuamos uma reduccedilatildeo segundo a produccedilatildeo F rarr id

Na linha 2 o estado 5 eacute empilhado (siacutembolo id)

I5

F rarr id

Natildeo haacute transiccedilatildeo a partir do estado 5 sob a entrada por isso reduzimos

39 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o lado direito da produccedilatildeo da linha (2) eacute id correspondendo ao estado 5 e seu lado direito eacute o F

Com os estados ao desempilhar o estado 5 correspondendo ao siacutembolo id o estado 0 passa a ser o topo

0 F $

40 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id I3

T rarr F

F

Procuramos uma transiccedilatildeo sob F o lado esquerdo da produccedilatildeo

0 F $

O estado 0 possui uma transiccedilatildeo em F p o estado 3 onde empilhamos o estado 3 com o siacutembolo F Ver linha (3)

3

41 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I3

T rarr F

Natildeo haacute transiccedilatildeo a partir do estado 3 sob a entrada por isso reduzimos

A partir do item [T rarr F ] no estado 3 efetuamos uma reduccedilatildeo segundo a produccedilatildeo T rarr F

3

0

T $

42 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

I7

T rarr T F

F rarr ( E )

F rarr id

id

Como outro exemplo considere a linha (5) com o estado 7 referente ao siacutembolo no topo da pilha

Esse estado 7 possui uma transaccedilatildeo para o estado 5 sob a entrada id de modo que empilhamos o estado 5

43 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o estado 5 natildeo possui transiccedilotildees de modo que reduzimos segundo F rarr id

quando removemos da pilha o estado 5 correspondente ao lado direito id o estado 7 passa a ser o topo da pilha

44 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Como o estado 7 possui uma transaccedilatildeo sob F para o estado 10 empilhamos o estado 10 (siacutembolo F)

I7

T rarr T F

F rarr ( E )

F rarr id

I10

T rarr T F

F

45 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O algoritmo eacute o mesmo para todos

os analisadores sintaacuteticos LR

Soacute a tabela de anaacutelise eacute diferente

de um analisador para o outro

O algoritmo lecirc caracteres de um

buffer de entrada um de cada vez

46 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O analisador sintaacutetico shift-reduce

transfere um siacutembolo para pilha jaacute

o analisador sintaacutetico LR transfere

um estado

Cada estado resume a informaccedilatildeo

contida na pilha abaixo dele

47 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

A pilha conteacutem uma sequencia de

estados s0s1 sm onde sm estaacute

no topo

No meacutetodo SLR a pilha conteacutem

estados do autocircmato LR(0)

Por construccedilatildeo a cada estado eacute

associado 1 siacutembolo da gramaacutetica

48 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Lembrem-se de que os estados

correspondem a conj de itens e

que haacute uma transiccedilatildeo do estado i

para o estado j se GOTO(Ii X) = Ij

Todas as transiccedilotildees para o estado

j devem ser para o mesmo siacutembolo

da gramaacutetica X

49 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

Sm

Sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Desta forma cada estado exceto

o estado inicial 0 possui um uacutenico

siacutembolo da gramaacutetica associado a

ele

50 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

A tabela LR consiste em duas partes ACTION uma funccedilatildeo de accedilatildeo de anaacutelise e GOTO uma funccedilatildeo de transiccedilatildeo

1 A funccedilatildeo ACTION recebe como argumentos um estado i e um estado a (ou $) O valor de ACTION(i a) pode ter um dos quatro formatos

a) Shift j onde j eacute um estado

A accedilatildeo tomada pelo analisador sintaacutetico efetivamente transfere a entrada a para a pilha mas usa o estado j para representar a

51 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

b) Reduce Ararr β A accedilatildeo do analisador efetivamente reduz β no topo da pilha para A o lado esquerdo da produccedilatildeo

c) Accept O analisador aceita a entrada e termina a anaacutelise

d) Error O analisador descobre um erro em sua entrada passa o controle p o recuperador de erro que toma alguma accedilatildeo corretiva

2 Estendemos a funccedilatildeo GOTO definida sobre um conjunto de itens para os estados se GOTO(Ii A) = Ij entatildeo GOTO tambeacutem mapeia um estado i e um natildeo-terminal A para o estado j

52 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

Para descrever o comportamento de uma analisador LR eacute recomendaacutevel ter uma notaccedilatildeo representado o estado completo do analisador sua pilha e a entrada restante

Uma configuraccedilatildeo p um analisador LR eacute um par (s0s1sm aiai+1an $) O primeiro componente eacute o conteuacutedo da pilha com o topo agrave direita e o segundo componente representa a entrada restante

Essa configuraccedilatildeo representa a seguinte forma sentencial agrave direita (X0X1Xmaiai+1an) Assim como faria um analisador shift-reduce

53 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

A uacutenica diferenccedila eacute que em inveacutes de siacutembolos da gramaacutetica a pilha conteacutem estados a partir dos quais os siacutembolos da gramaacutetica podem ser recuperados

Ou seja Xi eacute o siacutembolo da gramaacutetica representado pelo estado si

Observe que s0 o estado inicial do analisador sintaacutetico natildeo representa um siacutembolo da gramaacutetica e serve como marcador de fundo da pilha aleacutem de desempenhar um papel importante na anaacutelise

54 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

O proacuteximo movimento do analisador a partir da configuraccedilatildeo dada eacute determinado pela leitura de ai o siacutembolo de entrada corrente e sm o estado do topo da pilha e entatildeo consultando a entrada ACTION[sm ai] na tabela de accedilatildeo de anaacutelise

As configuraccedilotildees restantes apoacutes cada um dos quatro tipos de movimentaccedilatildeo satildeo as seguintes

1 Se ACTION[Sm ai] = shift s o analisador sintaacutetico executa um movimento de transferecircncia (shift move) ele empilha o estado s e avanccedila da entrada resultando na configuraccedilatildeo (s0s1 sm ai+1an $)

55 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2 Se ACTION[Sm ai]=reduce Ararrβ entatildeo o analisador sintaacutetico executa um movimento de reduzir (reduce move) resultando na configuraccedilatildeo (s0s1 sm-rs aiai+1an $)

onde r eacute o comprimento de β e s = GOTO[sm-r A]

Aqui o analisador sintaacutetico incialmente desempilhou os r siacutembolos de estado da pilha expondo o estado sm-r

O analisador sintaacutetico entatildeo empilhou s a entrada para GOTO[sm-r A] na pilha O siacutembolo corrente da entrada natildeo eacute alterado em um movimento de reduzir

56 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2

Para os LR que construiremos Xm-r+1Xm a sequencia de siacutembolos da gramaacutetica correspondendo aos estados retirados da pilha sempre iratildeo casar com β o lado direito da produccedilatildeo sendo reduzida

A saiacuteda de um analisador LR eacute gerada apoacutes um movimento de reduzir executando a accedilatildeo semacircntica associada agrave produccedilatildeo que estaacute sendo reduzida

No momento vamos considerar que a saiacuteda consiste soacute na impressatildeo da produccedilatildeo de reduccedilatildeo

57 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

3 Se ACTION[sm ai] = accept a anaacutelise estaacute concluiacuteda

4 Se ACTION[sm ai] = error o analisador sintaacutetico descobriu um erro e ativa uma rotina para recuperaccedilatildeo de erro

Todos os analisadores sintaacuteticos LR se comportam dessa maneira

A uacutenica diferenccedila entre eles diz respeito a informaccedilatildeo contida nos campos ACTION e GOTO da tabela de anaacutelise

O algoritmo de anaacutelise LR eacute resumido nos proacuteximos slides

58 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

Entrada Uma cadeia de entrada w e uma tabela de anaacutelise com funccedilotildees ACTION e GOTO para uma gramaacutetica G

Saiacuteda Se w estaacute em L(G) os passos os passos de uma reduccedilatildeo de uma anaacutelise ascendente para w

Caso contraacuterio uma indicaccedilatildeo de erro

Meacutetodo Inicialmente o analisador sintaacutetico possui w$ no buffer de entrada e s0 em sua pilha onde s0 representa o estado inicial

O analisador sintaacutetico entatildeo executa o algoritmo

59 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

[PSEUDO] seja a o primeiro siacutembolo de w$ while (1) Seja s o estado no topo da pilha if (ACTION[s a] = shift t) empilha t na pilha seja a o proacuteximo siacutembolo da entrada else if (ACTION[s a] = reduce Ararr β) desempilha siacutembolos |β| da pilha faccedila o estado t agora ser o topo da pilha empilhe GOTO[t A] na pilha imprima a produccedilatildeo Ararr β else if (ACTION[s a] = accept) pare a anaacutelise terminou

else chame uma rotina de recuperaccedilatildeo de erros

60 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR ndash Exemplo

A tabela do proacuteximo slide monstra as funccedilotildees ACTION e GOTO de uma tabela de anaacutelise LR para a gramaacutetica de expressatildeo estudada nesta aula e repetida aqui com produccedilotildees numeradas

Os coacutedigos para as accedilotildees satildeo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

(1) E rarr E + T

(2) E rarr T

(3) T rarr T F

(4) T rarr F

(5) F rarr ( E )

(6) F rarr id

1 Si significa avanccedila na entrada e empilha o estado i na pilha

2 Rj significa reduce segundo a produccedilatildeo de nuacutemero j

3 Acc significa accept

4 Entrada em branco significa error

61 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Estado ACTION

id + ( ) $

0 s5 s4

1 S6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4

5 r6 r6 r6 r6

6 s5 s4

7 s5 s4

8 r6 s11

9 s1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

GOTO

E T F

1 2 3

8 2 3

9 3

10

O valor de GOTO(s a) para o

terminal a estaacute em ACTION da

tabela de anaacutelise conectado agrave

accedilatildeo de transferecircncia sob a

entrada a e o estado s

O GOTO fornece o GOTO[s a]

para os natildeo-terminais A

Ok

Mas como eu consigo os dados

desta tabela

62 Geovane Griesang

A sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

FOLLOW(E) = FOLLOW(Ersquo) = ) $

FOLLOW(T) = FOLLOW(Trsquo) = + ) $

FOLLOW(F) = + ) $

63 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Construindo tabelas de anaacutelise SLR

Esse meacutetodo eacute o mais simples dos LRs Vamos nos referir a tabela de anaacutelise construiacuteda por este meacutetodo como uma tabela SLR e o analisador LR usando uma tabela SLR como um analisador sintaacutetico SLR

O meacutetodo SLR comeccedila com os itens LR(0) e autocircmatos LR(0) ou seja dada uma gramaacutetica G estendemos G para produzir Grsquo com o novo siacutembolo inicial Srsquo A partir de Grsquo construiacutemos C a coleccedilatildeo canocircnica de conj de itens para Grsquo junto com a funccedilatildeo GOTO

Para construir as entradas ACTION e GOTO da tabela de anaacutelise usando o algoritmo a seguir eacute preciso que conheccedilamos FOLLOW(A) para cada natildeo-terminal A de uma gramaacutetica

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 22: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

22 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Como existe um natildeo-terminal E agrave direita de um ponto acrescentamos as produccedilotildees-E com pontos mais agrave esquerda do lado direito dos itens ex

E rarr E + T e E rarr T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

23 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Agora existe um natildeo-terminal T imediatamente agrave direita de um ponto no segundo item incluiacutedo (E rarr T) de modo que acrescentamos as produccedilotildees-T T rarr T F e T rarr F

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

24 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Em seguida o natildeo-terminal F agrave direita de um ponto nos forccedila a incluir os itens Frarr (E) e F rarr id mas nenhum outro item precisa ser acrescentado

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr (E)

F rarr id

25 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Um modo conveniente de implementar a funccedilatildeo de fechamento (closure) eacute manter um arranjo booleano added indexado pelos natildeo-terminais de G de modo que added[B] seja definido como verdadeiro (true) se e quando incluirmos o item B rarr γ para cada produccedilatildeo-B B rarr γ

SetOfItems CLOSURE(I)

J=I

repeat

for (cada item A rarr αBβ em J)

for (cada produccedilatildeo B rarr γ de G)

if (B rarr γ natildeo estaacute em J)

Adicione B rarr γ em J

until mais nenhum item seja adicionado a J em um passo do loop

return J

Ix

A rarr αBβ

B rarr γ

26 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Observe que se uma produccedilatildeo-B for incluiacuteda no fechamento de I com o ponto mais agrave esquerda do seu lado direito entatildeo todas as produccedilotildees-B seratildeo igualmente incluiacutedas no fechamento Ex A rarr αBβ

Uma lista de natildeo-terminais B cujas produccedilotildees foram incluiacutedas dessa forma eacute suficiente Dividimos todos os conjuntos de itens de interesse em duas classes

1 Itens de base (kernel) o item inicial Srsquo rarr S e todos itens cujos pontos natildeo estatildeo mais agrave esquerda em seus lados direitos

2 Itens que natildeo satildeo de base todos os itens com seus pontos mais agrave esquerda em seus lados direitos exceto Srsquo rarr S Ex B rarr γ

Ix

A rarr αBβ

B rarr γ

27 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Aleacutem do mais cada conjunto de itens de interesse eacute formado a partir do fechamento de um conjunto de itens de base

Os itens adicionados no fechamento nunca podem ser itens de base naturalmente

Assim podemos representar os conjuntos de itens em que realmente estamos interessados com pouca memoacuteria se desprezarmos todos que natildeo satildeo itens de base sabendo que esses podem ser gerados novamente no processo de fechamento Ex B rarr γ exceto Srsquo rarr S

Ix

A rarr αBβ

B rarr γ

28 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

A segunda funccedilatildeo usada na construccedilatildeo da coleccedilatildeo canocircnica LR(0) eacute a funccedilatildeo de transiccedilatildeo GOTO(I X) onde I eacute o conjunto de itens de base e X eacute um siacutembolo da gramaacutetica

GOTO(I X) eacute definido como fechamento do conjunto de todos os itens [ArarrαXβ] tais que

[A rarr αXβ] estaacute em I

A funccedilatildeo de transiccedilatildeo GOTO eacute utilizada para definir as transaccedilotildees no autocircmato LR(0) para uma gramaacutetica

I1

Ersquo rarr E

E rarr E + T

I0

Ersquo rarr E

E rarr E + T

E

29 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Estados do autocircmato correspondem aos conjuntos de itens e GOTO(I +) especifica a transaccedilatildeo do estado I para um novo estado I sob a entrada X

Se I representa o conjunto com dois itens [Ersquo rarr E][E rarr E+T] entatildeo GOTO(I +) conteacutem os itens

Calculamos GOTO(I +) examinando os itens em I com o + imediatamente agrave direita do ponto

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

A rarr αXβ

A rarr αXβ

I1

Ersquo rarr E

E rarr E + T +

I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

30 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Calculamos GOTO(I +) examinando os itens em I com o + imediatamente agrave direita do ponto

O item Ersquo rarr E natildeo eacute desse tipo mas Ersquo rarr E + T sim

Movemos o ponto para imediatamente agrave direita de + e obtemos ErarrE + T

e entatildeo calculamos o fechamento desse conjunto unitaacuterio

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Itens em I

[Ersquo rarr E]

[E rarr E+T]

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I1

Ersquo rarr E

E rarr E + T +

31 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Agora estamos prontos para construir C a coleccedilatildeo canocircnica de conjuntos

de itens LR(0) para uma gramaacutetica estendida Grsquo

void Itens(Grsquo)

C = CLOSURE([Srsquo rarr S])

repeat

for (cada conjunto de itens I em C)

for (cada siacutembolo da gramaacutetica X)

if (GOTO(I X) natildeo eacute vazio e natildeo estaacute em C)

Adicione GOTO(I X) em C

until nenhum novo conjunto de itens seja adicionado em C em uma rodada

32 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

A ideia central por traacutes da anaacutelise ldquoLR Simplesrdquo ou SLR eacute a construccedilatildeo do autocircmato LR(0) a partir da gramaacutetica dada

Os estados desses autocircmatos satildeo os conjuntos de itens da coleccedilatildeo LR canocircnica e as transiccedilotildees satildeo dadas pela funccedilatildeo de transiccedilatildeo GOTO

O estado inicial do autocircmato LR eacute dado por CLOSURE([Srsquo rarr S]) onde Srsquo eacute o siacutembolo inicial da gramaacutetica estendida

Todos os estados satildeo estados de aceitaccedilatildeo Nos referimos ao ldquoestado jrdquo como o estado correspondente ao conjunto de itens Ij

33 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E

Aceitar $

I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

34 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Como os autocircmatos LR(0) podem ajudar-nos a decidir por uma das accedilotildees shift-reduce (veja as decisotildees entre shift-reduce a seguir)

Suponha que a cadeia γ dos siacutembolos da gramaacutetica leve o autocircmato LR(0) do estado inicial 0 para algum estado j

Desta forma avance sobre o proacuteximo siacutembolo a se o estado j possuir uma transaccedilatildeo sob a

Caso contraacuterio escolha reduzir

Os itens no estado j nos diratildeo qual produccedilatildeo usar

35 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

O algoritmo LR abaixo utiliza sua pilha para acompanhar os estados e tambeacutem os siacutembolos da gramaacutetica

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Na verdade

O siacutembolo da gramaacutetica pode ser

recuperado a parir do estado de

modo que a pilha possua estados

ao inveacutes de siacutembolos

36 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Usamos uma pilha

p conter os estados

Os siacutembolos que correspondem aos estados estatildeo na coluna ldquoSiacutembolosrdquo

A pilha da linha (1) tecircm o estado inicial 0 do autocircmato

37 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Portanto fazemos a transferecircncia

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

O siacutembolo da linha 1 eacute o marcador de fundo da pilha $

O proacuteximo siacutembolo de entrada eacute id e o estado 0 tem uma transiccedilatildeo sob id p o estado 5

38 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

A partir do item [F rarr id ] no estado 5 efetuamos uma reduccedilatildeo segundo a produccedilatildeo F rarr id

Na linha 2 o estado 5 eacute empilhado (siacutembolo id)

I5

F rarr id

Natildeo haacute transiccedilatildeo a partir do estado 5 sob a entrada por isso reduzimos

39 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o lado direito da produccedilatildeo da linha (2) eacute id correspondendo ao estado 5 e seu lado direito eacute o F

Com os estados ao desempilhar o estado 5 correspondendo ao siacutembolo id o estado 0 passa a ser o topo

0 F $

40 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id I3

T rarr F

F

Procuramos uma transiccedilatildeo sob F o lado esquerdo da produccedilatildeo

0 F $

O estado 0 possui uma transiccedilatildeo em F p o estado 3 onde empilhamos o estado 3 com o siacutembolo F Ver linha (3)

3

41 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I3

T rarr F

Natildeo haacute transiccedilatildeo a partir do estado 3 sob a entrada por isso reduzimos

A partir do item [T rarr F ] no estado 3 efetuamos uma reduccedilatildeo segundo a produccedilatildeo T rarr F

3

0

T $

42 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

I7

T rarr T F

F rarr ( E )

F rarr id

id

Como outro exemplo considere a linha (5) com o estado 7 referente ao siacutembolo no topo da pilha

Esse estado 7 possui uma transaccedilatildeo para o estado 5 sob a entrada id de modo que empilhamos o estado 5

43 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o estado 5 natildeo possui transiccedilotildees de modo que reduzimos segundo F rarr id

quando removemos da pilha o estado 5 correspondente ao lado direito id o estado 7 passa a ser o topo da pilha

44 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Como o estado 7 possui uma transaccedilatildeo sob F para o estado 10 empilhamos o estado 10 (siacutembolo F)

I7

T rarr T F

F rarr ( E )

F rarr id

I10

T rarr T F

F

45 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O algoritmo eacute o mesmo para todos

os analisadores sintaacuteticos LR

Soacute a tabela de anaacutelise eacute diferente

de um analisador para o outro

O algoritmo lecirc caracteres de um

buffer de entrada um de cada vez

46 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O analisador sintaacutetico shift-reduce

transfere um siacutembolo para pilha jaacute

o analisador sintaacutetico LR transfere

um estado

Cada estado resume a informaccedilatildeo

contida na pilha abaixo dele

47 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

A pilha conteacutem uma sequencia de

estados s0s1 sm onde sm estaacute

no topo

No meacutetodo SLR a pilha conteacutem

estados do autocircmato LR(0)

Por construccedilatildeo a cada estado eacute

associado 1 siacutembolo da gramaacutetica

48 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Lembrem-se de que os estados

correspondem a conj de itens e

que haacute uma transiccedilatildeo do estado i

para o estado j se GOTO(Ii X) = Ij

Todas as transiccedilotildees para o estado

j devem ser para o mesmo siacutembolo

da gramaacutetica X

49 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

Sm

Sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Desta forma cada estado exceto

o estado inicial 0 possui um uacutenico

siacutembolo da gramaacutetica associado a

ele

50 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

A tabela LR consiste em duas partes ACTION uma funccedilatildeo de accedilatildeo de anaacutelise e GOTO uma funccedilatildeo de transiccedilatildeo

1 A funccedilatildeo ACTION recebe como argumentos um estado i e um estado a (ou $) O valor de ACTION(i a) pode ter um dos quatro formatos

a) Shift j onde j eacute um estado

A accedilatildeo tomada pelo analisador sintaacutetico efetivamente transfere a entrada a para a pilha mas usa o estado j para representar a

51 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

b) Reduce Ararr β A accedilatildeo do analisador efetivamente reduz β no topo da pilha para A o lado esquerdo da produccedilatildeo

c) Accept O analisador aceita a entrada e termina a anaacutelise

d) Error O analisador descobre um erro em sua entrada passa o controle p o recuperador de erro que toma alguma accedilatildeo corretiva

2 Estendemos a funccedilatildeo GOTO definida sobre um conjunto de itens para os estados se GOTO(Ii A) = Ij entatildeo GOTO tambeacutem mapeia um estado i e um natildeo-terminal A para o estado j

52 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

Para descrever o comportamento de uma analisador LR eacute recomendaacutevel ter uma notaccedilatildeo representado o estado completo do analisador sua pilha e a entrada restante

Uma configuraccedilatildeo p um analisador LR eacute um par (s0s1sm aiai+1an $) O primeiro componente eacute o conteuacutedo da pilha com o topo agrave direita e o segundo componente representa a entrada restante

Essa configuraccedilatildeo representa a seguinte forma sentencial agrave direita (X0X1Xmaiai+1an) Assim como faria um analisador shift-reduce

53 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

A uacutenica diferenccedila eacute que em inveacutes de siacutembolos da gramaacutetica a pilha conteacutem estados a partir dos quais os siacutembolos da gramaacutetica podem ser recuperados

Ou seja Xi eacute o siacutembolo da gramaacutetica representado pelo estado si

Observe que s0 o estado inicial do analisador sintaacutetico natildeo representa um siacutembolo da gramaacutetica e serve como marcador de fundo da pilha aleacutem de desempenhar um papel importante na anaacutelise

54 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

O proacuteximo movimento do analisador a partir da configuraccedilatildeo dada eacute determinado pela leitura de ai o siacutembolo de entrada corrente e sm o estado do topo da pilha e entatildeo consultando a entrada ACTION[sm ai] na tabela de accedilatildeo de anaacutelise

As configuraccedilotildees restantes apoacutes cada um dos quatro tipos de movimentaccedilatildeo satildeo as seguintes

1 Se ACTION[Sm ai] = shift s o analisador sintaacutetico executa um movimento de transferecircncia (shift move) ele empilha o estado s e avanccedila da entrada resultando na configuraccedilatildeo (s0s1 sm ai+1an $)

55 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2 Se ACTION[Sm ai]=reduce Ararrβ entatildeo o analisador sintaacutetico executa um movimento de reduzir (reduce move) resultando na configuraccedilatildeo (s0s1 sm-rs aiai+1an $)

onde r eacute o comprimento de β e s = GOTO[sm-r A]

Aqui o analisador sintaacutetico incialmente desempilhou os r siacutembolos de estado da pilha expondo o estado sm-r

O analisador sintaacutetico entatildeo empilhou s a entrada para GOTO[sm-r A] na pilha O siacutembolo corrente da entrada natildeo eacute alterado em um movimento de reduzir

56 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2

Para os LR que construiremos Xm-r+1Xm a sequencia de siacutembolos da gramaacutetica correspondendo aos estados retirados da pilha sempre iratildeo casar com β o lado direito da produccedilatildeo sendo reduzida

A saiacuteda de um analisador LR eacute gerada apoacutes um movimento de reduzir executando a accedilatildeo semacircntica associada agrave produccedilatildeo que estaacute sendo reduzida

No momento vamos considerar que a saiacuteda consiste soacute na impressatildeo da produccedilatildeo de reduccedilatildeo

57 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

3 Se ACTION[sm ai] = accept a anaacutelise estaacute concluiacuteda

4 Se ACTION[sm ai] = error o analisador sintaacutetico descobriu um erro e ativa uma rotina para recuperaccedilatildeo de erro

Todos os analisadores sintaacuteticos LR se comportam dessa maneira

A uacutenica diferenccedila entre eles diz respeito a informaccedilatildeo contida nos campos ACTION e GOTO da tabela de anaacutelise

O algoritmo de anaacutelise LR eacute resumido nos proacuteximos slides

58 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

Entrada Uma cadeia de entrada w e uma tabela de anaacutelise com funccedilotildees ACTION e GOTO para uma gramaacutetica G

Saiacuteda Se w estaacute em L(G) os passos os passos de uma reduccedilatildeo de uma anaacutelise ascendente para w

Caso contraacuterio uma indicaccedilatildeo de erro

Meacutetodo Inicialmente o analisador sintaacutetico possui w$ no buffer de entrada e s0 em sua pilha onde s0 representa o estado inicial

O analisador sintaacutetico entatildeo executa o algoritmo

59 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

[PSEUDO] seja a o primeiro siacutembolo de w$ while (1) Seja s o estado no topo da pilha if (ACTION[s a] = shift t) empilha t na pilha seja a o proacuteximo siacutembolo da entrada else if (ACTION[s a] = reduce Ararr β) desempilha siacutembolos |β| da pilha faccedila o estado t agora ser o topo da pilha empilhe GOTO[t A] na pilha imprima a produccedilatildeo Ararr β else if (ACTION[s a] = accept) pare a anaacutelise terminou

else chame uma rotina de recuperaccedilatildeo de erros

60 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR ndash Exemplo

A tabela do proacuteximo slide monstra as funccedilotildees ACTION e GOTO de uma tabela de anaacutelise LR para a gramaacutetica de expressatildeo estudada nesta aula e repetida aqui com produccedilotildees numeradas

Os coacutedigos para as accedilotildees satildeo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

(1) E rarr E + T

(2) E rarr T

(3) T rarr T F

(4) T rarr F

(5) F rarr ( E )

(6) F rarr id

1 Si significa avanccedila na entrada e empilha o estado i na pilha

2 Rj significa reduce segundo a produccedilatildeo de nuacutemero j

3 Acc significa accept

4 Entrada em branco significa error

61 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Estado ACTION

id + ( ) $

0 s5 s4

1 S6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4

5 r6 r6 r6 r6

6 s5 s4

7 s5 s4

8 r6 s11

9 s1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

GOTO

E T F

1 2 3

8 2 3

9 3

10

O valor de GOTO(s a) para o

terminal a estaacute em ACTION da

tabela de anaacutelise conectado agrave

accedilatildeo de transferecircncia sob a

entrada a e o estado s

O GOTO fornece o GOTO[s a]

para os natildeo-terminais A

Ok

Mas como eu consigo os dados

desta tabela

62 Geovane Griesang

A sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

FOLLOW(E) = FOLLOW(Ersquo) = ) $

FOLLOW(T) = FOLLOW(Trsquo) = + ) $

FOLLOW(F) = + ) $

63 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Construindo tabelas de anaacutelise SLR

Esse meacutetodo eacute o mais simples dos LRs Vamos nos referir a tabela de anaacutelise construiacuteda por este meacutetodo como uma tabela SLR e o analisador LR usando uma tabela SLR como um analisador sintaacutetico SLR

O meacutetodo SLR comeccedila com os itens LR(0) e autocircmatos LR(0) ou seja dada uma gramaacutetica G estendemos G para produzir Grsquo com o novo siacutembolo inicial Srsquo A partir de Grsquo construiacutemos C a coleccedilatildeo canocircnica de conj de itens para Grsquo junto com a funccedilatildeo GOTO

Para construir as entradas ACTION e GOTO da tabela de anaacutelise usando o algoritmo a seguir eacute preciso que conheccedilamos FOLLOW(A) para cada natildeo-terminal A de uma gramaacutetica

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 23: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

23 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Agora existe um natildeo-terminal T imediatamente agrave direita de um ponto no segundo item incluiacutedo (E rarr T) de modo que acrescentamos as produccedilotildees-T T rarr T F e T rarr F

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

24 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Em seguida o natildeo-terminal F agrave direita de um ponto nos forccedila a incluir os itens Frarr (E) e F rarr id mas nenhum outro item precisa ser acrescentado

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr (E)

F rarr id

25 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Um modo conveniente de implementar a funccedilatildeo de fechamento (closure) eacute manter um arranjo booleano added indexado pelos natildeo-terminais de G de modo que added[B] seja definido como verdadeiro (true) se e quando incluirmos o item B rarr γ para cada produccedilatildeo-B B rarr γ

SetOfItems CLOSURE(I)

J=I

repeat

for (cada item A rarr αBβ em J)

for (cada produccedilatildeo B rarr γ de G)

if (B rarr γ natildeo estaacute em J)

Adicione B rarr γ em J

until mais nenhum item seja adicionado a J em um passo do loop

return J

Ix

A rarr αBβ

B rarr γ

26 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Observe que se uma produccedilatildeo-B for incluiacuteda no fechamento de I com o ponto mais agrave esquerda do seu lado direito entatildeo todas as produccedilotildees-B seratildeo igualmente incluiacutedas no fechamento Ex A rarr αBβ

Uma lista de natildeo-terminais B cujas produccedilotildees foram incluiacutedas dessa forma eacute suficiente Dividimos todos os conjuntos de itens de interesse em duas classes

1 Itens de base (kernel) o item inicial Srsquo rarr S e todos itens cujos pontos natildeo estatildeo mais agrave esquerda em seus lados direitos

2 Itens que natildeo satildeo de base todos os itens com seus pontos mais agrave esquerda em seus lados direitos exceto Srsquo rarr S Ex B rarr γ

Ix

A rarr αBβ

B rarr γ

27 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Aleacutem do mais cada conjunto de itens de interesse eacute formado a partir do fechamento de um conjunto de itens de base

Os itens adicionados no fechamento nunca podem ser itens de base naturalmente

Assim podemos representar os conjuntos de itens em que realmente estamos interessados com pouca memoacuteria se desprezarmos todos que natildeo satildeo itens de base sabendo que esses podem ser gerados novamente no processo de fechamento Ex B rarr γ exceto Srsquo rarr S

Ix

A rarr αBβ

B rarr γ

28 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

A segunda funccedilatildeo usada na construccedilatildeo da coleccedilatildeo canocircnica LR(0) eacute a funccedilatildeo de transiccedilatildeo GOTO(I X) onde I eacute o conjunto de itens de base e X eacute um siacutembolo da gramaacutetica

GOTO(I X) eacute definido como fechamento do conjunto de todos os itens [ArarrαXβ] tais que

[A rarr αXβ] estaacute em I

A funccedilatildeo de transiccedilatildeo GOTO eacute utilizada para definir as transaccedilotildees no autocircmato LR(0) para uma gramaacutetica

I1

Ersquo rarr E

E rarr E + T

I0

Ersquo rarr E

E rarr E + T

E

29 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Estados do autocircmato correspondem aos conjuntos de itens e GOTO(I +) especifica a transaccedilatildeo do estado I para um novo estado I sob a entrada X

Se I representa o conjunto com dois itens [Ersquo rarr E][E rarr E+T] entatildeo GOTO(I +) conteacutem os itens

Calculamos GOTO(I +) examinando os itens em I com o + imediatamente agrave direita do ponto

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

A rarr αXβ

A rarr αXβ

I1

Ersquo rarr E

E rarr E + T +

I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

30 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Calculamos GOTO(I +) examinando os itens em I com o + imediatamente agrave direita do ponto

O item Ersquo rarr E natildeo eacute desse tipo mas Ersquo rarr E + T sim

Movemos o ponto para imediatamente agrave direita de + e obtemos ErarrE + T

e entatildeo calculamos o fechamento desse conjunto unitaacuterio

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Itens em I

[Ersquo rarr E]

[E rarr E+T]

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I1

Ersquo rarr E

E rarr E + T +

31 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Agora estamos prontos para construir C a coleccedilatildeo canocircnica de conjuntos

de itens LR(0) para uma gramaacutetica estendida Grsquo

void Itens(Grsquo)

C = CLOSURE([Srsquo rarr S])

repeat

for (cada conjunto de itens I em C)

for (cada siacutembolo da gramaacutetica X)

if (GOTO(I X) natildeo eacute vazio e natildeo estaacute em C)

Adicione GOTO(I X) em C

until nenhum novo conjunto de itens seja adicionado em C em uma rodada

32 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

A ideia central por traacutes da anaacutelise ldquoLR Simplesrdquo ou SLR eacute a construccedilatildeo do autocircmato LR(0) a partir da gramaacutetica dada

Os estados desses autocircmatos satildeo os conjuntos de itens da coleccedilatildeo LR canocircnica e as transiccedilotildees satildeo dadas pela funccedilatildeo de transiccedilatildeo GOTO

O estado inicial do autocircmato LR eacute dado por CLOSURE([Srsquo rarr S]) onde Srsquo eacute o siacutembolo inicial da gramaacutetica estendida

Todos os estados satildeo estados de aceitaccedilatildeo Nos referimos ao ldquoestado jrdquo como o estado correspondente ao conjunto de itens Ij

33 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E

Aceitar $

I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

34 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Como os autocircmatos LR(0) podem ajudar-nos a decidir por uma das accedilotildees shift-reduce (veja as decisotildees entre shift-reduce a seguir)

Suponha que a cadeia γ dos siacutembolos da gramaacutetica leve o autocircmato LR(0) do estado inicial 0 para algum estado j

Desta forma avance sobre o proacuteximo siacutembolo a se o estado j possuir uma transaccedilatildeo sob a

Caso contraacuterio escolha reduzir

Os itens no estado j nos diratildeo qual produccedilatildeo usar

35 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

O algoritmo LR abaixo utiliza sua pilha para acompanhar os estados e tambeacutem os siacutembolos da gramaacutetica

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Na verdade

O siacutembolo da gramaacutetica pode ser

recuperado a parir do estado de

modo que a pilha possua estados

ao inveacutes de siacutembolos

36 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Usamos uma pilha

p conter os estados

Os siacutembolos que correspondem aos estados estatildeo na coluna ldquoSiacutembolosrdquo

A pilha da linha (1) tecircm o estado inicial 0 do autocircmato

37 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Portanto fazemos a transferecircncia

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

O siacutembolo da linha 1 eacute o marcador de fundo da pilha $

O proacuteximo siacutembolo de entrada eacute id e o estado 0 tem uma transiccedilatildeo sob id p o estado 5

38 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

A partir do item [F rarr id ] no estado 5 efetuamos uma reduccedilatildeo segundo a produccedilatildeo F rarr id

Na linha 2 o estado 5 eacute empilhado (siacutembolo id)

I5

F rarr id

Natildeo haacute transiccedilatildeo a partir do estado 5 sob a entrada por isso reduzimos

39 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o lado direito da produccedilatildeo da linha (2) eacute id correspondendo ao estado 5 e seu lado direito eacute o F

Com os estados ao desempilhar o estado 5 correspondendo ao siacutembolo id o estado 0 passa a ser o topo

0 F $

40 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id I3

T rarr F

F

Procuramos uma transiccedilatildeo sob F o lado esquerdo da produccedilatildeo

0 F $

O estado 0 possui uma transiccedilatildeo em F p o estado 3 onde empilhamos o estado 3 com o siacutembolo F Ver linha (3)

3

41 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I3

T rarr F

Natildeo haacute transiccedilatildeo a partir do estado 3 sob a entrada por isso reduzimos

A partir do item [T rarr F ] no estado 3 efetuamos uma reduccedilatildeo segundo a produccedilatildeo T rarr F

3

0

T $

42 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

I7

T rarr T F

F rarr ( E )

F rarr id

id

Como outro exemplo considere a linha (5) com o estado 7 referente ao siacutembolo no topo da pilha

Esse estado 7 possui uma transaccedilatildeo para o estado 5 sob a entrada id de modo que empilhamos o estado 5

43 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o estado 5 natildeo possui transiccedilotildees de modo que reduzimos segundo F rarr id

quando removemos da pilha o estado 5 correspondente ao lado direito id o estado 7 passa a ser o topo da pilha

44 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Como o estado 7 possui uma transaccedilatildeo sob F para o estado 10 empilhamos o estado 10 (siacutembolo F)

I7

T rarr T F

F rarr ( E )

F rarr id

I10

T rarr T F

F

45 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O algoritmo eacute o mesmo para todos

os analisadores sintaacuteticos LR

Soacute a tabela de anaacutelise eacute diferente

de um analisador para o outro

O algoritmo lecirc caracteres de um

buffer de entrada um de cada vez

46 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O analisador sintaacutetico shift-reduce

transfere um siacutembolo para pilha jaacute

o analisador sintaacutetico LR transfere

um estado

Cada estado resume a informaccedilatildeo

contida na pilha abaixo dele

47 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

A pilha conteacutem uma sequencia de

estados s0s1 sm onde sm estaacute

no topo

No meacutetodo SLR a pilha conteacutem

estados do autocircmato LR(0)

Por construccedilatildeo a cada estado eacute

associado 1 siacutembolo da gramaacutetica

48 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Lembrem-se de que os estados

correspondem a conj de itens e

que haacute uma transiccedilatildeo do estado i

para o estado j se GOTO(Ii X) = Ij

Todas as transiccedilotildees para o estado

j devem ser para o mesmo siacutembolo

da gramaacutetica X

49 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

Sm

Sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Desta forma cada estado exceto

o estado inicial 0 possui um uacutenico

siacutembolo da gramaacutetica associado a

ele

50 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

A tabela LR consiste em duas partes ACTION uma funccedilatildeo de accedilatildeo de anaacutelise e GOTO uma funccedilatildeo de transiccedilatildeo

1 A funccedilatildeo ACTION recebe como argumentos um estado i e um estado a (ou $) O valor de ACTION(i a) pode ter um dos quatro formatos

a) Shift j onde j eacute um estado

A accedilatildeo tomada pelo analisador sintaacutetico efetivamente transfere a entrada a para a pilha mas usa o estado j para representar a

51 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

b) Reduce Ararr β A accedilatildeo do analisador efetivamente reduz β no topo da pilha para A o lado esquerdo da produccedilatildeo

c) Accept O analisador aceita a entrada e termina a anaacutelise

d) Error O analisador descobre um erro em sua entrada passa o controle p o recuperador de erro que toma alguma accedilatildeo corretiva

2 Estendemos a funccedilatildeo GOTO definida sobre um conjunto de itens para os estados se GOTO(Ii A) = Ij entatildeo GOTO tambeacutem mapeia um estado i e um natildeo-terminal A para o estado j

52 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

Para descrever o comportamento de uma analisador LR eacute recomendaacutevel ter uma notaccedilatildeo representado o estado completo do analisador sua pilha e a entrada restante

Uma configuraccedilatildeo p um analisador LR eacute um par (s0s1sm aiai+1an $) O primeiro componente eacute o conteuacutedo da pilha com o topo agrave direita e o segundo componente representa a entrada restante

Essa configuraccedilatildeo representa a seguinte forma sentencial agrave direita (X0X1Xmaiai+1an) Assim como faria um analisador shift-reduce

53 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

A uacutenica diferenccedila eacute que em inveacutes de siacutembolos da gramaacutetica a pilha conteacutem estados a partir dos quais os siacutembolos da gramaacutetica podem ser recuperados

Ou seja Xi eacute o siacutembolo da gramaacutetica representado pelo estado si

Observe que s0 o estado inicial do analisador sintaacutetico natildeo representa um siacutembolo da gramaacutetica e serve como marcador de fundo da pilha aleacutem de desempenhar um papel importante na anaacutelise

54 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

O proacuteximo movimento do analisador a partir da configuraccedilatildeo dada eacute determinado pela leitura de ai o siacutembolo de entrada corrente e sm o estado do topo da pilha e entatildeo consultando a entrada ACTION[sm ai] na tabela de accedilatildeo de anaacutelise

As configuraccedilotildees restantes apoacutes cada um dos quatro tipos de movimentaccedilatildeo satildeo as seguintes

1 Se ACTION[Sm ai] = shift s o analisador sintaacutetico executa um movimento de transferecircncia (shift move) ele empilha o estado s e avanccedila da entrada resultando na configuraccedilatildeo (s0s1 sm ai+1an $)

55 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2 Se ACTION[Sm ai]=reduce Ararrβ entatildeo o analisador sintaacutetico executa um movimento de reduzir (reduce move) resultando na configuraccedilatildeo (s0s1 sm-rs aiai+1an $)

onde r eacute o comprimento de β e s = GOTO[sm-r A]

Aqui o analisador sintaacutetico incialmente desempilhou os r siacutembolos de estado da pilha expondo o estado sm-r

O analisador sintaacutetico entatildeo empilhou s a entrada para GOTO[sm-r A] na pilha O siacutembolo corrente da entrada natildeo eacute alterado em um movimento de reduzir

56 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2

Para os LR que construiremos Xm-r+1Xm a sequencia de siacutembolos da gramaacutetica correspondendo aos estados retirados da pilha sempre iratildeo casar com β o lado direito da produccedilatildeo sendo reduzida

A saiacuteda de um analisador LR eacute gerada apoacutes um movimento de reduzir executando a accedilatildeo semacircntica associada agrave produccedilatildeo que estaacute sendo reduzida

No momento vamos considerar que a saiacuteda consiste soacute na impressatildeo da produccedilatildeo de reduccedilatildeo

57 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

3 Se ACTION[sm ai] = accept a anaacutelise estaacute concluiacuteda

4 Se ACTION[sm ai] = error o analisador sintaacutetico descobriu um erro e ativa uma rotina para recuperaccedilatildeo de erro

Todos os analisadores sintaacuteticos LR se comportam dessa maneira

A uacutenica diferenccedila entre eles diz respeito a informaccedilatildeo contida nos campos ACTION e GOTO da tabela de anaacutelise

O algoritmo de anaacutelise LR eacute resumido nos proacuteximos slides

58 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

Entrada Uma cadeia de entrada w e uma tabela de anaacutelise com funccedilotildees ACTION e GOTO para uma gramaacutetica G

Saiacuteda Se w estaacute em L(G) os passos os passos de uma reduccedilatildeo de uma anaacutelise ascendente para w

Caso contraacuterio uma indicaccedilatildeo de erro

Meacutetodo Inicialmente o analisador sintaacutetico possui w$ no buffer de entrada e s0 em sua pilha onde s0 representa o estado inicial

O analisador sintaacutetico entatildeo executa o algoritmo

59 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

[PSEUDO] seja a o primeiro siacutembolo de w$ while (1) Seja s o estado no topo da pilha if (ACTION[s a] = shift t) empilha t na pilha seja a o proacuteximo siacutembolo da entrada else if (ACTION[s a] = reduce Ararr β) desempilha siacutembolos |β| da pilha faccedila o estado t agora ser o topo da pilha empilhe GOTO[t A] na pilha imprima a produccedilatildeo Ararr β else if (ACTION[s a] = accept) pare a anaacutelise terminou

else chame uma rotina de recuperaccedilatildeo de erros

60 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR ndash Exemplo

A tabela do proacuteximo slide monstra as funccedilotildees ACTION e GOTO de uma tabela de anaacutelise LR para a gramaacutetica de expressatildeo estudada nesta aula e repetida aqui com produccedilotildees numeradas

Os coacutedigos para as accedilotildees satildeo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

(1) E rarr E + T

(2) E rarr T

(3) T rarr T F

(4) T rarr F

(5) F rarr ( E )

(6) F rarr id

1 Si significa avanccedila na entrada e empilha o estado i na pilha

2 Rj significa reduce segundo a produccedilatildeo de nuacutemero j

3 Acc significa accept

4 Entrada em branco significa error

61 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Estado ACTION

id + ( ) $

0 s5 s4

1 S6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4

5 r6 r6 r6 r6

6 s5 s4

7 s5 s4

8 r6 s11

9 s1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

GOTO

E T F

1 2 3

8 2 3

9 3

10

O valor de GOTO(s a) para o

terminal a estaacute em ACTION da

tabela de anaacutelise conectado agrave

accedilatildeo de transferecircncia sob a

entrada a e o estado s

O GOTO fornece o GOTO[s a]

para os natildeo-terminais A

Ok

Mas como eu consigo os dados

desta tabela

62 Geovane Griesang

A sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

FOLLOW(E) = FOLLOW(Ersquo) = ) $

FOLLOW(T) = FOLLOW(Trsquo) = + ) $

FOLLOW(F) = + ) $

63 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Construindo tabelas de anaacutelise SLR

Esse meacutetodo eacute o mais simples dos LRs Vamos nos referir a tabela de anaacutelise construiacuteda por este meacutetodo como uma tabela SLR e o analisador LR usando uma tabela SLR como um analisador sintaacutetico SLR

O meacutetodo SLR comeccedila com os itens LR(0) e autocircmatos LR(0) ou seja dada uma gramaacutetica G estendemos G para produzir Grsquo com o novo siacutembolo inicial Srsquo A partir de Grsquo construiacutemos C a coleccedilatildeo canocircnica de conj de itens para Grsquo junto com a funccedilatildeo GOTO

Para construir as entradas ACTION e GOTO da tabela de anaacutelise usando o algoritmo a seguir eacute preciso que conheccedilamos FOLLOW(A) para cada natildeo-terminal A de uma gramaacutetica

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 24: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

24 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Exemplo

Em seguida o natildeo-terminal F agrave direita de um ponto nos forccedila a incluir os itens Frarr (E) e F rarr id mas nenhum outro item precisa ser acrescentado

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr (E)

F rarr id

25 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Um modo conveniente de implementar a funccedilatildeo de fechamento (closure) eacute manter um arranjo booleano added indexado pelos natildeo-terminais de G de modo que added[B] seja definido como verdadeiro (true) se e quando incluirmos o item B rarr γ para cada produccedilatildeo-B B rarr γ

SetOfItems CLOSURE(I)

J=I

repeat

for (cada item A rarr αBβ em J)

for (cada produccedilatildeo B rarr γ de G)

if (B rarr γ natildeo estaacute em J)

Adicione B rarr γ em J

until mais nenhum item seja adicionado a J em um passo do loop

return J

Ix

A rarr αBβ

B rarr γ

26 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Observe que se uma produccedilatildeo-B for incluiacuteda no fechamento de I com o ponto mais agrave esquerda do seu lado direito entatildeo todas as produccedilotildees-B seratildeo igualmente incluiacutedas no fechamento Ex A rarr αBβ

Uma lista de natildeo-terminais B cujas produccedilotildees foram incluiacutedas dessa forma eacute suficiente Dividimos todos os conjuntos de itens de interesse em duas classes

1 Itens de base (kernel) o item inicial Srsquo rarr S e todos itens cujos pontos natildeo estatildeo mais agrave esquerda em seus lados direitos

2 Itens que natildeo satildeo de base todos os itens com seus pontos mais agrave esquerda em seus lados direitos exceto Srsquo rarr S Ex B rarr γ

Ix

A rarr αBβ

B rarr γ

27 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Aleacutem do mais cada conjunto de itens de interesse eacute formado a partir do fechamento de um conjunto de itens de base

Os itens adicionados no fechamento nunca podem ser itens de base naturalmente

Assim podemos representar os conjuntos de itens em que realmente estamos interessados com pouca memoacuteria se desprezarmos todos que natildeo satildeo itens de base sabendo que esses podem ser gerados novamente no processo de fechamento Ex B rarr γ exceto Srsquo rarr S

Ix

A rarr αBβ

B rarr γ

28 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

A segunda funccedilatildeo usada na construccedilatildeo da coleccedilatildeo canocircnica LR(0) eacute a funccedilatildeo de transiccedilatildeo GOTO(I X) onde I eacute o conjunto de itens de base e X eacute um siacutembolo da gramaacutetica

GOTO(I X) eacute definido como fechamento do conjunto de todos os itens [ArarrαXβ] tais que

[A rarr αXβ] estaacute em I

A funccedilatildeo de transiccedilatildeo GOTO eacute utilizada para definir as transaccedilotildees no autocircmato LR(0) para uma gramaacutetica

I1

Ersquo rarr E

E rarr E + T

I0

Ersquo rarr E

E rarr E + T

E

29 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Estados do autocircmato correspondem aos conjuntos de itens e GOTO(I +) especifica a transaccedilatildeo do estado I para um novo estado I sob a entrada X

Se I representa o conjunto com dois itens [Ersquo rarr E][E rarr E+T] entatildeo GOTO(I +) conteacutem os itens

Calculamos GOTO(I +) examinando os itens em I com o + imediatamente agrave direita do ponto

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

A rarr αXβ

A rarr αXβ

I1

Ersquo rarr E

E rarr E + T +

I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

30 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Calculamos GOTO(I +) examinando os itens em I com o + imediatamente agrave direita do ponto

O item Ersquo rarr E natildeo eacute desse tipo mas Ersquo rarr E + T sim

Movemos o ponto para imediatamente agrave direita de + e obtemos ErarrE + T

e entatildeo calculamos o fechamento desse conjunto unitaacuterio

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Itens em I

[Ersquo rarr E]

[E rarr E+T]

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I1

Ersquo rarr E

E rarr E + T +

31 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Agora estamos prontos para construir C a coleccedilatildeo canocircnica de conjuntos

de itens LR(0) para uma gramaacutetica estendida Grsquo

void Itens(Grsquo)

C = CLOSURE([Srsquo rarr S])

repeat

for (cada conjunto de itens I em C)

for (cada siacutembolo da gramaacutetica X)

if (GOTO(I X) natildeo eacute vazio e natildeo estaacute em C)

Adicione GOTO(I X) em C

until nenhum novo conjunto de itens seja adicionado em C em uma rodada

32 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

A ideia central por traacutes da anaacutelise ldquoLR Simplesrdquo ou SLR eacute a construccedilatildeo do autocircmato LR(0) a partir da gramaacutetica dada

Os estados desses autocircmatos satildeo os conjuntos de itens da coleccedilatildeo LR canocircnica e as transiccedilotildees satildeo dadas pela funccedilatildeo de transiccedilatildeo GOTO

O estado inicial do autocircmato LR eacute dado por CLOSURE([Srsquo rarr S]) onde Srsquo eacute o siacutembolo inicial da gramaacutetica estendida

Todos os estados satildeo estados de aceitaccedilatildeo Nos referimos ao ldquoestado jrdquo como o estado correspondente ao conjunto de itens Ij

33 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E

Aceitar $

I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

34 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Como os autocircmatos LR(0) podem ajudar-nos a decidir por uma das accedilotildees shift-reduce (veja as decisotildees entre shift-reduce a seguir)

Suponha que a cadeia γ dos siacutembolos da gramaacutetica leve o autocircmato LR(0) do estado inicial 0 para algum estado j

Desta forma avance sobre o proacuteximo siacutembolo a se o estado j possuir uma transaccedilatildeo sob a

Caso contraacuterio escolha reduzir

Os itens no estado j nos diratildeo qual produccedilatildeo usar

35 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

O algoritmo LR abaixo utiliza sua pilha para acompanhar os estados e tambeacutem os siacutembolos da gramaacutetica

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Na verdade

O siacutembolo da gramaacutetica pode ser

recuperado a parir do estado de

modo que a pilha possua estados

ao inveacutes de siacutembolos

36 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Usamos uma pilha

p conter os estados

Os siacutembolos que correspondem aos estados estatildeo na coluna ldquoSiacutembolosrdquo

A pilha da linha (1) tecircm o estado inicial 0 do autocircmato

37 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Portanto fazemos a transferecircncia

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

O siacutembolo da linha 1 eacute o marcador de fundo da pilha $

O proacuteximo siacutembolo de entrada eacute id e o estado 0 tem uma transiccedilatildeo sob id p o estado 5

38 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

A partir do item [F rarr id ] no estado 5 efetuamos uma reduccedilatildeo segundo a produccedilatildeo F rarr id

Na linha 2 o estado 5 eacute empilhado (siacutembolo id)

I5

F rarr id

Natildeo haacute transiccedilatildeo a partir do estado 5 sob a entrada por isso reduzimos

39 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o lado direito da produccedilatildeo da linha (2) eacute id correspondendo ao estado 5 e seu lado direito eacute o F

Com os estados ao desempilhar o estado 5 correspondendo ao siacutembolo id o estado 0 passa a ser o topo

0 F $

40 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id I3

T rarr F

F

Procuramos uma transiccedilatildeo sob F o lado esquerdo da produccedilatildeo

0 F $

O estado 0 possui uma transiccedilatildeo em F p o estado 3 onde empilhamos o estado 3 com o siacutembolo F Ver linha (3)

3

41 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I3

T rarr F

Natildeo haacute transiccedilatildeo a partir do estado 3 sob a entrada por isso reduzimos

A partir do item [T rarr F ] no estado 3 efetuamos uma reduccedilatildeo segundo a produccedilatildeo T rarr F

3

0

T $

42 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

I7

T rarr T F

F rarr ( E )

F rarr id

id

Como outro exemplo considere a linha (5) com o estado 7 referente ao siacutembolo no topo da pilha

Esse estado 7 possui uma transaccedilatildeo para o estado 5 sob a entrada id de modo que empilhamos o estado 5

43 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o estado 5 natildeo possui transiccedilotildees de modo que reduzimos segundo F rarr id

quando removemos da pilha o estado 5 correspondente ao lado direito id o estado 7 passa a ser o topo da pilha

44 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Como o estado 7 possui uma transaccedilatildeo sob F para o estado 10 empilhamos o estado 10 (siacutembolo F)

I7

T rarr T F

F rarr ( E )

F rarr id

I10

T rarr T F

F

45 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O algoritmo eacute o mesmo para todos

os analisadores sintaacuteticos LR

Soacute a tabela de anaacutelise eacute diferente

de um analisador para o outro

O algoritmo lecirc caracteres de um

buffer de entrada um de cada vez

46 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O analisador sintaacutetico shift-reduce

transfere um siacutembolo para pilha jaacute

o analisador sintaacutetico LR transfere

um estado

Cada estado resume a informaccedilatildeo

contida na pilha abaixo dele

47 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

A pilha conteacutem uma sequencia de

estados s0s1 sm onde sm estaacute

no topo

No meacutetodo SLR a pilha conteacutem

estados do autocircmato LR(0)

Por construccedilatildeo a cada estado eacute

associado 1 siacutembolo da gramaacutetica

48 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Lembrem-se de que os estados

correspondem a conj de itens e

que haacute uma transiccedilatildeo do estado i

para o estado j se GOTO(Ii X) = Ij

Todas as transiccedilotildees para o estado

j devem ser para o mesmo siacutembolo

da gramaacutetica X

49 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

Sm

Sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Desta forma cada estado exceto

o estado inicial 0 possui um uacutenico

siacutembolo da gramaacutetica associado a

ele

50 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

A tabela LR consiste em duas partes ACTION uma funccedilatildeo de accedilatildeo de anaacutelise e GOTO uma funccedilatildeo de transiccedilatildeo

1 A funccedilatildeo ACTION recebe como argumentos um estado i e um estado a (ou $) O valor de ACTION(i a) pode ter um dos quatro formatos

a) Shift j onde j eacute um estado

A accedilatildeo tomada pelo analisador sintaacutetico efetivamente transfere a entrada a para a pilha mas usa o estado j para representar a

51 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

b) Reduce Ararr β A accedilatildeo do analisador efetivamente reduz β no topo da pilha para A o lado esquerdo da produccedilatildeo

c) Accept O analisador aceita a entrada e termina a anaacutelise

d) Error O analisador descobre um erro em sua entrada passa o controle p o recuperador de erro que toma alguma accedilatildeo corretiva

2 Estendemos a funccedilatildeo GOTO definida sobre um conjunto de itens para os estados se GOTO(Ii A) = Ij entatildeo GOTO tambeacutem mapeia um estado i e um natildeo-terminal A para o estado j

52 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

Para descrever o comportamento de uma analisador LR eacute recomendaacutevel ter uma notaccedilatildeo representado o estado completo do analisador sua pilha e a entrada restante

Uma configuraccedilatildeo p um analisador LR eacute um par (s0s1sm aiai+1an $) O primeiro componente eacute o conteuacutedo da pilha com o topo agrave direita e o segundo componente representa a entrada restante

Essa configuraccedilatildeo representa a seguinte forma sentencial agrave direita (X0X1Xmaiai+1an) Assim como faria um analisador shift-reduce

53 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

A uacutenica diferenccedila eacute que em inveacutes de siacutembolos da gramaacutetica a pilha conteacutem estados a partir dos quais os siacutembolos da gramaacutetica podem ser recuperados

Ou seja Xi eacute o siacutembolo da gramaacutetica representado pelo estado si

Observe que s0 o estado inicial do analisador sintaacutetico natildeo representa um siacutembolo da gramaacutetica e serve como marcador de fundo da pilha aleacutem de desempenhar um papel importante na anaacutelise

54 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

O proacuteximo movimento do analisador a partir da configuraccedilatildeo dada eacute determinado pela leitura de ai o siacutembolo de entrada corrente e sm o estado do topo da pilha e entatildeo consultando a entrada ACTION[sm ai] na tabela de accedilatildeo de anaacutelise

As configuraccedilotildees restantes apoacutes cada um dos quatro tipos de movimentaccedilatildeo satildeo as seguintes

1 Se ACTION[Sm ai] = shift s o analisador sintaacutetico executa um movimento de transferecircncia (shift move) ele empilha o estado s e avanccedila da entrada resultando na configuraccedilatildeo (s0s1 sm ai+1an $)

55 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2 Se ACTION[Sm ai]=reduce Ararrβ entatildeo o analisador sintaacutetico executa um movimento de reduzir (reduce move) resultando na configuraccedilatildeo (s0s1 sm-rs aiai+1an $)

onde r eacute o comprimento de β e s = GOTO[sm-r A]

Aqui o analisador sintaacutetico incialmente desempilhou os r siacutembolos de estado da pilha expondo o estado sm-r

O analisador sintaacutetico entatildeo empilhou s a entrada para GOTO[sm-r A] na pilha O siacutembolo corrente da entrada natildeo eacute alterado em um movimento de reduzir

56 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2

Para os LR que construiremos Xm-r+1Xm a sequencia de siacutembolos da gramaacutetica correspondendo aos estados retirados da pilha sempre iratildeo casar com β o lado direito da produccedilatildeo sendo reduzida

A saiacuteda de um analisador LR eacute gerada apoacutes um movimento de reduzir executando a accedilatildeo semacircntica associada agrave produccedilatildeo que estaacute sendo reduzida

No momento vamos considerar que a saiacuteda consiste soacute na impressatildeo da produccedilatildeo de reduccedilatildeo

57 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

3 Se ACTION[sm ai] = accept a anaacutelise estaacute concluiacuteda

4 Se ACTION[sm ai] = error o analisador sintaacutetico descobriu um erro e ativa uma rotina para recuperaccedilatildeo de erro

Todos os analisadores sintaacuteticos LR se comportam dessa maneira

A uacutenica diferenccedila entre eles diz respeito a informaccedilatildeo contida nos campos ACTION e GOTO da tabela de anaacutelise

O algoritmo de anaacutelise LR eacute resumido nos proacuteximos slides

58 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

Entrada Uma cadeia de entrada w e uma tabela de anaacutelise com funccedilotildees ACTION e GOTO para uma gramaacutetica G

Saiacuteda Se w estaacute em L(G) os passos os passos de uma reduccedilatildeo de uma anaacutelise ascendente para w

Caso contraacuterio uma indicaccedilatildeo de erro

Meacutetodo Inicialmente o analisador sintaacutetico possui w$ no buffer de entrada e s0 em sua pilha onde s0 representa o estado inicial

O analisador sintaacutetico entatildeo executa o algoritmo

59 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

[PSEUDO] seja a o primeiro siacutembolo de w$ while (1) Seja s o estado no topo da pilha if (ACTION[s a] = shift t) empilha t na pilha seja a o proacuteximo siacutembolo da entrada else if (ACTION[s a] = reduce Ararr β) desempilha siacutembolos |β| da pilha faccedila o estado t agora ser o topo da pilha empilhe GOTO[t A] na pilha imprima a produccedilatildeo Ararr β else if (ACTION[s a] = accept) pare a anaacutelise terminou

else chame uma rotina de recuperaccedilatildeo de erros

60 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR ndash Exemplo

A tabela do proacuteximo slide monstra as funccedilotildees ACTION e GOTO de uma tabela de anaacutelise LR para a gramaacutetica de expressatildeo estudada nesta aula e repetida aqui com produccedilotildees numeradas

Os coacutedigos para as accedilotildees satildeo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

(1) E rarr E + T

(2) E rarr T

(3) T rarr T F

(4) T rarr F

(5) F rarr ( E )

(6) F rarr id

1 Si significa avanccedila na entrada e empilha o estado i na pilha

2 Rj significa reduce segundo a produccedilatildeo de nuacutemero j

3 Acc significa accept

4 Entrada em branco significa error

61 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Estado ACTION

id + ( ) $

0 s5 s4

1 S6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4

5 r6 r6 r6 r6

6 s5 s4

7 s5 s4

8 r6 s11

9 s1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

GOTO

E T F

1 2 3

8 2 3

9 3

10

O valor de GOTO(s a) para o

terminal a estaacute em ACTION da

tabela de anaacutelise conectado agrave

accedilatildeo de transferecircncia sob a

entrada a e o estado s

O GOTO fornece o GOTO[s a]

para os natildeo-terminais A

Ok

Mas como eu consigo os dados

desta tabela

62 Geovane Griesang

A sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

FOLLOW(E) = FOLLOW(Ersquo) = ) $

FOLLOW(T) = FOLLOW(Trsquo) = + ) $

FOLLOW(F) = + ) $

63 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Construindo tabelas de anaacutelise SLR

Esse meacutetodo eacute o mais simples dos LRs Vamos nos referir a tabela de anaacutelise construiacuteda por este meacutetodo como uma tabela SLR e o analisador LR usando uma tabela SLR como um analisador sintaacutetico SLR

O meacutetodo SLR comeccedila com os itens LR(0) e autocircmatos LR(0) ou seja dada uma gramaacutetica G estendemos G para produzir Grsquo com o novo siacutembolo inicial Srsquo A partir de Grsquo construiacutemos C a coleccedilatildeo canocircnica de conj de itens para Grsquo junto com a funccedilatildeo GOTO

Para construir as entradas ACTION e GOTO da tabela de anaacutelise usando o algoritmo a seguir eacute preciso que conheccedilamos FOLLOW(A) para cada natildeo-terminal A de uma gramaacutetica

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 25: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

25 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Um modo conveniente de implementar a funccedilatildeo de fechamento (closure) eacute manter um arranjo booleano added indexado pelos natildeo-terminais de G de modo que added[B] seja definido como verdadeiro (true) se e quando incluirmos o item B rarr γ para cada produccedilatildeo-B B rarr γ

SetOfItems CLOSURE(I)

J=I

repeat

for (cada item A rarr αBβ em J)

for (cada produccedilatildeo B rarr γ de G)

if (B rarr γ natildeo estaacute em J)

Adicione B rarr γ em J

until mais nenhum item seja adicionado a J em um passo do loop

return J

Ix

A rarr αBβ

B rarr γ

26 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Observe que se uma produccedilatildeo-B for incluiacuteda no fechamento de I com o ponto mais agrave esquerda do seu lado direito entatildeo todas as produccedilotildees-B seratildeo igualmente incluiacutedas no fechamento Ex A rarr αBβ

Uma lista de natildeo-terminais B cujas produccedilotildees foram incluiacutedas dessa forma eacute suficiente Dividimos todos os conjuntos de itens de interesse em duas classes

1 Itens de base (kernel) o item inicial Srsquo rarr S e todos itens cujos pontos natildeo estatildeo mais agrave esquerda em seus lados direitos

2 Itens que natildeo satildeo de base todos os itens com seus pontos mais agrave esquerda em seus lados direitos exceto Srsquo rarr S Ex B rarr γ

Ix

A rarr αBβ

B rarr γ

27 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Aleacutem do mais cada conjunto de itens de interesse eacute formado a partir do fechamento de um conjunto de itens de base

Os itens adicionados no fechamento nunca podem ser itens de base naturalmente

Assim podemos representar os conjuntos de itens em que realmente estamos interessados com pouca memoacuteria se desprezarmos todos que natildeo satildeo itens de base sabendo que esses podem ser gerados novamente no processo de fechamento Ex B rarr γ exceto Srsquo rarr S

Ix

A rarr αBβ

B rarr γ

28 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

A segunda funccedilatildeo usada na construccedilatildeo da coleccedilatildeo canocircnica LR(0) eacute a funccedilatildeo de transiccedilatildeo GOTO(I X) onde I eacute o conjunto de itens de base e X eacute um siacutembolo da gramaacutetica

GOTO(I X) eacute definido como fechamento do conjunto de todos os itens [ArarrαXβ] tais que

[A rarr αXβ] estaacute em I

A funccedilatildeo de transiccedilatildeo GOTO eacute utilizada para definir as transaccedilotildees no autocircmato LR(0) para uma gramaacutetica

I1

Ersquo rarr E

E rarr E + T

I0

Ersquo rarr E

E rarr E + T

E

29 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Estados do autocircmato correspondem aos conjuntos de itens e GOTO(I +) especifica a transaccedilatildeo do estado I para um novo estado I sob a entrada X

Se I representa o conjunto com dois itens [Ersquo rarr E][E rarr E+T] entatildeo GOTO(I +) conteacutem os itens

Calculamos GOTO(I +) examinando os itens em I com o + imediatamente agrave direita do ponto

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

A rarr αXβ

A rarr αXβ

I1

Ersquo rarr E

E rarr E + T +

I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

30 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Calculamos GOTO(I +) examinando os itens em I com o + imediatamente agrave direita do ponto

O item Ersquo rarr E natildeo eacute desse tipo mas Ersquo rarr E + T sim

Movemos o ponto para imediatamente agrave direita de + e obtemos ErarrE + T

e entatildeo calculamos o fechamento desse conjunto unitaacuterio

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Itens em I

[Ersquo rarr E]

[E rarr E+T]

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I1

Ersquo rarr E

E rarr E + T +

31 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Agora estamos prontos para construir C a coleccedilatildeo canocircnica de conjuntos

de itens LR(0) para uma gramaacutetica estendida Grsquo

void Itens(Grsquo)

C = CLOSURE([Srsquo rarr S])

repeat

for (cada conjunto de itens I em C)

for (cada siacutembolo da gramaacutetica X)

if (GOTO(I X) natildeo eacute vazio e natildeo estaacute em C)

Adicione GOTO(I X) em C

until nenhum novo conjunto de itens seja adicionado em C em uma rodada

32 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

A ideia central por traacutes da anaacutelise ldquoLR Simplesrdquo ou SLR eacute a construccedilatildeo do autocircmato LR(0) a partir da gramaacutetica dada

Os estados desses autocircmatos satildeo os conjuntos de itens da coleccedilatildeo LR canocircnica e as transiccedilotildees satildeo dadas pela funccedilatildeo de transiccedilatildeo GOTO

O estado inicial do autocircmato LR eacute dado por CLOSURE([Srsquo rarr S]) onde Srsquo eacute o siacutembolo inicial da gramaacutetica estendida

Todos os estados satildeo estados de aceitaccedilatildeo Nos referimos ao ldquoestado jrdquo como o estado correspondente ao conjunto de itens Ij

33 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E

Aceitar $

I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

34 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Como os autocircmatos LR(0) podem ajudar-nos a decidir por uma das accedilotildees shift-reduce (veja as decisotildees entre shift-reduce a seguir)

Suponha que a cadeia γ dos siacutembolos da gramaacutetica leve o autocircmato LR(0) do estado inicial 0 para algum estado j

Desta forma avance sobre o proacuteximo siacutembolo a se o estado j possuir uma transaccedilatildeo sob a

Caso contraacuterio escolha reduzir

Os itens no estado j nos diratildeo qual produccedilatildeo usar

35 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

O algoritmo LR abaixo utiliza sua pilha para acompanhar os estados e tambeacutem os siacutembolos da gramaacutetica

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Na verdade

O siacutembolo da gramaacutetica pode ser

recuperado a parir do estado de

modo que a pilha possua estados

ao inveacutes de siacutembolos

36 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Usamos uma pilha

p conter os estados

Os siacutembolos que correspondem aos estados estatildeo na coluna ldquoSiacutembolosrdquo

A pilha da linha (1) tecircm o estado inicial 0 do autocircmato

37 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Portanto fazemos a transferecircncia

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

O siacutembolo da linha 1 eacute o marcador de fundo da pilha $

O proacuteximo siacutembolo de entrada eacute id e o estado 0 tem uma transiccedilatildeo sob id p o estado 5

38 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

A partir do item [F rarr id ] no estado 5 efetuamos uma reduccedilatildeo segundo a produccedilatildeo F rarr id

Na linha 2 o estado 5 eacute empilhado (siacutembolo id)

I5

F rarr id

Natildeo haacute transiccedilatildeo a partir do estado 5 sob a entrada por isso reduzimos

39 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o lado direito da produccedilatildeo da linha (2) eacute id correspondendo ao estado 5 e seu lado direito eacute o F

Com os estados ao desempilhar o estado 5 correspondendo ao siacutembolo id o estado 0 passa a ser o topo

0 F $

40 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id I3

T rarr F

F

Procuramos uma transiccedilatildeo sob F o lado esquerdo da produccedilatildeo

0 F $

O estado 0 possui uma transiccedilatildeo em F p o estado 3 onde empilhamos o estado 3 com o siacutembolo F Ver linha (3)

3

41 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I3

T rarr F

Natildeo haacute transiccedilatildeo a partir do estado 3 sob a entrada por isso reduzimos

A partir do item [T rarr F ] no estado 3 efetuamos uma reduccedilatildeo segundo a produccedilatildeo T rarr F

3

0

T $

42 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

I7

T rarr T F

F rarr ( E )

F rarr id

id

Como outro exemplo considere a linha (5) com o estado 7 referente ao siacutembolo no topo da pilha

Esse estado 7 possui uma transaccedilatildeo para o estado 5 sob a entrada id de modo que empilhamos o estado 5

43 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o estado 5 natildeo possui transiccedilotildees de modo que reduzimos segundo F rarr id

quando removemos da pilha o estado 5 correspondente ao lado direito id o estado 7 passa a ser o topo da pilha

44 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Como o estado 7 possui uma transaccedilatildeo sob F para o estado 10 empilhamos o estado 10 (siacutembolo F)

I7

T rarr T F

F rarr ( E )

F rarr id

I10

T rarr T F

F

45 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O algoritmo eacute o mesmo para todos

os analisadores sintaacuteticos LR

Soacute a tabela de anaacutelise eacute diferente

de um analisador para o outro

O algoritmo lecirc caracteres de um

buffer de entrada um de cada vez

46 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O analisador sintaacutetico shift-reduce

transfere um siacutembolo para pilha jaacute

o analisador sintaacutetico LR transfere

um estado

Cada estado resume a informaccedilatildeo

contida na pilha abaixo dele

47 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

A pilha conteacutem uma sequencia de

estados s0s1 sm onde sm estaacute

no topo

No meacutetodo SLR a pilha conteacutem

estados do autocircmato LR(0)

Por construccedilatildeo a cada estado eacute

associado 1 siacutembolo da gramaacutetica

48 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Lembrem-se de que os estados

correspondem a conj de itens e

que haacute uma transiccedilatildeo do estado i

para o estado j se GOTO(Ii X) = Ij

Todas as transiccedilotildees para o estado

j devem ser para o mesmo siacutembolo

da gramaacutetica X

49 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

Sm

Sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Desta forma cada estado exceto

o estado inicial 0 possui um uacutenico

siacutembolo da gramaacutetica associado a

ele

50 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

A tabela LR consiste em duas partes ACTION uma funccedilatildeo de accedilatildeo de anaacutelise e GOTO uma funccedilatildeo de transiccedilatildeo

1 A funccedilatildeo ACTION recebe como argumentos um estado i e um estado a (ou $) O valor de ACTION(i a) pode ter um dos quatro formatos

a) Shift j onde j eacute um estado

A accedilatildeo tomada pelo analisador sintaacutetico efetivamente transfere a entrada a para a pilha mas usa o estado j para representar a

51 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

b) Reduce Ararr β A accedilatildeo do analisador efetivamente reduz β no topo da pilha para A o lado esquerdo da produccedilatildeo

c) Accept O analisador aceita a entrada e termina a anaacutelise

d) Error O analisador descobre um erro em sua entrada passa o controle p o recuperador de erro que toma alguma accedilatildeo corretiva

2 Estendemos a funccedilatildeo GOTO definida sobre um conjunto de itens para os estados se GOTO(Ii A) = Ij entatildeo GOTO tambeacutem mapeia um estado i e um natildeo-terminal A para o estado j

52 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

Para descrever o comportamento de uma analisador LR eacute recomendaacutevel ter uma notaccedilatildeo representado o estado completo do analisador sua pilha e a entrada restante

Uma configuraccedilatildeo p um analisador LR eacute um par (s0s1sm aiai+1an $) O primeiro componente eacute o conteuacutedo da pilha com o topo agrave direita e o segundo componente representa a entrada restante

Essa configuraccedilatildeo representa a seguinte forma sentencial agrave direita (X0X1Xmaiai+1an) Assim como faria um analisador shift-reduce

53 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

A uacutenica diferenccedila eacute que em inveacutes de siacutembolos da gramaacutetica a pilha conteacutem estados a partir dos quais os siacutembolos da gramaacutetica podem ser recuperados

Ou seja Xi eacute o siacutembolo da gramaacutetica representado pelo estado si

Observe que s0 o estado inicial do analisador sintaacutetico natildeo representa um siacutembolo da gramaacutetica e serve como marcador de fundo da pilha aleacutem de desempenhar um papel importante na anaacutelise

54 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

O proacuteximo movimento do analisador a partir da configuraccedilatildeo dada eacute determinado pela leitura de ai o siacutembolo de entrada corrente e sm o estado do topo da pilha e entatildeo consultando a entrada ACTION[sm ai] na tabela de accedilatildeo de anaacutelise

As configuraccedilotildees restantes apoacutes cada um dos quatro tipos de movimentaccedilatildeo satildeo as seguintes

1 Se ACTION[Sm ai] = shift s o analisador sintaacutetico executa um movimento de transferecircncia (shift move) ele empilha o estado s e avanccedila da entrada resultando na configuraccedilatildeo (s0s1 sm ai+1an $)

55 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2 Se ACTION[Sm ai]=reduce Ararrβ entatildeo o analisador sintaacutetico executa um movimento de reduzir (reduce move) resultando na configuraccedilatildeo (s0s1 sm-rs aiai+1an $)

onde r eacute o comprimento de β e s = GOTO[sm-r A]

Aqui o analisador sintaacutetico incialmente desempilhou os r siacutembolos de estado da pilha expondo o estado sm-r

O analisador sintaacutetico entatildeo empilhou s a entrada para GOTO[sm-r A] na pilha O siacutembolo corrente da entrada natildeo eacute alterado em um movimento de reduzir

56 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2

Para os LR que construiremos Xm-r+1Xm a sequencia de siacutembolos da gramaacutetica correspondendo aos estados retirados da pilha sempre iratildeo casar com β o lado direito da produccedilatildeo sendo reduzida

A saiacuteda de um analisador LR eacute gerada apoacutes um movimento de reduzir executando a accedilatildeo semacircntica associada agrave produccedilatildeo que estaacute sendo reduzida

No momento vamos considerar que a saiacuteda consiste soacute na impressatildeo da produccedilatildeo de reduccedilatildeo

57 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

3 Se ACTION[sm ai] = accept a anaacutelise estaacute concluiacuteda

4 Se ACTION[sm ai] = error o analisador sintaacutetico descobriu um erro e ativa uma rotina para recuperaccedilatildeo de erro

Todos os analisadores sintaacuteticos LR se comportam dessa maneira

A uacutenica diferenccedila entre eles diz respeito a informaccedilatildeo contida nos campos ACTION e GOTO da tabela de anaacutelise

O algoritmo de anaacutelise LR eacute resumido nos proacuteximos slides

58 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

Entrada Uma cadeia de entrada w e uma tabela de anaacutelise com funccedilotildees ACTION e GOTO para uma gramaacutetica G

Saiacuteda Se w estaacute em L(G) os passos os passos de uma reduccedilatildeo de uma anaacutelise ascendente para w

Caso contraacuterio uma indicaccedilatildeo de erro

Meacutetodo Inicialmente o analisador sintaacutetico possui w$ no buffer de entrada e s0 em sua pilha onde s0 representa o estado inicial

O analisador sintaacutetico entatildeo executa o algoritmo

59 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

[PSEUDO] seja a o primeiro siacutembolo de w$ while (1) Seja s o estado no topo da pilha if (ACTION[s a] = shift t) empilha t na pilha seja a o proacuteximo siacutembolo da entrada else if (ACTION[s a] = reduce Ararr β) desempilha siacutembolos |β| da pilha faccedila o estado t agora ser o topo da pilha empilhe GOTO[t A] na pilha imprima a produccedilatildeo Ararr β else if (ACTION[s a] = accept) pare a anaacutelise terminou

else chame uma rotina de recuperaccedilatildeo de erros

60 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR ndash Exemplo

A tabela do proacuteximo slide monstra as funccedilotildees ACTION e GOTO de uma tabela de anaacutelise LR para a gramaacutetica de expressatildeo estudada nesta aula e repetida aqui com produccedilotildees numeradas

Os coacutedigos para as accedilotildees satildeo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

(1) E rarr E + T

(2) E rarr T

(3) T rarr T F

(4) T rarr F

(5) F rarr ( E )

(6) F rarr id

1 Si significa avanccedila na entrada e empilha o estado i na pilha

2 Rj significa reduce segundo a produccedilatildeo de nuacutemero j

3 Acc significa accept

4 Entrada em branco significa error

61 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Estado ACTION

id + ( ) $

0 s5 s4

1 S6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4

5 r6 r6 r6 r6

6 s5 s4

7 s5 s4

8 r6 s11

9 s1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

GOTO

E T F

1 2 3

8 2 3

9 3

10

O valor de GOTO(s a) para o

terminal a estaacute em ACTION da

tabela de anaacutelise conectado agrave

accedilatildeo de transferecircncia sob a

entrada a e o estado s

O GOTO fornece o GOTO[s a]

para os natildeo-terminais A

Ok

Mas como eu consigo os dados

desta tabela

62 Geovane Griesang

A sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

FOLLOW(E) = FOLLOW(Ersquo) = ) $

FOLLOW(T) = FOLLOW(Trsquo) = + ) $

FOLLOW(F) = + ) $

63 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Construindo tabelas de anaacutelise SLR

Esse meacutetodo eacute o mais simples dos LRs Vamos nos referir a tabela de anaacutelise construiacuteda por este meacutetodo como uma tabela SLR e o analisador LR usando uma tabela SLR como um analisador sintaacutetico SLR

O meacutetodo SLR comeccedila com os itens LR(0) e autocircmatos LR(0) ou seja dada uma gramaacutetica G estendemos G para produzir Grsquo com o novo siacutembolo inicial Srsquo A partir de Grsquo construiacutemos C a coleccedilatildeo canocircnica de conj de itens para Grsquo junto com a funccedilatildeo GOTO

Para construir as entradas ACTION e GOTO da tabela de anaacutelise usando o algoritmo a seguir eacute preciso que conheccedilamos FOLLOW(A) para cada natildeo-terminal A de uma gramaacutetica

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 26: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

26 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Observe que se uma produccedilatildeo-B for incluiacuteda no fechamento de I com o ponto mais agrave esquerda do seu lado direito entatildeo todas as produccedilotildees-B seratildeo igualmente incluiacutedas no fechamento Ex A rarr αBβ

Uma lista de natildeo-terminais B cujas produccedilotildees foram incluiacutedas dessa forma eacute suficiente Dividimos todos os conjuntos de itens de interesse em duas classes

1 Itens de base (kernel) o item inicial Srsquo rarr S e todos itens cujos pontos natildeo estatildeo mais agrave esquerda em seus lados direitos

2 Itens que natildeo satildeo de base todos os itens com seus pontos mais agrave esquerda em seus lados direitos exceto Srsquo rarr S Ex B rarr γ

Ix

A rarr αBβ

B rarr γ

27 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Aleacutem do mais cada conjunto de itens de interesse eacute formado a partir do fechamento de um conjunto de itens de base

Os itens adicionados no fechamento nunca podem ser itens de base naturalmente

Assim podemos representar os conjuntos de itens em que realmente estamos interessados com pouca memoacuteria se desprezarmos todos que natildeo satildeo itens de base sabendo que esses podem ser gerados novamente no processo de fechamento Ex B rarr γ exceto Srsquo rarr S

Ix

A rarr αBβ

B rarr γ

28 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

A segunda funccedilatildeo usada na construccedilatildeo da coleccedilatildeo canocircnica LR(0) eacute a funccedilatildeo de transiccedilatildeo GOTO(I X) onde I eacute o conjunto de itens de base e X eacute um siacutembolo da gramaacutetica

GOTO(I X) eacute definido como fechamento do conjunto de todos os itens [ArarrαXβ] tais que

[A rarr αXβ] estaacute em I

A funccedilatildeo de transiccedilatildeo GOTO eacute utilizada para definir as transaccedilotildees no autocircmato LR(0) para uma gramaacutetica

I1

Ersquo rarr E

E rarr E + T

I0

Ersquo rarr E

E rarr E + T

E

29 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Estados do autocircmato correspondem aos conjuntos de itens e GOTO(I +) especifica a transaccedilatildeo do estado I para um novo estado I sob a entrada X

Se I representa o conjunto com dois itens [Ersquo rarr E][E rarr E+T] entatildeo GOTO(I +) conteacutem os itens

Calculamos GOTO(I +) examinando os itens em I com o + imediatamente agrave direita do ponto

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

A rarr αXβ

A rarr αXβ

I1

Ersquo rarr E

E rarr E + T +

I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

30 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Calculamos GOTO(I +) examinando os itens em I com o + imediatamente agrave direita do ponto

O item Ersquo rarr E natildeo eacute desse tipo mas Ersquo rarr E + T sim

Movemos o ponto para imediatamente agrave direita de + e obtemos ErarrE + T

e entatildeo calculamos o fechamento desse conjunto unitaacuterio

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Itens em I

[Ersquo rarr E]

[E rarr E+T]

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I1

Ersquo rarr E

E rarr E + T +

31 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Agora estamos prontos para construir C a coleccedilatildeo canocircnica de conjuntos

de itens LR(0) para uma gramaacutetica estendida Grsquo

void Itens(Grsquo)

C = CLOSURE([Srsquo rarr S])

repeat

for (cada conjunto de itens I em C)

for (cada siacutembolo da gramaacutetica X)

if (GOTO(I X) natildeo eacute vazio e natildeo estaacute em C)

Adicione GOTO(I X) em C

until nenhum novo conjunto de itens seja adicionado em C em uma rodada

32 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

A ideia central por traacutes da anaacutelise ldquoLR Simplesrdquo ou SLR eacute a construccedilatildeo do autocircmato LR(0) a partir da gramaacutetica dada

Os estados desses autocircmatos satildeo os conjuntos de itens da coleccedilatildeo LR canocircnica e as transiccedilotildees satildeo dadas pela funccedilatildeo de transiccedilatildeo GOTO

O estado inicial do autocircmato LR eacute dado por CLOSURE([Srsquo rarr S]) onde Srsquo eacute o siacutembolo inicial da gramaacutetica estendida

Todos os estados satildeo estados de aceitaccedilatildeo Nos referimos ao ldquoestado jrdquo como o estado correspondente ao conjunto de itens Ij

33 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E

Aceitar $

I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

34 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Como os autocircmatos LR(0) podem ajudar-nos a decidir por uma das accedilotildees shift-reduce (veja as decisotildees entre shift-reduce a seguir)

Suponha que a cadeia γ dos siacutembolos da gramaacutetica leve o autocircmato LR(0) do estado inicial 0 para algum estado j

Desta forma avance sobre o proacuteximo siacutembolo a se o estado j possuir uma transaccedilatildeo sob a

Caso contraacuterio escolha reduzir

Os itens no estado j nos diratildeo qual produccedilatildeo usar

35 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

O algoritmo LR abaixo utiliza sua pilha para acompanhar os estados e tambeacutem os siacutembolos da gramaacutetica

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Na verdade

O siacutembolo da gramaacutetica pode ser

recuperado a parir do estado de

modo que a pilha possua estados

ao inveacutes de siacutembolos

36 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Usamos uma pilha

p conter os estados

Os siacutembolos que correspondem aos estados estatildeo na coluna ldquoSiacutembolosrdquo

A pilha da linha (1) tecircm o estado inicial 0 do autocircmato

37 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Portanto fazemos a transferecircncia

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

O siacutembolo da linha 1 eacute o marcador de fundo da pilha $

O proacuteximo siacutembolo de entrada eacute id e o estado 0 tem uma transiccedilatildeo sob id p o estado 5

38 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

A partir do item [F rarr id ] no estado 5 efetuamos uma reduccedilatildeo segundo a produccedilatildeo F rarr id

Na linha 2 o estado 5 eacute empilhado (siacutembolo id)

I5

F rarr id

Natildeo haacute transiccedilatildeo a partir do estado 5 sob a entrada por isso reduzimos

39 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o lado direito da produccedilatildeo da linha (2) eacute id correspondendo ao estado 5 e seu lado direito eacute o F

Com os estados ao desempilhar o estado 5 correspondendo ao siacutembolo id o estado 0 passa a ser o topo

0 F $

40 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id I3

T rarr F

F

Procuramos uma transiccedilatildeo sob F o lado esquerdo da produccedilatildeo

0 F $

O estado 0 possui uma transiccedilatildeo em F p o estado 3 onde empilhamos o estado 3 com o siacutembolo F Ver linha (3)

3

41 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I3

T rarr F

Natildeo haacute transiccedilatildeo a partir do estado 3 sob a entrada por isso reduzimos

A partir do item [T rarr F ] no estado 3 efetuamos uma reduccedilatildeo segundo a produccedilatildeo T rarr F

3

0

T $

42 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

I7

T rarr T F

F rarr ( E )

F rarr id

id

Como outro exemplo considere a linha (5) com o estado 7 referente ao siacutembolo no topo da pilha

Esse estado 7 possui uma transaccedilatildeo para o estado 5 sob a entrada id de modo que empilhamos o estado 5

43 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o estado 5 natildeo possui transiccedilotildees de modo que reduzimos segundo F rarr id

quando removemos da pilha o estado 5 correspondente ao lado direito id o estado 7 passa a ser o topo da pilha

44 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Como o estado 7 possui uma transaccedilatildeo sob F para o estado 10 empilhamos o estado 10 (siacutembolo F)

I7

T rarr T F

F rarr ( E )

F rarr id

I10

T rarr T F

F

45 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O algoritmo eacute o mesmo para todos

os analisadores sintaacuteticos LR

Soacute a tabela de anaacutelise eacute diferente

de um analisador para o outro

O algoritmo lecirc caracteres de um

buffer de entrada um de cada vez

46 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O analisador sintaacutetico shift-reduce

transfere um siacutembolo para pilha jaacute

o analisador sintaacutetico LR transfere

um estado

Cada estado resume a informaccedilatildeo

contida na pilha abaixo dele

47 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

A pilha conteacutem uma sequencia de

estados s0s1 sm onde sm estaacute

no topo

No meacutetodo SLR a pilha conteacutem

estados do autocircmato LR(0)

Por construccedilatildeo a cada estado eacute

associado 1 siacutembolo da gramaacutetica

48 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Lembrem-se de que os estados

correspondem a conj de itens e

que haacute uma transiccedilatildeo do estado i

para o estado j se GOTO(Ii X) = Ij

Todas as transiccedilotildees para o estado

j devem ser para o mesmo siacutembolo

da gramaacutetica X

49 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

Sm

Sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Desta forma cada estado exceto

o estado inicial 0 possui um uacutenico

siacutembolo da gramaacutetica associado a

ele

50 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

A tabela LR consiste em duas partes ACTION uma funccedilatildeo de accedilatildeo de anaacutelise e GOTO uma funccedilatildeo de transiccedilatildeo

1 A funccedilatildeo ACTION recebe como argumentos um estado i e um estado a (ou $) O valor de ACTION(i a) pode ter um dos quatro formatos

a) Shift j onde j eacute um estado

A accedilatildeo tomada pelo analisador sintaacutetico efetivamente transfere a entrada a para a pilha mas usa o estado j para representar a

51 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

b) Reduce Ararr β A accedilatildeo do analisador efetivamente reduz β no topo da pilha para A o lado esquerdo da produccedilatildeo

c) Accept O analisador aceita a entrada e termina a anaacutelise

d) Error O analisador descobre um erro em sua entrada passa o controle p o recuperador de erro que toma alguma accedilatildeo corretiva

2 Estendemos a funccedilatildeo GOTO definida sobre um conjunto de itens para os estados se GOTO(Ii A) = Ij entatildeo GOTO tambeacutem mapeia um estado i e um natildeo-terminal A para o estado j

52 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

Para descrever o comportamento de uma analisador LR eacute recomendaacutevel ter uma notaccedilatildeo representado o estado completo do analisador sua pilha e a entrada restante

Uma configuraccedilatildeo p um analisador LR eacute um par (s0s1sm aiai+1an $) O primeiro componente eacute o conteuacutedo da pilha com o topo agrave direita e o segundo componente representa a entrada restante

Essa configuraccedilatildeo representa a seguinte forma sentencial agrave direita (X0X1Xmaiai+1an) Assim como faria um analisador shift-reduce

53 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

A uacutenica diferenccedila eacute que em inveacutes de siacutembolos da gramaacutetica a pilha conteacutem estados a partir dos quais os siacutembolos da gramaacutetica podem ser recuperados

Ou seja Xi eacute o siacutembolo da gramaacutetica representado pelo estado si

Observe que s0 o estado inicial do analisador sintaacutetico natildeo representa um siacutembolo da gramaacutetica e serve como marcador de fundo da pilha aleacutem de desempenhar um papel importante na anaacutelise

54 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

O proacuteximo movimento do analisador a partir da configuraccedilatildeo dada eacute determinado pela leitura de ai o siacutembolo de entrada corrente e sm o estado do topo da pilha e entatildeo consultando a entrada ACTION[sm ai] na tabela de accedilatildeo de anaacutelise

As configuraccedilotildees restantes apoacutes cada um dos quatro tipos de movimentaccedilatildeo satildeo as seguintes

1 Se ACTION[Sm ai] = shift s o analisador sintaacutetico executa um movimento de transferecircncia (shift move) ele empilha o estado s e avanccedila da entrada resultando na configuraccedilatildeo (s0s1 sm ai+1an $)

55 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2 Se ACTION[Sm ai]=reduce Ararrβ entatildeo o analisador sintaacutetico executa um movimento de reduzir (reduce move) resultando na configuraccedilatildeo (s0s1 sm-rs aiai+1an $)

onde r eacute o comprimento de β e s = GOTO[sm-r A]

Aqui o analisador sintaacutetico incialmente desempilhou os r siacutembolos de estado da pilha expondo o estado sm-r

O analisador sintaacutetico entatildeo empilhou s a entrada para GOTO[sm-r A] na pilha O siacutembolo corrente da entrada natildeo eacute alterado em um movimento de reduzir

56 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2

Para os LR que construiremos Xm-r+1Xm a sequencia de siacutembolos da gramaacutetica correspondendo aos estados retirados da pilha sempre iratildeo casar com β o lado direito da produccedilatildeo sendo reduzida

A saiacuteda de um analisador LR eacute gerada apoacutes um movimento de reduzir executando a accedilatildeo semacircntica associada agrave produccedilatildeo que estaacute sendo reduzida

No momento vamos considerar que a saiacuteda consiste soacute na impressatildeo da produccedilatildeo de reduccedilatildeo

57 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

3 Se ACTION[sm ai] = accept a anaacutelise estaacute concluiacuteda

4 Se ACTION[sm ai] = error o analisador sintaacutetico descobriu um erro e ativa uma rotina para recuperaccedilatildeo de erro

Todos os analisadores sintaacuteticos LR se comportam dessa maneira

A uacutenica diferenccedila entre eles diz respeito a informaccedilatildeo contida nos campos ACTION e GOTO da tabela de anaacutelise

O algoritmo de anaacutelise LR eacute resumido nos proacuteximos slides

58 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

Entrada Uma cadeia de entrada w e uma tabela de anaacutelise com funccedilotildees ACTION e GOTO para uma gramaacutetica G

Saiacuteda Se w estaacute em L(G) os passos os passos de uma reduccedilatildeo de uma anaacutelise ascendente para w

Caso contraacuterio uma indicaccedilatildeo de erro

Meacutetodo Inicialmente o analisador sintaacutetico possui w$ no buffer de entrada e s0 em sua pilha onde s0 representa o estado inicial

O analisador sintaacutetico entatildeo executa o algoritmo

59 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

[PSEUDO] seja a o primeiro siacutembolo de w$ while (1) Seja s o estado no topo da pilha if (ACTION[s a] = shift t) empilha t na pilha seja a o proacuteximo siacutembolo da entrada else if (ACTION[s a] = reduce Ararr β) desempilha siacutembolos |β| da pilha faccedila o estado t agora ser o topo da pilha empilhe GOTO[t A] na pilha imprima a produccedilatildeo Ararr β else if (ACTION[s a] = accept) pare a anaacutelise terminou

else chame uma rotina de recuperaccedilatildeo de erros

60 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR ndash Exemplo

A tabela do proacuteximo slide monstra as funccedilotildees ACTION e GOTO de uma tabela de anaacutelise LR para a gramaacutetica de expressatildeo estudada nesta aula e repetida aqui com produccedilotildees numeradas

Os coacutedigos para as accedilotildees satildeo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

(1) E rarr E + T

(2) E rarr T

(3) T rarr T F

(4) T rarr F

(5) F rarr ( E )

(6) F rarr id

1 Si significa avanccedila na entrada e empilha o estado i na pilha

2 Rj significa reduce segundo a produccedilatildeo de nuacutemero j

3 Acc significa accept

4 Entrada em branco significa error

61 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Estado ACTION

id + ( ) $

0 s5 s4

1 S6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4

5 r6 r6 r6 r6

6 s5 s4

7 s5 s4

8 r6 s11

9 s1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

GOTO

E T F

1 2 3

8 2 3

9 3

10

O valor de GOTO(s a) para o

terminal a estaacute em ACTION da

tabela de anaacutelise conectado agrave

accedilatildeo de transferecircncia sob a

entrada a e o estado s

O GOTO fornece o GOTO[s a]

para os natildeo-terminais A

Ok

Mas como eu consigo os dados

desta tabela

62 Geovane Griesang

A sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

FOLLOW(E) = FOLLOW(Ersquo) = ) $

FOLLOW(T) = FOLLOW(Trsquo) = + ) $

FOLLOW(F) = + ) $

63 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Construindo tabelas de anaacutelise SLR

Esse meacutetodo eacute o mais simples dos LRs Vamos nos referir a tabela de anaacutelise construiacuteda por este meacutetodo como uma tabela SLR e o analisador LR usando uma tabela SLR como um analisador sintaacutetico SLR

O meacutetodo SLR comeccedila com os itens LR(0) e autocircmatos LR(0) ou seja dada uma gramaacutetica G estendemos G para produzir Grsquo com o novo siacutembolo inicial Srsquo A partir de Grsquo construiacutemos C a coleccedilatildeo canocircnica de conj de itens para Grsquo junto com a funccedilatildeo GOTO

Para construir as entradas ACTION e GOTO da tabela de anaacutelise usando o algoritmo a seguir eacute preciso que conheccedilamos FOLLOW(A) para cada natildeo-terminal A de uma gramaacutetica

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 27: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

27 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Fechamento de conjunto de itens

Aleacutem do mais cada conjunto de itens de interesse eacute formado a partir do fechamento de um conjunto de itens de base

Os itens adicionados no fechamento nunca podem ser itens de base naturalmente

Assim podemos representar os conjuntos de itens em que realmente estamos interessados com pouca memoacuteria se desprezarmos todos que natildeo satildeo itens de base sabendo que esses podem ser gerados novamente no processo de fechamento Ex B rarr γ exceto Srsquo rarr S

Ix

A rarr αBβ

B rarr γ

28 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

A segunda funccedilatildeo usada na construccedilatildeo da coleccedilatildeo canocircnica LR(0) eacute a funccedilatildeo de transiccedilatildeo GOTO(I X) onde I eacute o conjunto de itens de base e X eacute um siacutembolo da gramaacutetica

GOTO(I X) eacute definido como fechamento do conjunto de todos os itens [ArarrαXβ] tais que

[A rarr αXβ] estaacute em I

A funccedilatildeo de transiccedilatildeo GOTO eacute utilizada para definir as transaccedilotildees no autocircmato LR(0) para uma gramaacutetica

I1

Ersquo rarr E

E rarr E + T

I0

Ersquo rarr E

E rarr E + T

E

29 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Estados do autocircmato correspondem aos conjuntos de itens e GOTO(I +) especifica a transaccedilatildeo do estado I para um novo estado I sob a entrada X

Se I representa o conjunto com dois itens [Ersquo rarr E][E rarr E+T] entatildeo GOTO(I +) conteacutem os itens

Calculamos GOTO(I +) examinando os itens em I com o + imediatamente agrave direita do ponto

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

A rarr αXβ

A rarr αXβ

I1

Ersquo rarr E

E rarr E + T +

I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

30 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Calculamos GOTO(I +) examinando os itens em I com o + imediatamente agrave direita do ponto

O item Ersquo rarr E natildeo eacute desse tipo mas Ersquo rarr E + T sim

Movemos o ponto para imediatamente agrave direita de + e obtemos ErarrE + T

e entatildeo calculamos o fechamento desse conjunto unitaacuterio

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Itens em I

[Ersquo rarr E]

[E rarr E+T]

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I1

Ersquo rarr E

E rarr E + T +

31 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Agora estamos prontos para construir C a coleccedilatildeo canocircnica de conjuntos

de itens LR(0) para uma gramaacutetica estendida Grsquo

void Itens(Grsquo)

C = CLOSURE([Srsquo rarr S])

repeat

for (cada conjunto de itens I em C)

for (cada siacutembolo da gramaacutetica X)

if (GOTO(I X) natildeo eacute vazio e natildeo estaacute em C)

Adicione GOTO(I X) em C

until nenhum novo conjunto de itens seja adicionado em C em uma rodada

32 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

A ideia central por traacutes da anaacutelise ldquoLR Simplesrdquo ou SLR eacute a construccedilatildeo do autocircmato LR(0) a partir da gramaacutetica dada

Os estados desses autocircmatos satildeo os conjuntos de itens da coleccedilatildeo LR canocircnica e as transiccedilotildees satildeo dadas pela funccedilatildeo de transiccedilatildeo GOTO

O estado inicial do autocircmato LR eacute dado por CLOSURE([Srsquo rarr S]) onde Srsquo eacute o siacutembolo inicial da gramaacutetica estendida

Todos os estados satildeo estados de aceitaccedilatildeo Nos referimos ao ldquoestado jrdquo como o estado correspondente ao conjunto de itens Ij

33 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E

Aceitar $

I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

34 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Como os autocircmatos LR(0) podem ajudar-nos a decidir por uma das accedilotildees shift-reduce (veja as decisotildees entre shift-reduce a seguir)

Suponha que a cadeia γ dos siacutembolos da gramaacutetica leve o autocircmato LR(0) do estado inicial 0 para algum estado j

Desta forma avance sobre o proacuteximo siacutembolo a se o estado j possuir uma transaccedilatildeo sob a

Caso contraacuterio escolha reduzir

Os itens no estado j nos diratildeo qual produccedilatildeo usar

35 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

O algoritmo LR abaixo utiliza sua pilha para acompanhar os estados e tambeacutem os siacutembolos da gramaacutetica

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Na verdade

O siacutembolo da gramaacutetica pode ser

recuperado a parir do estado de

modo que a pilha possua estados

ao inveacutes de siacutembolos

36 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Usamos uma pilha

p conter os estados

Os siacutembolos que correspondem aos estados estatildeo na coluna ldquoSiacutembolosrdquo

A pilha da linha (1) tecircm o estado inicial 0 do autocircmato

37 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Portanto fazemos a transferecircncia

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

O siacutembolo da linha 1 eacute o marcador de fundo da pilha $

O proacuteximo siacutembolo de entrada eacute id e o estado 0 tem uma transiccedilatildeo sob id p o estado 5

38 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

A partir do item [F rarr id ] no estado 5 efetuamos uma reduccedilatildeo segundo a produccedilatildeo F rarr id

Na linha 2 o estado 5 eacute empilhado (siacutembolo id)

I5

F rarr id

Natildeo haacute transiccedilatildeo a partir do estado 5 sob a entrada por isso reduzimos

39 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o lado direito da produccedilatildeo da linha (2) eacute id correspondendo ao estado 5 e seu lado direito eacute o F

Com os estados ao desempilhar o estado 5 correspondendo ao siacutembolo id o estado 0 passa a ser o topo

0 F $

40 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id I3

T rarr F

F

Procuramos uma transiccedilatildeo sob F o lado esquerdo da produccedilatildeo

0 F $

O estado 0 possui uma transiccedilatildeo em F p o estado 3 onde empilhamos o estado 3 com o siacutembolo F Ver linha (3)

3

41 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I3

T rarr F

Natildeo haacute transiccedilatildeo a partir do estado 3 sob a entrada por isso reduzimos

A partir do item [T rarr F ] no estado 3 efetuamos uma reduccedilatildeo segundo a produccedilatildeo T rarr F

3

0

T $

42 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

I7

T rarr T F

F rarr ( E )

F rarr id

id

Como outro exemplo considere a linha (5) com o estado 7 referente ao siacutembolo no topo da pilha

Esse estado 7 possui uma transaccedilatildeo para o estado 5 sob a entrada id de modo que empilhamos o estado 5

43 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o estado 5 natildeo possui transiccedilotildees de modo que reduzimos segundo F rarr id

quando removemos da pilha o estado 5 correspondente ao lado direito id o estado 7 passa a ser o topo da pilha

44 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Como o estado 7 possui uma transaccedilatildeo sob F para o estado 10 empilhamos o estado 10 (siacutembolo F)

I7

T rarr T F

F rarr ( E )

F rarr id

I10

T rarr T F

F

45 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O algoritmo eacute o mesmo para todos

os analisadores sintaacuteticos LR

Soacute a tabela de anaacutelise eacute diferente

de um analisador para o outro

O algoritmo lecirc caracteres de um

buffer de entrada um de cada vez

46 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O analisador sintaacutetico shift-reduce

transfere um siacutembolo para pilha jaacute

o analisador sintaacutetico LR transfere

um estado

Cada estado resume a informaccedilatildeo

contida na pilha abaixo dele

47 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

A pilha conteacutem uma sequencia de

estados s0s1 sm onde sm estaacute

no topo

No meacutetodo SLR a pilha conteacutem

estados do autocircmato LR(0)

Por construccedilatildeo a cada estado eacute

associado 1 siacutembolo da gramaacutetica

48 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Lembrem-se de que os estados

correspondem a conj de itens e

que haacute uma transiccedilatildeo do estado i

para o estado j se GOTO(Ii X) = Ij

Todas as transiccedilotildees para o estado

j devem ser para o mesmo siacutembolo

da gramaacutetica X

49 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

Sm

Sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Desta forma cada estado exceto

o estado inicial 0 possui um uacutenico

siacutembolo da gramaacutetica associado a

ele

50 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

A tabela LR consiste em duas partes ACTION uma funccedilatildeo de accedilatildeo de anaacutelise e GOTO uma funccedilatildeo de transiccedilatildeo

1 A funccedilatildeo ACTION recebe como argumentos um estado i e um estado a (ou $) O valor de ACTION(i a) pode ter um dos quatro formatos

a) Shift j onde j eacute um estado

A accedilatildeo tomada pelo analisador sintaacutetico efetivamente transfere a entrada a para a pilha mas usa o estado j para representar a

51 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

b) Reduce Ararr β A accedilatildeo do analisador efetivamente reduz β no topo da pilha para A o lado esquerdo da produccedilatildeo

c) Accept O analisador aceita a entrada e termina a anaacutelise

d) Error O analisador descobre um erro em sua entrada passa o controle p o recuperador de erro que toma alguma accedilatildeo corretiva

2 Estendemos a funccedilatildeo GOTO definida sobre um conjunto de itens para os estados se GOTO(Ii A) = Ij entatildeo GOTO tambeacutem mapeia um estado i e um natildeo-terminal A para o estado j

52 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

Para descrever o comportamento de uma analisador LR eacute recomendaacutevel ter uma notaccedilatildeo representado o estado completo do analisador sua pilha e a entrada restante

Uma configuraccedilatildeo p um analisador LR eacute um par (s0s1sm aiai+1an $) O primeiro componente eacute o conteuacutedo da pilha com o topo agrave direita e o segundo componente representa a entrada restante

Essa configuraccedilatildeo representa a seguinte forma sentencial agrave direita (X0X1Xmaiai+1an) Assim como faria um analisador shift-reduce

53 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

A uacutenica diferenccedila eacute que em inveacutes de siacutembolos da gramaacutetica a pilha conteacutem estados a partir dos quais os siacutembolos da gramaacutetica podem ser recuperados

Ou seja Xi eacute o siacutembolo da gramaacutetica representado pelo estado si

Observe que s0 o estado inicial do analisador sintaacutetico natildeo representa um siacutembolo da gramaacutetica e serve como marcador de fundo da pilha aleacutem de desempenhar um papel importante na anaacutelise

54 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

O proacuteximo movimento do analisador a partir da configuraccedilatildeo dada eacute determinado pela leitura de ai o siacutembolo de entrada corrente e sm o estado do topo da pilha e entatildeo consultando a entrada ACTION[sm ai] na tabela de accedilatildeo de anaacutelise

As configuraccedilotildees restantes apoacutes cada um dos quatro tipos de movimentaccedilatildeo satildeo as seguintes

1 Se ACTION[Sm ai] = shift s o analisador sintaacutetico executa um movimento de transferecircncia (shift move) ele empilha o estado s e avanccedila da entrada resultando na configuraccedilatildeo (s0s1 sm ai+1an $)

55 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2 Se ACTION[Sm ai]=reduce Ararrβ entatildeo o analisador sintaacutetico executa um movimento de reduzir (reduce move) resultando na configuraccedilatildeo (s0s1 sm-rs aiai+1an $)

onde r eacute o comprimento de β e s = GOTO[sm-r A]

Aqui o analisador sintaacutetico incialmente desempilhou os r siacutembolos de estado da pilha expondo o estado sm-r

O analisador sintaacutetico entatildeo empilhou s a entrada para GOTO[sm-r A] na pilha O siacutembolo corrente da entrada natildeo eacute alterado em um movimento de reduzir

56 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2

Para os LR que construiremos Xm-r+1Xm a sequencia de siacutembolos da gramaacutetica correspondendo aos estados retirados da pilha sempre iratildeo casar com β o lado direito da produccedilatildeo sendo reduzida

A saiacuteda de um analisador LR eacute gerada apoacutes um movimento de reduzir executando a accedilatildeo semacircntica associada agrave produccedilatildeo que estaacute sendo reduzida

No momento vamos considerar que a saiacuteda consiste soacute na impressatildeo da produccedilatildeo de reduccedilatildeo

57 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

3 Se ACTION[sm ai] = accept a anaacutelise estaacute concluiacuteda

4 Se ACTION[sm ai] = error o analisador sintaacutetico descobriu um erro e ativa uma rotina para recuperaccedilatildeo de erro

Todos os analisadores sintaacuteticos LR se comportam dessa maneira

A uacutenica diferenccedila entre eles diz respeito a informaccedilatildeo contida nos campos ACTION e GOTO da tabela de anaacutelise

O algoritmo de anaacutelise LR eacute resumido nos proacuteximos slides

58 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

Entrada Uma cadeia de entrada w e uma tabela de anaacutelise com funccedilotildees ACTION e GOTO para uma gramaacutetica G

Saiacuteda Se w estaacute em L(G) os passos os passos de uma reduccedilatildeo de uma anaacutelise ascendente para w

Caso contraacuterio uma indicaccedilatildeo de erro

Meacutetodo Inicialmente o analisador sintaacutetico possui w$ no buffer de entrada e s0 em sua pilha onde s0 representa o estado inicial

O analisador sintaacutetico entatildeo executa o algoritmo

59 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

[PSEUDO] seja a o primeiro siacutembolo de w$ while (1) Seja s o estado no topo da pilha if (ACTION[s a] = shift t) empilha t na pilha seja a o proacuteximo siacutembolo da entrada else if (ACTION[s a] = reduce Ararr β) desempilha siacutembolos |β| da pilha faccedila o estado t agora ser o topo da pilha empilhe GOTO[t A] na pilha imprima a produccedilatildeo Ararr β else if (ACTION[s a] = accept) pare a anaacutelise terminou

else chame uma rotina de recuperaccedilatildeo de erros

60 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR ndash Exemplo

A tabela do proacuteximo slide monstra as funccedilotildees ACTION e GOTO de uma tabela de anaacutelise LR para a gramaacutetica de expressatildeo estudada nesta aula e repetida aqui com produccedilotildees numeradas

Os coacutedigos para as accedilotildees satildeo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

(1) E rarr E + T

(2) E rarr T

(3) T rarr T F

(4) T rarr F

(5) F rarr ( E )

(6) F rarr id

1 Si significa avanccedila na entrada e empilha o estado i na pilha

2 Rj significa reduce segundo a produccedilatildeo de nuacutemero j

3 Acc significa accept

4 Entrada em branco significa error

61 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Estado ACTION

id + ( ) $

0 s5 s4

1 S6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4

5 r6 r6 r6 r6

6 s5 s4

7 s5 s4

8 r6 s11

9 s1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

GOTO

E T F

1 2 3

8 2 3

9 3

10

O valor de GOTO(s a) para o

terminal a estaacute em ACTION da

tabela de anaacutelise conectado agrave

accedilatildeo de transferecircncia sob a

entrada a e o estado s

O GOTO fornece o GOTO[s a]

para os natildeo-terminais A

Ok

Mas como eu consigo os dados

desta tabela

62 Geovane Griesang

A sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

FOLLOW(E) = FOLLOW(Ersquo) = ) $

FOLLOW(T) = FOLLOW(Trsquo) = + ) $

FOLLOW(F) = + ) $

63 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Construindo tabelas de anaacutelise SLR

Esse meacutetodo eacute o mais simples dos LRs Vamos nos referir a tabela de anaacutelise construiacuteda por este meacutetodo como uma tabela SLR e o analisador LR usando uma tabela SLR como um analisador sintaacutetico SLR

O meacutetodo SLR comeccedila com os itens LR(0) e autocircmatos LR(0) ou seja dada uma gramaacutetica G estendemos G para produzir Grsquo com o novo siacutembolo inicial Srsquo A partir de Grsquo construiacutemos C a coleccedilatildeo canocircnica de conj de itens para Grsquo junto com a funccedilatildeo GOTO

Para construir as entradas ACTION e GOTO da tabela de anaacutelise usando o algoritmo a seguir eacute preciso que conheccedilamos FOLLOW(A) para cada natildeo-terminal A de uma gramaacutetica

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 28: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

28 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

A segunda funccedilatildeo usada na construccedilatildeo da coleccedilatildeo canocircnica LR(0) eacute a funccedilatildeo de transiccedilatildeo GOTO(I X) onde I eacute o conjunto de itens de base e X eacute um siacutembolo da gramaacutetica

GOTO(I X) eacute definido como fechamento do conjunto de todos os itens [ArarrαXβ] tais que

[A rarr αXβ] estaacute em I

A funccedilatildeo de transiccedilatildeo GOTO eacute utilizada para definir as transaccedilotildees no autocircmato LR(0) para uma gramaacutetica

I1

Ersquo rarr E

E rarr E + T

I0

Ersquo rarr E

E rarr E + T

E

29 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Estados do autocircmato correspondem aos conjuntos de itens e GOTO(I +) especifica a transaccedilatildeo do estado I para um novo estado I sob a entrada X

Se I representa o conjunto com dois itens [Ersquo rarr E][E rarr E+T] entatildeo GOTO(I +) conteacutem os itens

Calculamos GOTO(I +) examinando os itens em I com o + imediatamente agrave direita do ponto

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

A rarr αXβ

A rarr αXβ

I1

Ersquo rarr E

E rarr E + T +

I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

30 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Calculamos GOTO(I +) examinando os itens em I com o + imediatamente agrave direita do ponto

O item Ersquo rarr E natildeo eacute desse tipo mas Ersquo rarr E + T sim

Movemos o ponto para imediatamente agrave direita de + e obtemos ErarrE + T

e entatildeo calculamos o fechamento desse conjunto unitaacuterio

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Itens em I

[Ersquo rarr E]

[E rarr E+T]

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I1

Ersquo rarr E

E rarr E + T +

31 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Agora estamos prontos para construir C a coleccedilatildeo canocircnica de conjuntos

de itens LR(0) para uma gramaacutetica estendida Grsquo

void Itens(Grsquo)

C = CLOSURE([Srsquo rarr S])

repeat

for (cada conjunto de itens I em C)

for (cada siacutembolo da gramaacutetica X)

if (GOTO(I X) natildeo eacute vazio e natildeo estaacute em C)

Adicione GOTO(I X) em C

until nenhum novo conjunto de itens seja adicionado em C em uma rodada

32 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

A ideia central por traacutes da anaacutelise ldquoLR Simplesrdquo ou SLR eacute a construccedilatildeo do autocircmato LR(0) a partir da gramaacutetica dada

Os estados desses autocircmatos satildeo os conjuntos de itens da coleccedilatildeo LR canocircnica e as transiccedilotildees satildeo dadas pela funccedilatildeo de transiccedilatildeo GOTO

O estado inicial do autocircmato LR eacute dado por CLOSURE([Srsquo rarr S]) onde Srsquo eacute o siacutembolo inicial da gramaacutetica estendida

Todos os estados satildeo estados de aceitaccedilatildeo Nos referimos ao ldquoestado jrdquo como o estado correspondente ao conjunto de itens Ij

33 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E

Aceitar $

I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

34 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Como os autocircmatos LR(0) podem ajudar-nos a decidir por uma das accedilotildees shift-reduce (veja as decisotildees entre shift-reduce a seguir)

Suponha que a cadeia γ dos siacutembolos da gramaacutetica leve o autocircmato LR(0) do estado inicial 0 para algum estado j

Desta forma avance sobre o proacuteximo siacutembolo a se o estado j possuir uma transaccedilatildeo sob a

Caso contraacuterio escolha reduzir

Os itens no estado j nos diratildeo qual produccedilatildeo usar

35 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

O algoritmo LR abaixo utiliza sua pilha para acompanhar os estados e tambeacutem os siacutembolos da gramaacutetica

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Na verdade

O siacutembolo da gramaacutetica pode ser

recuperado a parir do estado de

modo que a pilha possua estados

ao inveacutes de siacutembolos

36 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Usamos uma pilha

p conter os estados

Os siacutembolos que correspondem aos estados estatildeo na coluna ldquoSiacutembolosrdquo

A pilha da linha (1) tecircm o estado inicial 0 do autocircmato

37 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Portanto fazemos a transferecircncia

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

O siacutembolo da linha 1 eacute o marcador de fundo da pilha $

O proacuteximo siacutembolo de entrada eacute id e o estado 0 tem uma transiccedilatildeo sob id p o estado 5

38 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

A partir do item [F rarr id ] no estado 5 efetuamos uma reduccedilatildeo segundo a produccedilatildeo F rarr id

Na linha 2 o estado 5 eacute empilhado (siacutembolo id)

I5

F rarr id

Natildeo haacute transiccedilatildeo a partir do estado 5 sob a entrada por isso reduzimos

39 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o lado direito da produccedilatildeo da linha (2) eacute id correspondendo ao estado 5 e seu lado direito eacute o F

Com os estados ao desempilhar o estado 5 correspondendo ao siacutembolo id o estado 0 passa a ser o topo

0 F $

40 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id I3

T rarr F

F

Procuramos uma transiccedilatildeo sob F o lado esquerdo da produccedilatildeo

0 F $

O estado 0 possui uma transiccedilatildeo em F p o estado 3 onde empilhamos o estado 3 com o siacutembolo F Ver linha (3)

3

41 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I3

T rarr F

Natildeo haacute transiccedilatildeo a partir do estado 3 sob a entrada por isso reduzimos

A partir do item [T rarr F ] no estado 3 efetuamos uma reduccedilatildeo segundo a produccedilatildeo T rarr F

3

0

T $

42 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

I7

T rarr T F

F rarr ( E )

F rarr id

id

Como outro exemplo considere a linha (5) com o estado 7 referente ao siacutembolo no topo da pilha

Esse estado 7 possui uma transaccedilatildeo para o estado 5 sob a entrada id de modo que empilhamos o estado 5

43 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o estado 5 natildeo possui transiccedilotildees de modo que reduzimos segundo F rarr id

quando removemos da pilha o estado 5 correspondente ao lado direito id o estado 7 passa a ser o topo da pilha

44 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Como o estado 7 possui uma transaccedilatildeo sob F para o estado 10 empilhamos o estado 10 (siacutembolo F)

I7

T rarr T F

F rarr ( E )

F rarr id

I10

T rarr T F

F

45 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O algoritmo eacute o mesmo para todos

os analisadores sintaacuteticos LR

Soacute a tabela de anaacutelise eacute diferente

de um analisador para o outro

O algoritmo lecirc caracteres de um

buffer de entrada um de cada vez

46 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O analisador sintaacutetico shift-reduce

transfere um siacutembolo para pilha jaacute

o analisador sintaacutetico LR transfere

um estado

Cada estado resume a informaccedilatildeo

contida na pilha abaixo dele

47 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

A pilha conteacutem uma sequencia de

estados s0s1 sm onde sm estaacute

no topo

No meacutetodo SLR a pilha conteacutem

estados do autocircmato LR(0)

Por construccedilatildeo a cada estado eacute

associado 1 siacutembolo da gramaacutetica

48 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Lembrem-se de que os estados

correspondem a conj de itens e

que haacute uma transiccedilatildeo do estado i

para o estado j se GOTO(Ii X) = Ij

Todas as transiccedilotildees para o estado

j devem ser para o mesmo siacutembolo

da gramaacutetica X

49 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

Sm

Sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Desta forma cada estado exceto

o estado inicial 0 possui um uacutenico

siacutembolo da gramaacutetica associado a

ele

50 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

A tabela LR consiste em duas partes ACTION uma funccedilatildeo de accedilatildeo de anaacutelise e GOTO uma funccedilatildeo de transiccedilatildeo

1 A funccedilatildeo ACTION recebe como argumentos um estado i e um estado a (ou $) O valor de ACTION(i a) pode ter um dos quatro formatos

a) Shift j onde j eacute um estado

A accedilatildeo tomada pelo analisador sintaacutetico efetivamente transfere a entrada a para a pilha mas usa o estado j para representar a

51 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

b) Reduce Ararr β A accedilatildeo do analisador efetivamente reduz β no topo da pilha para A o lado esquerdo da produccedilatildeo

c) Accept O analisador aceita a entrada e termina a anaacutelise

d) Error O analisador descobre um erro em sua entrada passa o controle p o recuperador de erro que toma alguma accedilatildeo corretiva

2 Estendemos a funccedilatildeo GOTO definida sobre um conjunto de itens para os estados se GOTO(Ii A) = Ij entatildeo GOTO tambeacutem mapeia um estado i e um natildeo-terminal A para o estado j

52 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

Para descrever o comportamento de uma analisador LR eacute recomendaacutevel ter uma notaccedilatildeo representado o estado completo do analisador sua pilha e a entrada restante

Uma configuraccedilatildeo p um analisador LR eacute um par (s0s1sm aiai+1an $) O primeiro componente eacute o conteuacutedo da pilha com o topo agrave direita e o segundo componente representa a entrada restante

Essa configuraccedilatildeo representa a seguinte forma sentencial agrave direita (X0X1Xmaiai+1an) Assim como faria um analisador shift-reduce

53 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

A uacutenica diferenccedila eacute que em inveacutes de siacutembolos da gramaacutetica a pilha conteacutem estados a partir dos quais os siacutembolos da gramaacutetica podem ser recuperados

Ou seja Xi eacute o siacutembolo da gramaacutetica representado pelo estado si

Observe que s0 o estado inicial do analisador sintaacutetico natildeo representa um siacutembolo da gramaacutetica e serve como marcador de fundo da pilha aleacutem de desempenhar um papel importante na anaacutelise

54 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

O proacuteximo movimento do analisador a partir da configuraccedilatildeo dada eacute determinado pela leitura de ai o siacutembolo de entrada corrente e sm o estado do topo da pilha e entatildeo consultando a entrada ACTION[sm ai] na tabela de accedilatildeo de anaacutelise

As configuraccedilotildees restantes apoacutes cada um dos quatro tipos de movimentaccedilatildeo satildeo as seguintes

1 Se ACTION[Sm ai] = shift s o analisador sintaacutetico executa um movimento de transferecircncia (shift move) ele empilha o estado s e avanccedila da entrada resultando na configuraccedilatildeo (s0s1 sm ai+1an $)

55 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2 Se ACTION[Sm ai]=reduce Ararrβ entatildeo o analisador sintaacutetico executa um movimento de reduzir (reduce move) resultando na configuraccedilatildeo (s0s1 sm-rs aiai+1an $)

onde r eacute o comprimento de β e s = GOTO[sm-r A]

Aqui o analisador sintaacutetico incialmente desempilhou os r siacutembolos de estado da pilha expondo o estado sm-r

O analisador sintaacutetico entatildeo empilhou s a entrada para GOTO[sm-r A] na pilha O siacutembolo corrente da entrada natildeo eacute alterado em um movimento de reduzir

56 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2

Para os LR que construiremos Xm-r+1Xm a sequencia de siacutembolos da gramaacutetica correspondendo aos estados retirados da pilha sempre iratildeo casar com β o lado direito da produccedilatildeo sendo reduzida

A saiacuteda de um analisador LR eacute gerada apoacutes um movimento de reduzir executando a accedilatildeo semacircntica associada agrave produccedilatildeo que estaacute sendo reduzida

No momento vamos considerar que a saiacuteda consiste soacute na impressatildeo da produccedilatildeo de reduccedilatildeo

57 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

3 Se ACTION[sm ai] = accept a anaacutelise estaacute concluiacuteda

4 Se ACTION[sm ai] = error o analisador sintaacutetico descobriu um erro e ativa uma rotina para recuperaccedilatildeo de erro

Todos os analisadores sintaacuteticos LR se comportam dessa maneira

A uacutenica diferenccedila entre eles diz respeito a informaccedilatildeo contida nos campos ACTION e GOTO da tabela de anaacutelise

O algoritmo de anaacutelise LR eacute resumido nos proacuteximos slides

58 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

Entrada Uma cadeia de entrada w e uma tabela de anaacutelise com funccedilotildees ACTION e GOTO para uma gramaacutetica G

Saiacuteda Se w estaacute em L(G) os passos os passos de uma reduccedilatildeo de uma anaacutelise ascendente para w

Caso contraacuterio uma indicaccedilatildeo de erro

Meacutetodo Inicialmente o analisador sintaacutetico possui w$ no buffer de entrada e s0 em sua pilha onde s0 representa o estado inicial

O analisador sintaacutetico entatildeo executa o algoritmo

59 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

[PSEUDO] seja a o primeiro siacutembolo de w$ while (1) Seja s o estado no topo da pilha if (ACTION[s a] = shift t) empilha t na pilha seja a o proacuteximo siacutembolo da entrada else if (ACTION[s a] = reduce Ararr β) desempilha siacutembolos |β| da pilha faccedila o estado t agora ser o topo da pilha empilhe GOTO[t A] na pilha imprima a produccedilatildeo Ararr β else if (ACTION[s a] = accept) pare a anaacutelise terminou

else chame uma rotina de recuperaccedilatildeo de erros

60 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR ndash Exemplo

A tabela do proacuteximo slide monstra as funccedilotildees ACTION e GOTO de uma tabela de anaacutelise LR para a gramaacutetica de expressatildeo estudada nesta aula e repetida aqui com produccedilotildees numeradas

Os coacutedigos para as accedilotildees satildeo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

(1) E rarr E + T

(2) E rarr T

(3) T rarr T F

(4) T rarr F

(5) F rarr ( E )

(6) F rarr id

1 Si significa avanccedila na entrada e empilha o estado i na pilha

2 Rj significa reduce segundo a produccedilatildeo de nuacutemero j

3 Acc significa accept

4 Entrada em branco significa error

61 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Estado ACTION

id + ( ) $

0 s5 s4

1 S6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4

5 r6 r6 r6 r6

6 s5 s4

7 s5 s4

8 r6 s11

9 s1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

GOTO

E T F

1 2 3

8 2 3

9 3

10

O valor de GOTO(s a) para o

terminal a estaacute em ACTION da

tabela de anaacutelise conectado agrave

accedilatildeo de transferecircncia sob a

entrada a e o estado s

O GOTO fornece o GOTO[s a]

para os natildeo-terminais A

Ok

Mas como eu consigo os dados

desta tabela

62 Geovane Griesang

A sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

FOLLOW(E) = FOLLOW(Ersquo) = ) $

FOLLOW(T) = FOLLOW(Trsquo) = + ) $

FOLLOW(F) = + ) $

63 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Construindo tabelas de anaacutelise SLR

Esse meacutetodo eacute o mais simples dos LRs Vamos nos referir a tabela de anaacutelise construiacuteda por este meacutetodo como uma tabela SLR e o analisador LR usando uma tabela SLR como um analisador sintaacutetico SLR

O meacutetodo SLR comeccedila com os itens LR(0) e autocircmatos LR(0) ou seja dada uma gramaacutetica G estendemos G para produzir Grsquo com o novo siacutembolo inicial Srsquo A partir de Grsquo construiacutemos C a coleccedilatildeo canocircnica de conj de itens para Grsquo junto com a funccedilatildeo GOTO

Para construir as entradas ACTION e GOTO da tabela de anaacutelise usando o algoritmo a seguir eacute preciso que conheccedilamos FOLLOW(A) para cada natildeo-terminal A de uma gramaacutetica

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 29: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

29 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Estados do autocircmato correspondem aos conjuntos de itens e GOTO(I +) especifica a transaccedilatildeo do estado I para um novo estado I sob a entrada X

Se I representa o conjunto com dois itens [Ersquo rarr E][E rarr E+T] entatildeo GOTO(I +) conteacutem os itens

Calculamos GOTO(I +) examinando os itens em I com o + imediatamente agrave direita do ponto

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

A rarr αXβ

A rarr αXβ

I1

Ersquo rarr E

E rarr E + T +

I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

30 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Calculamos GOTO(I +) examinando os itens em I com o + imediatamente agrave direita do ponto

O item Ersquo rarr E natildeo eacute desse tipo mas Ersquo rarr E + T sim

Movemos o ponto para imediatamente agrave direita de + e obtemos ErarrE + T

e entatildeo calculamos o fechamento desse conjunto unitaacuterio

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Itens em I

[Ersquo rarr E]

[E rarr E+T]

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I1

Ersquo rarr E

E rarr E + T +

31 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Agora estamos prontos para construir C a coleccedilatildeo canocircnica de conjuntos

de itens LR(0) para uma gramaacutetica estendida Grsquo

void Itens(Grsquo)

C = CLOSURE([Srsquo rarr S])

repeat

for (cada conjunto de itens I em C)

for (cada siacutembolo da gramaacutetica X)

if (GOTO(I X) natildeo eacute vazio e natildeo estaacute em C)

Adicione GOTO(I X) em C

until nenhum novo conjunto de itens seja adicionado em C em uma rodada

32 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

A ideia central por traacutes da anaacutelise ldquoLR Simplesrdquo ou SLR eacute a construccedilatildeo do autocircmato LR(0) a partir da gramaacutetica dada

Os estados desses autocircmatos satildeo os conjuntos de itens da coleccedilatildeo LR canocircnica e as transiccedilotildees satildeo dadas pela funccedilatildeo de transiccedilatildeo GOTO

O estado inicial do autocircmato LR eacute dado por CLOSURE([Srsquo rarr S]) onde Srsquo eacute o siacutembolo inicial da gramaacutetica estendida

Todos os estados satildeo estados de aceitaccedilatildeo Nos referimos ao ldquoestado jrdquo como o estado correspondente ao conjunto de itens Ij

33 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E

Aceitar $

I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

34 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Como os autocircmatos LR(0) podem ajudar-nos a decidir por uma das accedilotildees shift-reduce (veja as decisotildees entre shift-reduce a seguir)

Suponha que a cadeia γ dos siacutembolos da gramaacutetica leve o autocircmato LR(0) do estado inicial 0 para algum estado j

Desta forma avance sobre o proacuteximo siacutembolo a se o estado j possuir uma transaccedilatildeo sob a

Caso contraacuterio escolha reduzir

Os itens no estado j nos diratildeo qual produccedilatildeo usar

35 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

O algoritmo LR abaixo utiliza sua pilha para acompanhar os estados e tambeacutem os siacutembolos da gramaacutetica

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Na verdade

O siacutembolo da gramaacutetica pode ser

recuperado a parir do estado de

modo que a pilha possua estados

ao inveacutes de siacutembolos

36 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Usamos uma pilha

p conter os estados

Os siacutembolos que correspondem aos estados estatildeo na coluna ldquoSiacutembolosrdquo

A pilha da linha (1) tecircm o estado inicial 0 do autocircmato

37 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Portanto fazemos a transferecircncia

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

O siacutembolo da linha 1 eacute o marcador de fundo da pilha $

O proacuteximo siacutembolo de entrada eacute id e o estado 0 tem uma transiccedilatildeo sob id p o estado 5

38 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

A partir do item [F rarr id ] no estado 5 efetuamos uma reduccedilatildeo segundo a produccedilatildeo F rarr id

Na linha 2 o estado 5 eacute empilhado (siacutembolo id)

I5

F rarr id

Natildeo haacute transiccedilatildeo a partir do estado 5 sob a entrada por isso reduzimos

39 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o lado direito da produccedilatildeo da linha (2) eacute id correspondendo ao estado 5 e seu lado direito eacute o F

Com os estados ao desempilhar o estado 5 correspondendo ao siacutembolo id o estado 0 passa a ser o topo

0 F $

40 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id I3

T rarr F

F

Procuramos uma transiccedilatildeo sob F o lado esquerdo da produccedilatildeo

0 F $

O estado 0 possui uma transiccedilatildeo em F p o estado 3 onde empilhamos o estado 3 com o siacutembolo F Ver linha (3)

3

41 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I3

T rarr F

Natildeo haacute transiccedilatildeo a partir do estado 3 sob a entrada por isso reduzimos

A partir do item [T rarr F ] no estado 3 efetuamos uma reduccedilatildeo segundo a produccedilatildeo T rarr F

3

0

T $

42 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

I7

T rarr T F

F rarr ( E )

F rarr id

id

Como outro exemplo considere a linha (5) com o estado 7 referente ao siacutembolo no topo da pilha

Esse estado 7 possui uma transaccedilatildeo para o estado 5 sob a entrada id de modo que empilhamos o estado 5

43 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o estado 5 natildeo possui transiccedilotildees de modo que reduzimos segundo F rarr id

quando removemos da pilha o estado 5 correspondente ao lado direito id o estado 7 passa a ser o topo da pilha

44 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Como o estado 7 possui uma transaccedilatildeo sob F para o estado 10 empilhamos o estado 10 (siacutembolo F)

I7

T rarr T F

F rarr ( E )

F rarr id

I10

T rarr T F

F

45 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O algoritmo eacute o mesmo para todos

os analisadores sintaacuteticos LR

Soacute a tabela de anaacutelise eacute diferente

de um analisador para o outro

O algoritmo lecirc caracteres de um

buffer de entrada um de cada vez

46 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O analisador sintaacutetico shift-reduce

transfere um siacutembolo para pilha jaacute

o analisador sintaacutetico LR transfere

um estado

Cada estado resume a informaccedilatildeo

contida na pilha abaixo dele

47 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

A pilha conteacutem uma sequencia de

estados s0s1 sm onde sm estaacute

no topo

No meacutetodo SLR a pilha conteacutem

estados do autocircmato LR(0)

Por construccedilatildeo a cada estado eacute

associado 1 siacutembolo da gramaacutetica

48 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Lembrem-se de que os estados

correspondem a conj de itens e

que haacute uma transiccedilatildeo do estado i

para o estado j se GOTO(Ii X) = Ij

Todas as transiccedilotildees para o estado

j devem ser para o mesmo siacutembolo

da gramaacutetica X

49 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

Sm

Sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Desta forma cada estado exceto

o estado inicial 0 possui um uacutenico

siacutembolo da gramaacutetica associado a

ele

50 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

A tabela LR consiste em duas partes ACTION uma funccedilatildeo de accedilatildeo de anaacutelise e GOTO uma funccedilatildeo de transiccedilatildeo

1 A funccedilatildeo ACTION recebe como argumentos um estado i e um estado a (ou $) O valor de ACTION(i a) pode ter um dos quatro formatos

a) Shift j onde j eacute um estado

A accedilatildeo tomada pelo analisador sintaacutetico efetivamente transfere a entrada a para a pilha mas usa o estado j para representar a

51 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

b) Reduce Ararr β A accedilatildeo do analisador efetivamente reduz β no topo da pilha para A o lado esquerdo da produccedilatildeo

c) Accept O analisador aceita a entrada e termina a anaacutelise

d) Error O analisador descobre um erro em sua entrada passa o controle p o recuperador de erro que toma alguma accedilatildeo corretiva

2 Estendemos a funccedilatildeo GOTO definida sobre um conjunto de itens para os estados se GOTO(Ii A) = Ij entatildeo GOTO tambeacutem mapeia um estado i e um natildeo-terminal A para o estado j

52 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

Para descrever o comportamento de uma analisador LR eacute recomendaacutevel ter uma notaccedilatildeo representado o estado completo do analisador sua pilha e a entrada restante

Uma configuraccedilatildeo p um analisador LR eacute um par (s0s1sm aiai+1an $) O primeiro componente eacute o conteuacutedo da pilha com o topo agrave direita e o segundo componente representa a entrada restante

Essa configuraccedilatildeo representa a seguinte forma sentencial agrave direita (X0X1Xmaiai+1an) Assim como faria um analisador shift-reduce

53 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

A uacutenica diferenccedila eacute que em inveacutes de siacutembolos da gramaacutetica a pilha conteacutem estados a partir dos quais os siacutembolos da gramaacutetica podem ser recuperados

Ou seja Xi eacute o siacutembolo da gramaacutetica representado pelo estado si

Observe que s0 o estado inicial do analisador sintaacutetico natildeo representa um siacutembolo da gramaacutetica e serve como marcador de fundo da pilha aleacutem de desempenhar um papel importante na anaacutelise

54 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

O proacuteximo movimento do analisador a partir da configuraccedilatildeo dada eacute determinado pela leitura de ai o siacutembolo de entrada corrente e sm o estado do topo da pilha e entatildeo consultando a entrada ACTION[sm ai] na tabela de accedilatildeo de anaacutelise

As configuraccedilotildees restantes apoacutes cada um dos quatro tipos de movimentaccedilatildeo satildeo as seguintes

1 Se ACTION[Sm ai] = shift s o analisador sintaacutetico executa um movimento de transferecircncia (shift move) ele empilha o estado s e avanccedila da entrada resultando na configuraccedilatildeo (s0s1 sm ai+1an $)

55 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2 Se ACTION[Sm ai]=reduce Ararrβ entatildeo o analisador sintaacutetico executa um movimento de reduzir (reduce move) resultando na configuraccedilatildeo (s0s1 sm-rs aiai+1an $)

onde r eacute o comprimento de β e s = GOTO[sm-r A]

Aqui o analisador sintaacutetico incialmente desempilhou os r siacutembolos de estado da pilha expondo o estado sm-r

O analisador sintaacutetico entatildeo empilhou s a entrada para GOTO[sm-r A] na pilha O siacutembolo corrente da entrada natildeo eacute alterado em um movimento de reduzir

56 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2

Para os LR que construiremos Xm-r+1Xm a sequencia de siacutembolos da gramaacutetica correspondendo aos estados retirados da pilha sempre iratildeo casar com β o lado direito da produccedilatildeo sendo reduzida

A saiacuteda de um analisador LR eacute gerada apoacutes um movimento de reduzir executando a accedilatildeo semacircntica associada agrave produccedilatildeo que estaacute sendo reduzida

No momento vamos considerar que a saiacuteda consiste soacute na impressatildeo da produccedilatildeo de reduccedilatildeo

57 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

3 Se ACTION[sm ai] = accept a anaacutelise estaacute concluiacuteda

4 Se ACTION[sm ai] = error o analisador sintaacutetico descobriu um erro e ativa uma rotina para recuperaccedilatildeo de erro

Todos os analisadores sintaacuteticos LR se comportam dessa maneira

A uacutenica diferenccedila entre eles diz respeito a informaccedilatildeo contida nos campos ACTION e GOTO da tabela de anaacutelise

O algoritmo de anaacutelise LR eacute resumido nos proacuteximos slides

58 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

Entrada Uma cadeia de entrada w e uma tabela de anaacutelise com funccedilotildees ACTION e GOTO para uma gramaacutetica G

Saiacuteda Se w estaacute em L(G) os passos os passos de uma reduccedilatildeo de uma anaacutelise ascendente para w

Caso contraacuterio uma indicaccedilatildeo de erro

Meacutetodo Inicialmente o analisador sintaacutetico possui w$ no buffer de entrada e s0 em sua pilha onde s0 representa o estado inicial

O analisador sintaacutetico entatildeo executa o algoritmo

59 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

[PSEUDO] seja a o primeiro siacutembolo de w$ while (1) Seja s o estado no topo da pilha if (ACTION[s a] = shift t) empilha t na pilha seja a o proacuteximo siacutembolo da entrada else if (ACTION[s a] = reduce Ararr β) desempilha siacutembolos |β| da pilha faccedila o estado t agora ser o topo da pilha empilhe GOTO[t A] na pilha imprima a produccedilatildeo Ararr β else if (ACTION[s a] = accept) pare a anaacutelise terminou

else chame uma rotina de recuperaccedilatildeo de erros

60 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR ndash Exemplo

A tabela do proacuteximo slide monstra as funccedilotildees ACTION e GOTO de uma tabela de anaacutelise LR para a gramaacutetica de expressatildeo estudada nesta aula e repetida aqui com produccedilotildees numeradas

Os coacutedigos para as accedilotildees satildeo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

(1) E rarr E + T

(2) E rarr T

(3) T rarr T F

(4) T rarr F

(5) F rarr ( E )

(6) F rarr id

1 Si significa avanccedila na entrada e empilha o estado i na pilha

2 Rj significa reduce segundo a produccedilatildeo de nuacutemero j

3 Acc significa accept

4 Entrada em branco significa error

61 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Estado ACTION

id + ( ) $

0 s5 s4

1 S6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4

5 r6 r6 r6 r6

6 s5 s4

7 s5 s4

8 r6 s11

9 s1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

GOTO

E T F

1 2 3

8 2 3

9 3

10

O valor de GOTO(s a) para o

terminal a estaacute em ACTION da

tabela de anaacutelise conectado agrave

accedilatildeo de transferecircncia sob a

entrada a e o estado s

O GOTO fornece o GOTO[s a]

para os natildeo-terminais A

Ok

Mas como eu consigo os dados

desta tabela

62 Geovane Griesang

A sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

FOLLOW(E) = FOLLOW(Ersquo) = ) $

FOLLOW(T) = FOLLOW(Trsquo) = + ) $

FOLLOW(F) = + ) $

63 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Construindo tabelas de anaacutelise SLR

Esse meacutetodo eacute o mais simples dos LRs Vamos nos referir a tabela de anaacutelise construiacuteda por este meacutetodo como uma tabela SLR e o analisador LR usando uma tabela SLR como um analisador sintaacutetico SLR

O meacutetodo SLR comeccedila com os itens LR(0) e autocircmatos LR(0) ou seja dada uma gramaacutetica G estendemos G para produzir Grsquo com o novo siacutembolo inicial Srsquo A partir de Grsquo construiacutemos C a coleccedilatildeo canocircnica de conj de itens para Grsquo junto com a funccedilatildeo GOTO

Para construir as entradas ACTION e GOTO da tabela de anaacutelise usando o algoritmo a seguir eacute preciso que conheccedilamos FOLLOW(A) para cada natildeo-terminal A de uma gramaacutetica

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 30: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

30 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Calculamos GOTO(I +) examinando os itens em I com o + imediatamente agrave direita do ponto

O item Ersquo rarr E natildeo eacute desse tipo mas Ersquo rarr E + T sim

Movemos o ponto para imediatamente agrave direita de + e obtemos ErarrE + T

e entatildeo calculamos o fechamento desse conjunto unitaacuterio

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Itens em I

[Ersquo rarr E]

[E rarr E+T]

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I1

Ersquo rarr E

E rarr E + T +

31 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Agora estamos prontos para construir C a coleccedilatildeo canocircnica de conjuntos

de itens LR(0) para uma gramaacutetica estendida Grsquo

void Itens(Grsquo)

C = CLOSURE([Srsquo rarr S])

repeat

for (cada conjunto de itens I em C)

for (cada siacutembolo da gramaacutetica X)

if (GOTO(I X) natildeo eacute vazio e natildeo estaacute em C)

Adicione GOTO(I X) em C

until nenhum novo conjunto de itens seja adicionado em C em uma rodada

32 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

A ideia central por traacutes da anaacutelise ldquoLR Simplesrdquo ou SLR eacute a construccedilatildeo do autocircmato LR(0) a partir da gramaacutetica dada

Os estados desses autocircmatos satildeo os conjuntos de itens da coleccedilatildeo LR canocircnica e as transiccedilotildees satildeo dadas pela funccedilatildeo de transiccedilatildeo GOTO

O estado inicial do autocircmato LR eacute dado por CLOSURE([Srsquo rarr S]) onde Srsquo eacute o siacutembolo inicial da gramaacutetica estendida

Todos os estados satildeo estados de aceitaccedilatildeo Nos referimos ao ldquoestado jrdquo como o estado correspondente ao conjunto de itens Ij

33 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E

Aceitar $

I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

34 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Como os autocircmatos LR(0) podem ajudar-nos a decidir por uma das accedilotildees shift-reduce (veja as decisotildees entre shift-reduce a seguir)

Suponha que a cadeia γ dos siacutembolos da gramaacutetica leve o autocircmato LR(0) do estado inicial 0 para algum estado j

Desta forma avance sobre o proacuteximo siacutembolo a se o estado j possuir uma transaccedilatildeo sob a

Caso contraacuterio escolha reduzir

Os itens no estado j nos diratildeo qual produccedilatildeo usar

35 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

O algoritmo LR abaixo utiliza sua pilha para acompanhar os estados e tambeacutem os siacutembolos da gramaacutetica

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Na verdade

O siacutembolo da gramaacutetica pode ser

recuperado a parir do estado de

modo que a pilha possua estados

ao inveacutes de siacutembolos

36 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Usamos uma pilha

p conter os estados

Os siacutembolos que correspondem aos estados estatildeo na coluna ldquoSiacutembolosrdquo

A pilha da linha (1) tecircm o estado inicial 0 do autocircmato

37 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Portanto fazemos a transferecircncia

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

O siacutembolo da linha 1 eacute o marcador de fundo da pilha $

O proacuteximo siacutembolo de entrada eacute id e o estado 0 tem uma transiccedilatildeo sob id p o estado 5

38 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

A partir do item [F rarr id ] no estado 5 efetuamos uma reduccedilatildeo segundo a produccedilatildeo F rarr id

Na linha 2 o estado 5 eacute empilhado (siacutembolo id)

I5

F rarr id

Natildeo haacute transiccedilatildeo a partir do estado 5 sob a entrada por isso reduzimos

39 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o lado direito da produccedilatildeo da linha (2) eacute id correspondendo ao estado 5 e seu lado direito eacute o F

Com os estados ao desempilhar o estado 5 correspondendo ao siacutembolo id o estado 0 passa a ser o topo

0 F $

40 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id I3

T rarr F

F

Procuramos uma transiccedilatildeo sob F o lado esquerdo da produccedilatildeo

0 F $

O estado 0 possui uma transiccedilatildeo em F p o estado 3 onde empilhamos o estado 3 com o siacutembolo F Ver linha (3)

3

41 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I3

T rarr F

Natildeo haacute transiccedilatildeo a partir do estado 3 sob a entrada por isso reduzimos

A partir do item [T rarr F ] no estado 3 efetuamos uma reduccedilatildeo segundo a produccedilatildeo T rarr F

3

0

T $

42 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

I7

T rarr T F

F rarr ( E )

F rarr id

id

Como outro exemplo considere a linha (5) com o estado 7 referente ao siacutembolo no topo da pilha

Esse estado 7 possui uma transaccedilatildeo para o estado 5 sob a entrada id de modo que empilhamos o estado 5

43 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o estado 5 natildeo possui transiccedilotildees de modo que reduzimos segundo F rarr id

quando removemos da pilha o estado 5 correspondente ao lado direito id o estado 7 passa a ser o topo da pilha

44 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Como o estado 7 possui uma transaccedilatildeo sob F para o estado 10 empilhamos o estado 10 (siacutembolo F)

I7

T rarr T F

F rarr ( E )

F rarr id

I10

T rarr T F

F

45 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O algoritmo eacute o mesmo para todos

os analisadores sintaacuteticos LR

Soacute a tabela de anaacutelise eacute diferente

de um analisador para o outro

O algoritmo lecirc caracteres de um

buffer de entrada um de cada vez

46 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O analisador sintaacutetico shift-reduce

transfere um siacutembolo para pilha jaacute

o analisador sintaacutetico LR transfere

um estado

Cada estado resume a informaccedilatildeo

contida na pilha abaixo dele

47 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

A pilha conteacutem uma sequencia de

estados s0s1 sm onde sm estaacute

no topo

No meacutetodo SLR a pilha conteacutem

estados do autocircmato LR(0)

Por construccedilatildeo a cada estado eacute

associado 1 siacutembolo da gramaacutetica

48 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Lembrem-se de que os estados

correspondem a conj de itens e

que haacute uma transiccedilatildeo do estado i

para o estado j se GOTO(Ii X) = Ij

Todas as transiccedilotildees para o estado

j devem ser para o mesmo siacutembolo

da gramaacutetica X

49 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

Sm

Sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Desta forma cada estado exceto

o estado inicial 0 possui um uacutenico

siacutembolo da gramaacutetica associado a

ele

50 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

A tabela LR consiste em duas partes ACTION uma funccedilatildeo de accedilatildeo de anaacutelise e GOTO uma funccedilatildeo de transiccedilatildeo

1 A funccedilatildeo ACTION recebe como argumentos um estado i e um estado a (ou $) O valor de ACTION(i a) pode ter um dos quatro formatos

a) Shift j onde j eacute um estado

A accedilatildeo tomada pelo analisador sintaacutetico efetivamente transfere a entrada a para a pilha mas usa o estado j para representar a

51 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

b) Reduce Ararr β A accedilatildeo do analisador efetivamente reduz β no topo da pilha para A o lado esquerdo da produccedilatildeo

c) Accept O analisador aceita a entrada e termina a anaacutelise

d) Error O analisador descobre um erro em sua entrada passa o controle p o recuperador de erro que toma alguma accedilatildeo corretiva

2 Estendemos a funccedilatildeo GOTO definida sobre um conjunto de itens para os estados se GOTO(Ii A) = Ij entatildeo GOTO tambeacutem mapeia um estado i e um natildeo-terminal A para o estado j

52 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

Para descrever o comportamento de uma analisador LR eacute recomendaacutevel ter uma notaccedilatildeo representado o estado completo do analisador sua pilha e a entrada restante

Uma configuraccedilatildeo p um analisador LR eacute um par (s0s1sm aiai+1an $) O primeiro componente eacute o conteuacutedo da pilha com o topo agrave direita e o segundo componente representa a entrada restante

Essa configuraccedilatildeo representa a seguinte forma sentencial agrave direita (X0X1Xmaiai+1an) Assim como faria um analisador shift-reduce

53 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

A uacutenica diferenccedila eacute que em inveacutes de siacutembolos da gramaacutetica a pilha conteacutem estados a partir dos quais os siacutembolos da gramaacutetica podem ser recuperados

Ou seja Xi eacute o siacutembolo da gramaacutetica representado pelo estado si

Observe que s0 o estado inicial do analisador sintaacutetico natildeo representa um siacutembolo da gramaacutetica e serve como marcador de fundo da pilha aleacutem de desempenhar um papel importante na anaacutelise

54 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

O proacuteximo movimento do analisador a partir da configuraccedilatildeo dada eacute determinado pela leitura de ai o siacutembolo de entrada corrente e sm o estado do topo da pilha e entatildeo consultando a entrada ACTION[sm ai] na tabela de accedilatildeo de anaacutelise

As configuraccedilotildees restantes apoacutes cada um dos quatro tipos de movimentaccedilatildeo satildeo as seguintes

1 Se ACTION[Sm ai] = shift s o analisador sintaacutetico executa um movimento de transferecircncia (shift move) ele empilha o estado s e avanccedila da entrada resultando na configuraccedilatildeo (s0s1 sm ai+1an $)

55 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2 Se ACTION[Sm ai]=reduce Ararrβ entatildeo o analisador sintaacutetico executa um movimento de reduzir (reduce move) resultando na configuraccedilatildeo (s0s1 sm-rs aiai+1an $)

onde r eacute o comprimento de β e s = GOTO[sm-r A]

Aqui o analisador sintaacutetico incialmente desempilhou os r siacutembolos de estado da pilha expondo o estado sm-r

O analisador sintaacutetico entatildeo empilhou s a entrada para GOTO[sm-r A] na pilha O siacutembolo corrente da entrada natildeo eacute alterado em um movimento de reduzir

56 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2

Para os LR que construiremos Xm-r+1Xm a sequencia de siacutembolos da gramaacutetica correspondendo aos estados retirados da pilha sempre iratildeo casar com β o lado direito da produccedilatildeo sendo reduzida

A saiacuteda de um analisador LR eacute gerada apoacutes um movimento de reduzir executando a accedilatildeo semacircntica associada agrave produccedilatildeo que estaacute sendo reduzida

No momento vamos considerar que a saiacuteda consiste soacute na impressatildeo da produccedilatildeo de reduccedilatildeo

57 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

3 Se ACTION[sm ai] = accept a anaacutelise estaacute concluiacuteda

4 Se ACTION[sm ai] = error o analisador sintaacutetico descobriu um erro e ativa uma rotina para recuperaccedilatildeo de erro

Todos os analisadores sintaacuteticos LR se comportam dessa maneira

A uacutenica diferenccedila entre eles diz respeito a informaccedilatildeo contida nos campos ACTION e GOTO da tabela de anaacutelise

O algoritmo de anaacutelise LR eacute resumido nos proacuteximos slides

58 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

Entrada Uma cadeia de entrada w e uma tabela de anaacutelise com funccedilotildees ACTION e GOTO para uma gramaacutetica G

Saiacuteda Se w estaacute em L(G) os passos os passos de uma reduccedilatildeo de uma anaacutelise ascendente para w

Caso contraacuterio uma indicaccedilatildeo de erro

Meacutetodo Inicialmente o analisador sintaacutetico possui w$ no buffer de entrada e s0 em sua pilha onde s0 representa o estado inicial

O analisador sintaacutetico entatildeo executa o algoritmo

59 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

[PSEUDO] seja a o primeiro siacutembolo de w$ while (1) Seja s o estado no topo da pilha if (ACTION[s a] = shift t) empilha t na pilha seja a o proacuteximo siacutembolo da entrada else if (ACTION[s a] = reduce Ararr β) desempilha siacutembolos |β| da pilha faccedila o estado t agora ser o topo da pilha empilhe GOTO[t A] na pilha imprima a produccedilatildeo Ararr β else if (ACTION[s a] = accept) pare a anaacutelise terminou

else chame uma rotina de recuperaccedilatildeo de erros

60 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR ndash Exemplo

A tabela do proacuteximo slide monstra as funccedilotildees ACTION e GOTO de uma tabela de anaacutelise LR para a gramaacutetica de expressatildeo estudada nesta aula e repetida aqui com produccedilotildees numeradas

Os coacutedigos para as accedilotildees satildeo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

(1) E rarr E + T

(2) E rarr T

(3) T rarr T F

(4) T rarr F

(5) F rarr ( E )

(6) F rarr id

1 Si significa avanccedila na entrada e empilha o estado i na pilha

2 Rj significa reduce segundo a produccedilatildeo de nuacutemero j

3 Acc significa accept

4 Entrada em branco significa error

61 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Estado ACTION

id + ( ) $

0 s5 s4

1 S6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4

5 r6 r6 r6 r6

6 s5 s4

7 s5 s4

8 r6 s11

9 s1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

GOTO

E T F

1 2 3

8 2 3

9 3

10

O valor de GOTO(s a) para o

terminal a estaacute em ACTION da

tabela de anaacutelise conectado agrave

accedilatildeo de transferecircncia sob a

entrada a e o estado s

O GOTO fornece o GOTO[s a]

para os natildeo-terminais A

Ok

Mas como eu consigo os dados

desta tabela

62 Geovane Griesang

A sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

FOLLOW(E) = FOLLOW(Ersquo) = ) $

FOLLOW(T) = FOLLOW(Trsquo) = + ) $

FOLLOW(F) = + ) $

63 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Construindo tabelas de anaacutelise SLR

Esse meacutetodo eacute o mais simples dos LRs Vamos nos referir a tabela de anaacutelise construiacuteda por este meacutetodo como uma tabela SLR e o analisador LR usando uma tabela SLR como um analisador sintaacutetico SLR

O meacutetodo SLR comeccedila com os itens LR(0) e autocircmatos LR(0) ou seja dada uma gramaacutetica G estendemos G para produzir Grsquo com o novo siacutembolo inicial Srsquo A partir de Grsquo construiacutemos C a coleccedilatildeo canocircnica de conj de itens para Grsquo junto com a funccedilatildeo GOTO

Para construir as entradas ACTION e GOTO da tabela de anaacutelise usando o algoritmo a seguir eacute preciso que conheccedilamos FOLLOW(A) para cada natildeo-terminal A de uma gramaacutetica

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 31: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

31 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Funccedilatildeo de transiccedilatildeo

Agora estamos prontos para construir C a coleccedilatildeo canocircnica de conjuntos

de itens LR(0) para uma gramaacutetica estendida Grsquo

void Itens(Grsquo)

C = CLOSURE([Srsquo rarr S])

repeat

for (cada conjunto de itens I em C)

for (cada siacutembolo da gramaacutetica X)

if (GOTO(I X) natildeo eacute vazio e natildeo estaacute em C)

Adicione GOTO(I X) em C

until nenhum novo conjunto de itens seja adicionado em C em uma rodada

32 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

A ideia central por traacutes da anaacutelise ldquoLR Simplesrdquo ou SLR eacute a construccedilatildeo do autocircmato LR(0) a partir da gramaacutetica dada

Os estados desses autocircmatos satildeo os conjuntos de itens da coleccedilatildeo LR canocircnica e as transiccedilotildees satildeo dadas pela funccedilatildeo de transiccedilatildeo GOTO

O estado inicial do autocircmato LR eacute dado por CLOSURE([Srsquo rarr S]) onde Srsquo eacute o siacutembolo inicial da gramaacutetica estendida

Todos os estados satildeo estados de aceitaccedilatildeo Nos referimos ao ldquoestado jrdquo como o estado correspondente ao conjunto de itens Ij

33 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E

Aceitar $

I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

34 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Como os autocircmatos LR(0) podem ajudar-nos a decidir por uma das accedilotildees shift-reduce (veja as decisotildees entre shift-reduce a seguir)

Suponha que a cadeia γ dos siacutembolos da gramaacutetica leve o autocircmato LR(0) do estado inicial 0 para algum estado j

Desta forma avance sobre o proacuteximo siacutembolo a se o estado j possuir uma transaccedilatildeo sob a

Caso contraacuterio escolha reduzir

Os itens no estado j nos diratildeo qual produccedilatildeo usar

35 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

O algoritmo LR abaixo utiliza sua pilha para acompanhar os estados e tambeacutem os siacutembolos da gramaacutetica

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Na verdade

O siacutembolo da gramaacutetica pode ser

recuperado a parir do estado de

modo que a pilha possua estados

ao inveacutes de siacutembolos

36 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Usamos uma pilha

p conter os estados

Os siacutembolos que correspondem aos estados estatildeo na coluna ldquoSiacutembolosrdquo

A pilha da linha (1) tecircm o estado inicial 0 do autocircmato

37 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Portanto fazemos a transferecircncia

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

O siacutembolo da linha 1 eacute o marcador de fundo da pilha $

O proacuteximo siacutembolo de entrada eacute id e o estado 0 tem uma transiccedilatildeo sob id p o estado 5

38 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

A partir do item [F rarr id ] no estado 5 efetuamos uma reduccedilatildeo segundo a produccedilatildeo F rarr id

Na linha 2 o estado 5 eacute empilhado (siacutembolo id)

I5

F rarr id

Natildeo haacute transiccedilatildeo a partir do estado 5 sob a entrada por isso reduzimos

39 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o lado direito da produccedilatildeo da linha (2) eacute id correspondendo ao estado 5 e seu lado direito eacute o F

Com os estados ao desempilhar o estado 5 correspondendo ao siacutembolo id o estado 0 passa a ser o topo

0 F $

40 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id I3

T rarr F

F

Procuramos uma transiccedilatildeo sob F o lado esquerdo da produccedilatildeo

0 F $

O estado 0 possui uma transiccedilatildeo em F p o estado 3 onde empilhamos o estado 3 com o siacutembolo F Ver linha (3)

3

41 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I3

T rarr F

Natildeo haacute transiccedilatildeo a partir do estado 3 sob a entrada por isso reduzimos

A partir do item [T rarr F ] no estado 3 efetuamos uma reduccedilatildeo segundo a produccedilatildeo T rarr F

3

0

T $

42 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

I7

T rarr T F

F rarr ( E )

F rarr id

id

Como outro exemplo considere a linha (5) com o estado 7 referente ao siacutembolo no topo da pilha

Esse estado 7 possui uma transaccedilatildeo para o estado 5 sob a entrada id de modo que empilhamos o estado 5

43 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o estado 5 natildeo possui transiccedilotildees de modo que reduzimos segundo F rarr id

quando removemos da pilha o estado 5 correspondente ao lado direito id o estado 7 passa a ser o topo da pilha

44 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Como o estado 7 possui uma transaccedilatildeo sob F para o estado 10 empilhamos o estado 10 (siacutembolo F)

I7

T rarr T F

F rarr ( E )

F rarr id

I10

T rarr T F

F

45 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O algoritmo eacute o mesmo para todos

os analisadores sintaacuteticos LR

Soacute a tabela de anaacutelise eacute diferente

de um analisador para o outro

O algoritmo lecirc caracteres de um

buffer de entrada um de cada vez

46 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O analisador sintaacutetico shift-reduce

transfere um siacutembolo para pilha jaacute

o analisador sintaacutetico LR transfere

um estado

Cada estado resume a informaccedilatildeo

contida na pilha abaixo dele

47 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

A pilha conteacutem uma sequencia de

estados s0s1 sm onde sm estaacute

no topo

No meacutetodo SLR a pilha conteacutem

estados do autocircmato LR(0)

Por construccedilatildeo a cada estado eacute

associado 1 siacutembolo da gramaacutetica

48 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Lembrem-se de que os estados

correspondem a conj de itens e

que haacute uma transiccedilatildeo do estado i

para o estado j se GOTO(Ii X) = Ij

Todas as transiccedilotildees para o estado

j devem ser para o mesmo siacutembolo

da gramaacutetica X

49 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

Sm

Sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Desta forma cada estado exceto

o estado inicial 0 possui um uacutenico

siacutembolo da gramaacutetica associado a

ele

50 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

A tabela LR consiste em duas partes ACTION uma funccedilatildeo de accedilatildeo de anaacutelise e GOTO uma funccedilatildeo de transiccedilatildeo

1 A funccedilatildeo ACTION recebe como argumentos um estado i e um estado a (ou $) O valor de ACTION(i a) pode ter um dos quatro formatos

a) Shift j onde j eacute um estado

A accedilatildeo tomada pelo analisador sintaacutetico efetivamente transfere a entrada a para a pilha mas usa o estado j para representar a

51 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

b) Reduce Ararr β A accedilatildeo do analisador efetivamente reduz β no topo da pilha para A o lado esquerdo da produccedilatildeo

c) Accept O analisador aceita a entrada e termina a anaacutelise

d) Error O analisador descobre um erro em sua entrada passa o controle p o recuperador de erro que toma alguma accedilatildeo corretiva

2 Estendemos a funccedilatildeo GOTO definida sobre um conjunto de itens para os estados se GOTO(Ii A) = Ij entatildeo GOTO tambeacutem mapeia um estado i e um natildeo-terminal A para o estado j

52 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

Para descrever o comportamento de uma analisador LR eacute recomendaacutevel ter uma notaccedilatildeo representado o estado completo do analisador sua pilha e a entrada restante

Uma configuraccedilatildeo p um analisador LR eacute um par (s0s1sm aiai+1an $) O primeiro componente eacute o conteuacutedo da pilha com o topo agrave direita e o segundo componente representa a entrada restante

Essa configuraccedilatildeo representa a seguinte forma sentencial agrave direita (X0X1Xmaiai+1an) Assim como faria um analisador shift-reduce

53 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

A uacutenica diferenccedila eacute que em inveacutes de siacutembolos da gramaacutetica a pilha conteacutem estados a partir dos quais os siacutembolos da gramaacutetica podem ser recuperados

Ou seja Xi eacute o siacutembolo da gramaacutetica representado pelo estado si

Observe que s0 o estado inicial do analisador sintaacutetico natildeo representa um siacutembolo da gramaacutetica e serve como marcador de fundo da pilha aleacutem de desempenhar um papel importante na anaacutelise

54 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

O proacuteximo movimento do analisador a partir da configuraccedilatildeo dada eacute determinado pela leitura de ai o siacutembolo de entrada corrente e sm o estado do topo da pilha e entatildeo consultando a entrada ACTION[sm ai] na tabela de accedilatildeo de anaacutelise

As configuraccedilotildees restantes apoacutes cada um dos quatro tipos de movimentaccedilatildeo satildeo as seguintes

1 Se ACTION[Sm ai] = shift s o analisador sintaacutetico executa um movimento de transferecircncia (shift move) ele empilha o estado s e avanccedila da entrada resultando na configuraccedilatildeo (s0s1 sm ai+1an $)

55 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2 Se ACTION[Sm ai]=reduce Ararrβ entatildeo o analisador sintaacutetico executa um movimento de reduzir (reduce move) resultando na configuraccedilatildeo (s0s1 sm-rs aiai+1an $)

onde r eacute o comprimento de β e s = GOTO[sm-r A]

Aqui o analisador sintaacutetico incialmente desempilhou os r siacutembolos de estado da pilha expondo o estado sm-r

O analisador sintaacutetico entatildeo empilhou s a entrada para GOTO[sm-r A] na pilha O siacutembolo corrente da entrada natildeo eacute alterado em um movimento de reduzir

56 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2

Para os LR que construiremos Xm-r+1Xm a sequencia de siacutembolos da gramaacutetica correspondendo aos estados retirados da pilha sempre iratildeo casar com β o lado direito da produccedilatildeo sendo reduzida

A saiacuteda de um analisador LR eacute gerada apoacutes um movimento de reduzir executando a accedilatildeo semacircntica associada agrave produccedilatildeo que estaacute sendo reduzida

No momento vamos considerar que a saiacuteda consiste soacute na impressatildeo da produccedilatildeo de reduccedilatildeo

57 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

3 Se ACTION[sm ai] = accept a anaacutelise estaacute concluiacuteda

4 Se ACTION[sm ai] = error o analisador sintaacutetico descobriu um erro e ativa uma rotina para recuperaccedilatildeo de erro

Todos os analisadores sintaacuteticos LR se comportam dessa maneira

A uacutenica diferenccedila entre eles diz respeito a informaccedilatildeo contida nos campos ACTION e GOTO da tabela de anaacutelise

O algoritmo de anaacutelise LR eacute resumido nos proacuteximos slides

58 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

Entrada Uma cadeia de entrada w e uma tabela de anaacutelise com funccedilotildees ACTION e GOTO para uma gramaacutetica G

Saiacuteda Se w estaacute em L(G) os passos os passos de uma reduccedilatildeo de uma anaacutelise ascendente para w

Caso contraacuterio uma indicaccedilatildeo de erro

Meacutetodo Inicialmente o analisador sintaacutetico possui w$ no buffer de entrada e s0 em sua pilha onde s0 representa o estado inicial

O analisador sintaacutetico entatildeo executa o algoritmo

59 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

[PSEUDO] seja a o primeiro siacutembolo de w$ while (1) Seja s o estado no topo da pilha if (ACTION[s a] = shift t) empilha t na pilha seja a o proacuteximo siacutembolo da entrada else if (ACTION[s a] = reduce Ararr β) desempilha siacutembolos |β| da pilha faccedila o estado t agora ser o topo da pilha empilhe GOTO[t A] na pilha imprima a produccedilatildeo Ararr β else if (ACTION[s a] = accept) pare a anaacutelise terminou

else chame uma rotina de recuperaccedilatildeo de erros

60 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR ndash Exemplo

A tabela do proacuteximo slide monstra as funccedilotildees ACTION e GOTO de uma tabela de anaacutelise LR para a gramaacutetica de expressatildeo estudada nesta aula e repetida aqui com produccedilotildees numeradas

Os coacutedigos para as accedilotildees satildeo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

(1) E rarr E + T

(2) E rarr T

(3) T rarr T F

(4) T rarr F

(5) F rarr ( E )

(6) F rarr id

1 Si significa avanccedila na entrada e empilha o estado i na pilha

2 Rj significa reduce segundo a produccedilatildeo de nuacutemero j

3 Acc significa accept

4 Entrada em branco significa error

61 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Estado ACTION

id + ( ) $

0 s5 s4

1 S6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4

5 r6 r6 r6 r6

6 s5 s4

7 s5 s4

8 r6 s11

9 s1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

GOTO

E T F

1 2 3

8 2 3

9 3

10

O valor de GOTO(s a) para o

terminal a estaacute em ACTION da

tabela de anaacutelise conectado agrave

accedilatildeo de transferecircncia sob a

entrada a e o estado s

O GOTO fornece o GOTO[s a]

para os natildeo-terminais A

Ok

Mas como eu consigo os dados

desta tabela

62 Geovane Griesang

A sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

FOLLOW(E) = FOLLOW(Ersquo) = ) $

FOLLOW(T) = FOLLOW(Trsquo) = + ) $

FOLLOW(F) = + ) $

63 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Construindo tabelas de anaacutelise SLR

Esse meacutetodo eacute o mais simples dos LRs Vamos nos referir a tabela de anaacutelise construiacuteda por este meacutetodo como uma tabela SLR e o analisador LR usando uma tabela SLR como um analisador sintaacutetico SLR

O meacutetodo SLR comeccedila com os itens LR(0) e autocircmatos LR(0) ou seja dada uma gramaacutetica G estendemos G para produzir Grsquo com o novo siacutembolo inicial Srsquo A partir de Grsquo construiacutemos C a coleccedilatildeo canocircnica de conj de itens para Grsquo junto com a funccedilatildeo GOTO

Para construir as entradas ACTION e GOTO da tabela de anaacutelise usando o algoritmo a seguir eacute preciso que conheccedilamos FOLLOW(A) para cada natildeo-terminal A de uma gramaacutetica

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 32: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

32 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

A ideia central por traacutes da anaacutelise ldquoLR Simplesrdquo ou SLR eacute a construccedilatildeo do autocircmato LR(0) a partir da gramaacutetica dada

Os estados desses autocircmatos satildeo os conjuntos de itens da coleccedilatildeo LR canocircnica e as transiccedilotildees satildeo dadas pela funccedilatildeo de transiccedilatildeo GOTO

O estado inicial do autocircmato LR eacute dado por CLOSURE([Srsquo rarr S]) onde Srsquo eacute o siacutembolo inicial da gramaacutetica estendida

Todos os estados satildeo estados de aceitaccedilatildeo Nos referimos ao ldquoestado jrdquo como o estado correspondente ao conjunto de itens Ij

33 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E

Aceitar $

I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

34 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Como os autocircmatos LR(0) podem ajudar-nos a decidir por uma das accedilotildees shift-reduce (veja as decisotildees entre shift-reduce a seguir)

Suponha que a cadeia γ dos siacutembolos da gramaacutetica leve o autocircmato LR(0) do estado inicial 0 para algum estado j

Desta forma avance sobre o proacuteximo siacutembolo a se o estado j possuir uma transaccedilatildeo sob a

Caso contraacuterio escolha reduzir

Os itens no estado j nos diratildeo qual produccedilatildeo usar

35 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

O algoritmo LR abaixo utiliza sua pilha para acompanhar os estados e tambeacutem os siacutembolos da gramaacutetica

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Na verdade

O siacutembolo da gramaacutetica pode ser

recuperado a parir do estado de

modo que a pilha possua estados

ao inveacutes de siacutembolos

36 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Usamos uma pilha

p conter os estados

Os siacutembolos que correspondem aos estados estatildeo na coluna ldquoSiacutembolosrdquo

A pilha da linha (1) tecircm o estado inicial 0 do autocircmato

37 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Portanto fazemos a transferecircncia

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

O siacutembolo da linha 1 eacute o marcador de fundo da pilha $

O proacuteximo siacutembolo de entrada eacute id e o estado 0 tem uma transiccedilatildeo sob id p o estado 5

38 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

A partir do item [F rarr id ] no estado 5 efetuamos uma reduccedilatildeo segundo a produccedilatildeo F rarr id

Na linha 2 o estado 5 eacute empilhado (siacutembolo id)

I5

F rarr id

Natildeo haacute transiccedilatildeo a partir do estado 5 sob a entrada por isso reduzimos

39 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o lado direito da produccedilatildeo da linha (2) eacute id correspondendo ao estado 5 e seu lado direito eacute o F

Com os estados ao desempilhar o estado 5 correspondendo ao siacutembolo id o estado 0 passa a ser o topo

0 F $

40 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id I3

T rarr F

F

Procuramos uma transiccedilatildeo sob F o lado esquerdo da produccedilatildeo

0 F $

O estado 0 possui uma transiccedilatildeo em F p o estado 3 onde empilhamos o estado 3 com o siacutembolo F Ver linha (3)

3

41 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I3

T rarr F

Natildeo haacute transiccedilatildeo a partir do estado 3 sob a entrada por isso reduzimos

A partir do item [T rarr F ] no estado 3 efetuamos uma reduccedilatildeo segundo a produccedilatildeo T rarr F

3

0

T $

42 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

I7

T rarr T F

F rarr ( E )

F rarr id

id

Como outro exemplo considere a linha (5) com o estado 7 referente ao siacutembolo no topo da pilha

Esse estado 7 possui uma transaccedilatildeo para o estado 5 sob a entrada id de modo que empilhamos o estado 5

43 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o estado 5 natildeo possui transiccedilotildees de modo que reduzimos segundo F rarr id

quando removemos da pilha o estado 5 correspondente ao lado direito id o estado 7 passa a ser o topo da pilha

44 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Como o estado 7 possui uma transaccedilatildeo sob F para o estado 10 empilhamos o estado 10 (siacutembolo F)

I7

T rarr T F

F rarr ( E )

F rarr id

I10

T rarr T F

F

45 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O algoritmo eacute o mesmo para todos

os analisadores sintaacuteticos LR

Soacute a tabela de anaacutelise eacute diferente

de um analisador para o outro

O algoritmo lecirc caracteres de um

buffer de entrada um de cada vez

46 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O analisador sintaacutetico shift-reduce

transfere um siacutembolo para pilha jaacute

o analisador sintaacutetico LR transfere

um estado

Cada estado resume a informaccedilatildeo

contida na pilha abaixo dele

47 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

A pilha conteacutem uma sequencia de

estados s0s1 sm onde sm estaacute

no topo

No meacutetodo SLR a pilha conteacutem

estados do autocircmato LR(0)

Por construccedilatildeo a cada estado eacute

associado 1 siacutembolo da gramaacutetica

48 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Lembrem-se de que os estados

correspondem a conj de itens e

que haacute uma transiccedilatildeo do estado i

para o estado j se GOTO(Ii X) = Ij

Todas as transiccedilotildees para o estado

j devem ser para o mesmo siacutembolo

da gramaacutetica X

49 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

Sm

Sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Desta forma cada estado exceto

o estado inicial 0 possui um uacutenico

siacutembolo da gramaacutetica associado a

ele

50 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

A tabela LR consiste em duas partes ACTION uma funccedilatildeo de accedilatildeo de anaacutelise e GOTO uma funccedilatildeo de transiccedilatildeo

1 A funccedilatildeo ACTION recebe como argumentos um estado i e um estado a (ou $) O valor de ACTION(i a) pode ter um dos quatro formatos

a) Shift j onde j eacute um estado

A accedilatildeo tomada pelo analisador sintaacutetico efetivamente transfere a entrada a para a pilha mas usa o estado j para representar a

51 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

b) Reduce Ararr β A accedilatildeo do analisador efetivamente reduz β no topo da pilha para A o lado esquerdo da produccedilatildeo

c) Accept O analisador aceita a entrada e termina a anaacutelise

d) Error O analisador descobre um erro em sua entrada passa o controle p o recuperador de erro que toma alguma accedilatildeo corretiva

2 Estendemos a funccedilatildeo GOTO definida sobre um conjunto de itens para os estados se GOTO(Ii A) = Ij entatildeo GOTO tambeacutem mapeia um estado i e um natildeo-terminal A para o estado j

52 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

Para descrever o comportamento de uma analisador LR eacute recomendaacutevel ter uma notaccedilatildeo representado o estado completo do analisador sua pilha e a entrada restante

Uma configuraccedilatildeo p um analisador LR eacute um par (s0s1sm aiai+1an $) O primeiro componente eacute o conteuacutedo da pilha com o topo agrave direita e o segundo componente representa a entrada restante

Essa configuraccedilatildeo representa a seguinte forma sentencial agrave direita (X0X1Xmaiai+1an) Assim como faria um analisador shift-reduce

53 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

A uacutenica diferenccedila eacute que em inveacutes de siacutembolos da gramaacutetica a pilha conteacutem estados a partir dos quais os siacutembolos da gramaacutetica podem ser recuperados

Ou seja Xi eacute o siacutembolo da gramaacutetica representado pelo estado si

Observe que s0 o estado inicial do analisador sintaacutetico natildeo representa um siacutembolo da gramaacutetica e serve como marcador de fundo da pilha aleacutem de desempenhar um papel importante na anaacutelise

54 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

O proacuteximo movimento do analisador a partir da configuraccedilatildeo dada eacute determinado pela leitura de ai o siacutembolo de entrada corrente e sm o estado do topo da pilha e entatildeo consultando a entrada ACTION[sm ai] na tabela de accedilatildeo de anaacutelise

As configuraccedilotildees restantes apoacutes cada um dos quatro tipos de movimentaccedilatildeo satildeo as seguintes

1 Se ACTION[Sm ai] = shift s o analisador sintaacutetico executa um movimento de transferecircncia (shift move) ele empilha o estado s e avanccedila da entrada resultando na configuraccedilatildeo (s0s1 sm ai+1an $)

55 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2 Se ACTION[Sm ai]=reduce Ararrβ entatildeo o analisador sintaacutetico executa um movimento de reduzir (reduce move) resultando na configuraccedilatildeo (s0s1 sm-rs aiai+1an $)

onde r eacute o comprimento de β e s = GOTO[sm-r A]

Aqui o analisador sintaacutetico incialmente desempilhou os r siacutembolos de estado da pilha expondo o estado sm-r

O analisador sintaacutetico entatildeo empilhou s a entrada para GOTO[sm-r A] na pilha O siacutembolo corrente da entrada natildeo eacute alterado em um movimento de reduzir

56 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2

Para os LR que construiremos Xm-r+1Xm a sequencia de siacutembolos da gramaacutetica correspondendo aos estados retirados da pilha sempre iratildeo casar com β o lado direito da produccedilatildeo sendo reduzida

A saiacuteda de um analisador LR eacute gerada apoacutes um movimento de reduzir executando a accedilatildeo semacircntica associada agrave produccedilatildeo que estaacute sendo reduzida

No momento vamos considerar que a saiacuteda consiste soacute na impressatildeo da produccedilatildeo de reduccedilatildeo

57 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

3 Se ACTION[sm ai] = accept a anaacutelise estaacute concluiacuteda

4 Se ACTION[sm ai] = error o analisador sintaacutetico descobriu um erro e ativa uma rotina para recuperaccedilatildeo de erro

Todos os analisadores sintaacuteticos LR se comportam dessa maneira

A uacutenica diferenccedila entre eles diz respeito a informaccedilatildeo contida nos campos ACTION e GOTO da tabela de anaacutelise

O algoritmo de anaacutelise LR eacute resumido nos proacuteximos slides

58 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

Entrada Uma cadeia de entrada w e uma tabela de anaacutelise com funccedilotildees ACTION e GOTO para uma gramaacutetica G

Saiacuteda Se w estaacute em L(G) os passos os passos de uma reduccedilatildeo de uma anaacutelise ascendente para w

Caso contraacuterio uma indicaccedilatildeo de erro

Meacutetodo Inicialmente o analisador sintaacutetico possui w$ no buffer de entrada e s0 em sua pilha onde s0 representa o estado inicial

O analisador sintaacutetico entatildeo executa o algoritmo

59 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

[PSEUDO] seja a o primeiro siacutembolo de w$ while (1) Seja s o estado no topo da pilha if (ACTION[s a] = shift t) empilha t na pilha seja a o proacuteximo siacutembolo da entrada else if (ACTION[s a] = reduce Ararr β) desempilha siacutembolos |β| da pilha faccedila o estado t agora ser o topo da pilha empilhe GOTO[t A] na pilha imprima a produccedilatildeo Ararr β else if (ACTION[s a] = accept) pare a anaacutelise terminou

else chame uma rotina de recuperaccedilatildeo de erros

60 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR ndash Exemplo

A tabela do proacuteximo slide monstra as funccedilotildees ACTION e GOTO de uma tabela de anaacutelise LR para a gramaacutetica de expressatildeo estudada nesta aula e repetida aqui com produccedilotildees numeradas

Os coacutedigos para as accedilotildees satildeo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

(1) E rarr E + T

(2) E rarr T

(3) T rarr T F

(4) T rarr F

(5) F rarr ( E )

(6) F rarr id

1 Si significa avanccedila na entrada e empilha o estado i na pilha

2 Rj significa reduce segundo a produccedilatildeo de nuacutemero j

3 Acc significa accept

4 Entrada em branco significa error

61 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Estado ACTION

id + ( ) $

0 s5 s4

1 S6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4

5 r6 r6 r6 r6

6 s5 s4

7 s5 s4

8 r6 s11

9 s1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

GOTO

E T F

1 2 3

8 2 3

9 3

10

O valor de GOTO(s a) para o

terminal a estaacute em ACTION da

tabela de anaacutelise conectado agrave

accedilatildeo de transferecircncia sob a

entrada a e o estado s

O GOTO fornece o GOTO[s a]

para os natildeo-terminais A

Ok

Mas como eu consigo os dados

desta tabela

62 Geovane Griesang

A sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

FOLLOW(E) = FOLLOW(Ersquo) = ) $

FOLLOW(T) = FOLLOW(Trsquo) = + ) $

FOLLOW(F) = + ) $

63 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Construindo tabelas de anaacutelise SLR

Esse meacutetodo eacute o mais simples dos LRs Vamos nos referir a tabela de anaacutelise construiacuteda por este meacutetodo como uma tabela SLR e o analisador LR usando uma tabela SLR como um analisador sintaacutetico SLR

O meacutetodo SLR comeccedila com os itens LR(0) e autocircmatos LR(0) ou seja dada uma gramaacutetica G estendemos G para produzir Grsquo com o novo siacutembolo inicial Srsquo A partir de Grsquo construiacutemos C a coleccedilatildeo canocircnica de conj de itens para Grsquo junto com a funccedilatildeo GOTO

Para construir as entradas ACTION e GOTO da tabela de anaacutelise usando o algoritmo a seguir eacute preciso que conheccedilamos FOLLOW(A) para cada natildeo-terminal A de uma gramaacutetica

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 33: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

33 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E

Aceitar $

I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

34 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Como os autocircmatos LR(0) podem ajudar-nos a decidir por uma das accedilotildees shift-reduce (veja as decisotildees entre shift-reduce a seguir)

Suponha que a cadeia γ dos siacutembolos da gramaacutetica leve o autocircmato LR(0) do estado inicial 0 para algum estado j

Desta forma avance sobre o proacuteximo siacutembolo a se o estado j possuir uma transaccedilatildeo sob a

Caso contraacuterio escolha reduzir

Os itens no estado j nos diratildeo qual produccedilatildeo usar

35 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

O algoritmo LR abaixo utiliza sua pilha para acompanhar os estados e tambeacutem os siacutembolos da gramaacutetica

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Na verdade

O siacutembolo da gramaacutetica pode ser

recuperado a parir do estado de

modo que a pilha possua estados

ao inveacutes de siacutembolos

36 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Usamos uma pilha

p conter os estados

Os siacutembolos que correspondem aos estados estatildeo na coluna ldquoSiacutembolosrdquo

A pilha da linha (1) tecircm o estado inicial 0 do autocircmato

37 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Portanto fazemos a transferecircncia

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

O siacutembolo da linha 1 eacute o marcador de fundo da pilha $

O proacuteximo siacutembolo de entrada eacute id e o estado 0 tem uma transiccedilatildeo sob id p o estado 5

38 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

A partir do item [F rarr id ] no estado 5 efetuamos uma reduccedilatildeo segundo a produccedilatildeo F rarr id

Na linha 2 o estado 5 eacute empilhado (siacutembolo id)

I5

F rarr id

Natildeo haacute transiccedilatildeo a partir do estado 5 sob a entrada por isso reduzimos

39 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o lado direito da produccedilatildeo da linha (2) eacute id correspondendo ao estado 5 e seu lado direito eacute o F

Com os estados ao desempilhar o estado 5 correspondendo ao siacutembolo id o estado 0 passa a ser o topo

0 F $

40 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id I3

T rarr F

F

Procuramos uma transiccedilatildeo sob F o lado esquerdo da produccedilatildeo

0 F $

O estado 0 possui uma transiccedilatildeo em F p o estado 3 onde empilhamos o estado 3 com o siacutembolo F Ver linha (3)

3

41 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I3

T rarr F

Natildeo haacute transiccedilatildeo a partir do estado 3 sob a entrada por isso reduzimos

A partir do item [T rarr F ] no estado 3 efetuamos uma reduccedilatildeo segundo a produccedilatildeo T rarr F

3

0

T $

42 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

I7

T rarr T F

F rarr ( E )

F rarr id

id

Como outro exemplo considere a linha (5) com o estado 7 referente ao siacutembolo no topo da pilha

Esse estado 7 possui uma transaccedilatildeo para o estado 5 sob a entrada id de modo que empilhamos o estado 5

43 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o estado 5 natildeo possui transiccedilotildees de modo que reduzimos segundo F rarr id

quando removemos da pilha o estado 5 correspondente ao lado direito id o estado 7 passa a ser o topo da pilha

44 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Como o estado 7 possui uma transaccedilatildeo sob F para o estado 10 empilhamos o estado 10 (siacutembolo F)

I7

T rarr T F

F rarr ( E )

F rarr id

I10

T rarr T F

F

45 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O algoritmo eacute o mesmo para todos

os analisadores sintaacuteticos LR

Soacute a tabela de anaacutelise eacute diferente

de um analisador para o outro

O algoritmo lecirc caracteres de um

buffer de entrada um de cada vez

46 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O analisador sintaacutetico shift-reduce

transfere um siacutembolo para pilha jaacute

o analisador sintaacutetico LR transfere

um estado

Cada estado resume a informaccedilatildeo

contida na pilha abaixo dele

47 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

A pilha conteacutem uma sequencia de

estados s0s1 sm onde sm estaacute

no topo

No meacutetodo SLR a pilha conteacutem

estados do autocircmato LR(0)

Por construccedilatildeo a cada estado eacute

associado 1 siacutembolo da gramaacutetica

48 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Lembrem-se de que os estados

correspondem a conj de itens e

que haacute uma transiccedilatildeo do estado i

para o estado j se GOTO(Ii X) = Ij

Todas as transiccedilotildees para o estado

j devem ser para o mesmo siacutembolo

da gramaacutetica X

49 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

Sm

Sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Desta forma cada estado exceto

o estado inicial 0 possui um uacutenico

siacutembolo da gramaacutetica associado a

ele

50 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

A tabela LR consiste em duas partes ACTION uma funccedilatildeo de accedilatildeo de anaacutelise e GOTO uma funccedilatildeo de transiccedilatildeo

1 A funccedilatildeo ACTION recebe como argumentos um estado i e um estado a (ou $) O valor de ACTION(i a) pode ter um dos quatro formatos

a) Shift j onde j eacute um estado

A accedilatildeo tomada pelo analisador sintaacutetico efetivamente transfere a entrada a para a pilha mas usa o estado j para representar a

51 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

b) Reduce Ararr β A accedilatildeo do analisador efetivamente reduz β no topo da pilha para A o lado esquerdo da produccedilatildeo

c) Accept O analisador aceita a entrada e termina a anaacutelise

d) Error O analisador descobre um erro em sua entrada passa o controle p o recuperador de erro que toma alguma accedilatildeo corretiva

2 Estendemos a funccedilatildeo GOTO definida sobre um conjunto de itens para os estados se GOTO(Ii A) = Ij entatildeo GOTO tambeacutem mapeia um estado i e um natildeo-terminal A para o estado j

52 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

Para descrever o comportamento de uma analisador LR eacute recomendaacutevel ter uma notaccedilatildeo representado o estado completo do analisador sua pilha e a entrada restante

Uma configuraccedilatildeo p um analisador LR eacute um par (s0s1sm aiai+1an $) O primeiro componente eacute o conteuacutedo da pilha com o topo agrave direita e o segundo componente representa a entrada restante

Essa configuraccedilatildeo representa a seguinte forma sentencial agrave direita (X0X1Xmaiai+1an) Assim como faria um analisador shift-reduce

53 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

A uacutenica diferenccedila eacute que em inveacutes de siacutembolos da gramaacutetica a pilha conteacutem estados a partir dos quais os siacutembolos da gramaacutetica podem ser recuperados

Ou seja Xi eacute o siacutembolo da gramaacutetica representado pelo estado si

Observe que s0 o estado inicial do analisador sintaacutetico natildeo representa um siacutembolo da gramaacutetica e serve como marcador de fundo da pilha aleacutem de desempenhar um papel importante na anaacutelise

54 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

O proacuteximo movimento do analisador a partir da configuraccedilatildeo dada eacute determinado pela leitura de ai o siacutembolo de entrada corrente e sm o estado do topo da pilha e entatildeo consultando a entrada ACTION[sm ai] na tabela de accedilatildeo de anaacutelise

As configuraccedilotildees restantes apoacutes cada um dos quatro tipos de movimentaccedilatildeo satildeo as seguintes

1 Se ACTION[Sm ai] = shift s o analisador sintaacutetico executa um movimento de transferecircncia (shift move) ele empilha o estado s e avanccedila da entrada resultando na configuraccedilatildeo (s0s1 sm ai+1an $)

55 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2 Se ACTION[Sm ai]=reduce Ararrβ entatildeo o analisador sintaacutetico executa um movimento de reduzir (reduce move) resultando na configuraccedilatildeo (s0s1 sm-rs aiai+1an $)

onde r eacute o comprimento de β e s = GOTO[sm-r A]

Aqui o analisador sintaacutetico incialmente desempilhou os r siacutembolos de estado da pilha expondo o estado sm-r

O analisador sintaacutetico entatildeo empilhou s a entrada para GOTO[sm-r A] na pilha O siacutembolo corrente da entrada natildeo eacute alterado em um movimento de reduzir

56 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2

Para os LR que construiremos Xm-r+1Xm a sequencia de siacutembolos da gramaacutetica correspondendo aos estados retirados da pilha sempre iratildeo casar com β o lado direito da produccedilatildeo sendo reduzida

A saiacuteda de um analisador LR eacute gerada apoacutes um movimento de reduzir executando a accedilatildeo semacircntica associada agrave produccedilatildeo que estaacute sendo reduzida

No momento vamos considerar que a saiacuteda consiste soacute na impressatildeo da produccedilatildeo de reduccedilatildeo

57 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

3 Se ACTION[sm ai] = accept a anaacutelise estaacute concluiacuteda

4 Se ACTION[sm ai] = error o analisador sintaacutetico descobriu um erro e ativa uma rotina para recuperaccedilatildeo de erro

Todos os analisadores sintaacuteticos LR se comportam dessa maneira

A uacutenica diferenccedila entre eles diz respeito a informaccedilatildeo contida nos campos ACTION e GOTO da tabela de anaacutelise

O algoritmo de anaacutelise LR eacute resumido nos proacuteximos slides

58 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

Entrada Uma cadeia de entrada w e uma tabela de anaacutelise com funccedilotildees ACTION e GOTO para uma gramaacutetica G

Saiacuteda Se w estaacute em L(G) os passos os passos de uma reduccedilatildeo de uma anaacutelise ascendente para w

Caso contraacuterio uma indicaccedilatildeo de erro

Meacutetodo Inicialmente o analisador sintaacutetico possui w$ no buffer de entrada e s0 em sua pilha onde s0 representa o estado inicial

O analisador sintaacutetico entatildeo executa o algoritmo

59 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

[PSEUDO] seja a o primeiro siacutembolo de w$ while (1) Seja s o estado no topo da pilha if (ACTION[s a] = shift t) empilha t na pilha seja a o proacuteximo siacutembolo da entrada else if (ACTION[s a] = reduce Ararr β) desempilha siacutembolos |β| da pilha faccedila o estado t agora ser o topo da pilha empilhe GOTO[t A] na pilha imprima a produccedilatildeo Ararr β else if (ACTION[s a] = accept) pare a anaacutelise terminou

else chame uma rotina de recuperaccedilatildeo de erros

60 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR ndash Exemplo

A tabela do proacuteximo slide monstra as funccedilotildees ACTION e GOTO de uma tabela de anaacutelise LR para a gramaacutetica de expressatildeo estudada nesta aula e repetida aqui com produccedilotildees numeradas

Os coacutedigos para as accedilotildees satildeo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

(1) E rarr E + T

(2) E rarr T

(3) T rarr T F

(4) T rarr F

(5) F rarr ( E )

(6) F rarr id

1 Si significa avanccedila na entrada e empilha o estado i na pilha

2 Rj significa reduce segundo a produccedilatildeo de nuacutemero j

3 Acc significa accept

4 Entrada em branco significa error

61 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Estado ACTION

id + ( ) $

0 s5 s4

1 S6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4

5 r6 r6 r6 r6

6 s5 s4

7 s5 s4

8 r6 s11

9 s1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

GOTO

E T F

1 2 3

8 2 3

9 3

10

O valor de GOTO(s a) para o

terminal a estaacute em ACTION da

tabela de anaacutelise conectado agrave

accedilatildeo de transferecircncia sob a

entrada a e o estado s

O GOTO fornece o GOTO[s a]

para os natildeo-terminais A

Ok

Mas como eu consigo os dados

desta tabela

62 Geovane Griesang

A sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

FOLLOW(E) = FOLLOW(Ersquo) = ) $

FOLLOW(T) = FOLLOW(Trsquo) = + ) $

FOLLOW(F) = + ) $

63 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Construindo tabelas de anaacutelise SLR

Esse meacutetodo eacute o mais simples dos LRs Vamos nos referir a tabela de anaacutelise construiacuteda por este meacutetodo como uma tabela SLR e o analisador LR usando uma tabela SLR como um analisador sintaacutetico SLR

O meacutetodo SLR comeccedila com os itens LR(0) e autocircmatos LR(0) ou seja dada uma gramaacutetica G estendemos G para produzir Grsquo com o novo siacutembolo inicial Srsquo A partir de Grsquo construiacutemos C a coleccedilatildeo canocircnica de conj de itens para Grsquo junto com a funccedilatildeo GOTO

Para construir as entradas ACTION e GOTO da tabela de anaacutelise usando o algoritmo a seguir eacute preciso que conheccedilamos FOLLOW(A) para cada natildeo-terminal A de uma gramaacutetica

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 34: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

34 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Como os autocircmatos LR(0) podem ajudar-nos a decidir por uma das accedilotildees shift-reduce (veja as decisotildees entre shift-reduce a seguir)

Suponha que a cadeia γ dos siacutembolos da gramaacutetica leve o autocircmato LR(0) do estado inicial 0 para algum estado j

Desta forma avance sobre o proacuteximo siacutembolo a se o estado j possuir uma transaccedilatildeo sob a

Caso contraacuterio escolha reduzir

Os itens no estado j nos diratildeo qual produccedilatildeo usar

35 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

O algoritmo LR abaixo utiliza sua pilha para acompanhar os estados e tambeacutem os siacutembolos da gramaacutetica

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Na verdade

O siacutembolo da gramaacutetica pode ser

recuperado a parir do estado de

modo que a pilha possua estados

ao inveacutes de siacutembolos

36 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Usamos uma pilha

p conter os estados

Os siacutembolos que correspondem aos estados estatildeo na coluna ldquoSiacutembolosrdquo

A pilha da linha (1) tecircm o estado inicial 0 do autocircmato

37 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Portanto fazemos a transferecircncia

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

O siacutembolo da linha 1 eacute o marcador de fundo da pilha $

O proacuteximo siacutembolo de entrada eacute id e o estado 0 tem uma transiccedilatildeo sob id p o estado 5

38 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

A partir do item [F rarr id ] no estado 5 efetuamos uma reduccedilatildeo segundo a produccedilatildeo F rarr id

Na linha 2 o estado 5 eacute empilhado (siacutembolo id)

I5

F rarr id

Natildeo haacute transiccedilatildeo a partir do estado 5 sob a entrada por isso reduzimos

39 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o lado direito da produccedilatildeo da linha (2) eacute id correspondendo ao estado 5 e seu lado direito eacute o F

Com os estados ao desempilhar o estado 5 correspondendo ao siacutembolo id o estado 0 passa a ser o topo

0 F $

40 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id I3

T rarr F

F

Procuramos uma transiccedilatildeo sob F o lado esquerdo da produccedilatildeo

0 F $

O estado 0 possui uma transiccedilatildeo em F p o estado 3 onde empilhamos o estado 3 com o siacutembolo F Ver linha (3)

3

41 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I3

T rarr F

Natildeo haacute transiccedilatildeo a partir do estado 3 sob a entrada por isso reduzimos

A partir do item [T rarr F ] no estado 3 efetuamos uma reduccedilatildeo segundo a produccedilatildeo T rarr F

3

0

T $

42 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

I7

T rarr T F

F rarr ( E )

F rarr id

id

Como outro exemplo considere a linha (5) com o estado 7 referente ao siacutembolo no topo da pilha

Esse estado 7 possui uma transaccedilatildeo para o estado 5 sob a entrada id de modo que empilhamos o estado 5

43 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o estado 5 natildeo possui transiccedilotildees de modo que reduzimos segundo F rarr id

quando removemos da pilha o estado 5 correspondente ao lado direito id o estado 7 passa a ser o topo da pilha

44 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Como o estado 7 possui uma transaccedilatildeo sob F para o estado 10 empilhamos o estado 10 (siacutembolo F)

I7

T rarr T F

F rarr ( E )

F rarr id

I10

T rarr T F

F

45 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O algoritmo eacute o mesmo para todos

os analisadores sintaacuteticos LR

Soacute a tabela de anaacutelise eacute diferente

de um analisador para o outro

O algoritmo lecirc caracteres de um

buffer de entrada um de cada vez

46 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O analisador sintaacutetico shift-reduce

transfere um siacutembolo para pilha jaacute

o analisador sintaacutetico LR transfere

um estado

Cada estado resume a informaccedilatildeo

contida na pilha abaixo dele

47 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

A pilha conteacutem uma sequencia de

estados s0s1 sm onde sm estaacute

no topo

No meacutetodo SLR a pilha conteacutem

estados do autocircmato LR(0)

Por construccedilatildeo a cada estado eacute

associado 1 siacutembolo da gramaacutetica

48 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Lembrem-se de que os estados

correspondem a conj de itens e

que haacute uma transiccedilatildeo do estado i

para o estado j se GOTO(Ii X) = Ij

Todas as transiccedilotildees para o estado

j devem ser para o mesmo siacutembolo

da gramaacutetica X

49 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

Sm

Sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Desta forma cada estado exceto

o estado inicial 0 possui um uacutenico

siacutembolo da gramaacutetica associado a

ele

50 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

A tabela LR consiste em duas partes ACTION uma funccedilatildeo de accedilatildeo de anaacutelise e GOTO uma funccedilatildeo de transiccedilatildeo

1 A funccedilatildeo ACTION recebe como argumentos um estado i e um estado a (ou $) O valor de ACTION(i a) pode ter um dos quatro formatos

a) Shift j onde j eacute um estado

A accedilatildeo tomada pelo analisador sintaacutetico efetivamente transfere a entrada a para a pilha mas usa o estado j para representar a

51 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

b) Reduce Ararr β A accedilatildeo do analisador efetivamente reduz β no topo da pilha para A o lado esquerdo da produccedilatildeo

c) Accept O analisador aceita a entrada e termina a anaacutelise

d) Error O analisador descobre um erro em sua entrada passa o controle p o recuperador de erro que toma alguma accedilatildeo corretiva

2 Estendemos a funccedilatildeo GOTO definida sobre um conjunto de itens para os estados se GOTO(Ii A) = Ij entatildeo GOTO tambeacutem mapeia um estado i e um natildeo-terminal A para o estado j

52 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

Para descrever o comportamento de uma analisador LR eacute recomendaacutevel ter uma notaccedilatildeo representado o estado completo do analisador sua pilha e a entrada restante

Uma configuraccedilatildeo p um analisador LR eacute um par (s0s1sm aiai+1an $) O primeiro componente eacute o conteuacutedo da pilha com o topo agrave direita e o segundo componente representa a entrada restante

Essa configuraccedilatildeo representa a seguinte forma sentencial agrave direita (X0X1Xmaiai+1an) Assim como faria um analisador shift-reduce

53 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

A uacutenica diferenccedila eacute que em inveacutes de siacutembolos da gramaacutetica a pilha conteacutem estados a partir dos quais os siacutembolos da gramaacutetica podem ser recuperados

Ou seja Xi eacute o siacutembolo da gramaacutetica representado pelo estado si

Observe que s0 o estado inicial do analisador sintaacutetico natildeo representa um siacutembolo da gramaacutetica e serve como marcador de fundo da pilha aleacutem de desempenhar um papel importante na anaacutelise

54 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

O proacuteximo movimento do analisador a partir da configuraccedilatildeo dada eacute determinado pela leitura de ai o siacutembolo de entrada corrente e sm o estado do topo da pilha e entatildeo consultando a entrada ACTION[sm ai] na tabela de accedilatildeo de anaacutelise

As configuraccedilotildees restantes apoacutes cada um dos quatro tipos de movimentaccedilatildeo satildeo as seguintes

1 Se ACTION[Sm ai] = shift s o analisador sintaacutetico executa um movimento de transferecircncia (shift move) ele empilha o estado s e avanccedila da entrada resultando na configuraccedilatildeo (s0s1 sm ai+1an $)

55 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2 Se ACTION[Sm ai]=reduce Ararrβ entatildeo o analisador sintaacutetico executa um movimento de reduzir (reduce move) resultando na configuraccedilatildeo (s0s1 sm-rs aiai+1an $)

onde r eacute o comprimento de β e s = GOTO[sm-r A]

Aqui o analisador sintaacutetico incialmente desempilhou os r siacutembolos de estado da pilha expondo o estado sm-r

O analisador sintaacutetico entatildeo empilhou s a entrada para GOTO[sm-r A] na pilha O siacutembolo corrente da entrada natildeo eacute alterado em um movimento de reduzir

56 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2

Para os LR que construiremos Xm-r+1Xm a sequencia de siacutembolos da gramaacutetica correspondendo aos estados retirados da pilha sempre iratildeo casar com β o lado direito da produccedilatildeo sendo reduzida

A saiacuteda de um analisador LR eacute gerada apoacutes um movimento de reduzir executando a accedilatildeo semacircntica associada agrave produccedilatildeo que estaacute sendo reduzida

No momento vamos considerar que a saiacuteda consiste soacute na impressatildeo da produccedilatildeo de reduccedilatildeo

57 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

3 Se ACTION[sm ai] = accept a anaacutelise estaacute concluiacuteda

4 Se ACTION[sm ai] = error o analisador sintaacutetico descobriu um erro e ativa uma rotina para recuperaccedilatildeo de erro

Todos os analisadores sintaacuteticos LR se comportam dessa maneira

A uacutenica diferenccedila entre eles diz respeito a informaccedilatildeo contida nos campos ACTION e GOTO da tabela de anaacutelise

O algoritmo de anaacutelise LR eacute resumido nos proacuteximos slides

58 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

Entrada Uma cadeia de entrada w e uma tabela de anaacutelise com funccedilotildees ACTION e GOTO para uma gramaacutetica G

Saiacuteda Se w estaacute em L(G) os passos os passos de uma reduccedilatildeo de uma anaacutelise ascendente para w

Caso contraacuterio uma indicaccedilatildeo de erro

Meacutetodo Inicialmente o analisador sintaacutetico possui w$ no buffer de entrada e s0 em sua pilha onde s0 representa o estado inicial

O analisador sintaacutetico entatildeo executa o algoritmo

59 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

[PSEUDO] seja a o primeiro siacutembolo de w$ while (1) Seja s o estado no topo da pilha if (ACTION[s a] = shift t) empilha t na pilha seja a o proacuteximo siacutembolo da entrada else if (ACTION[s a] = reduce Ararr β) desempilha siacutembolos |β| da pilha faccedila o estado t agora ser o topo da pilha empilhe GOTO[t A] na pilha imprima a produccedilatildeo Ararr β else if (ACTION[s a] = accept) pare a anaacutelise terminou

else chame uma rotina de recuperaccedilatildeo de erros

60 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR ndash Exemplo

A tabela do proacuteximo slide monstra as funccedilotildees ACTION e GOTO de uma tabela de anaacutelise LR para a gramaacutetica de expressatildeo estudada nesta aula e repetida aqui com produccedilotildees numeradas

Os coacutedigos para as accedilotildees satildeo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

(1) E rarr E + T

(2) E rarr T

(3) T rarr T F

(4) T rarr F

(5) F rarr ( E )

(6) F rarr id

1 Si significa avanccedila na entrada e empilha o estado i na pilha

2 Rj significa reduce segundo a produccedilatildeo de nuacutemero j

3 Acc significa accept

4 Entrada em branco significa error

61 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Estado ACTION

id + ( ) $

0 s5 s4

1 S6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4

5 r6 r6 r6 r6

6 s5 s4

7 s5 s4

8 r6 s11

9 s1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

GOTO

E T F

1 2 3

8 2 3

9 3

10

O valor de GOTO(s a) para o

terminal a estaacute em ACTION da

tabela de anaacutelise conectado agrave

accedilatildeo de transferecircncia sob a

entrada a e o estado s

O GOTO fornece o GOTO[s a]

para os natildeo-terminais A

Ok

Mas como eu consigo os dados

desta tabela

62 Geovane Griesang

A sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

FOLLOW(E) = FOLLOW(Ersquo) = ) $

FOLLOW(T) = FOLLOW(Trsquo) = + ) $

FOLLOW(F) = + ) $

63 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Construindo tabelas de anaacutelise SLR

Esse meacutetodo eacute o mais simples dos LRs Vamos nos referir a tabela de anaacutelise construiacuteda por este meacutetodo como uma tabela SLR e o analisador LR usando uma tabela SLR como um analisador sintaacutetico SLR

O meacutetodo SLR comeccedila com os itens LR(0) e autocircmatos LR(0) ou seja dada uma gramaacutetica G estendemos G para produzir Grsquo com o novo siacutembolo inicial Srsquo A partir de Grsquo construiacutemos C a coleccedilatildeo canocircnica de conj de itens para Grsquo junto com a funccedilatildeo GOTO

Para construir as entradas ACTION e GOTO da tabela de anaacutelise usando o algoritmo a seguir eacute preciso que conheccedilamos FOLLOW(A) para cada natildeo-terminal A de uma gramaacutetica

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 35: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

35 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

O algoritmo LR abaixo utiliza sua pilha para acompanhar os estados e tambeacutem os siacutembolos da gramaacutetica

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Na verdade

O siacutembolo da gramaacutetica pode ser

recuperado a parir do estado de

modo que a pilha possua estados

ao inveacutes de siacutembolos

36 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Usamos uma pilha

p conter os estados

Os siacutembolos que correspondem aos estados estatildeo na coluna ldquoSiacutembolosrdquo

A pilha da linha (1) tecircm o estado inicial 0 do autocircmato

37 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Portanto fazemos a transferecircncia

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

O siacutembolo da linha 1 eacute o marcador de fundo da pilha $

O proacuteximo siacutembolo de entrada eacute id e o estado 0 tem uma transiccedilatildeo sob id p o estado 5

38 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

A partir do item [F rarr id ] no estado 5 efetuamos uma reduccedilatildeo segundo a produccedilatildeo F rarr id

Na linha 2 o estado 5 eacute empilhado (siacutembolo id)

I5

F rarr id

Natildeo haacute transiccedilatildeo a partir do estado 5 sob a entrada por isso reduzimos

39 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o lado direito da produccedilatildeo da linha (2) eacute id correspondendo ao estado 5 e seu lado direito eacute o F

Com os estados ao desempilhar o estado 5 correspondendo ao siacutembolo id o estado 0 passa a ser o topo

0 F $

40 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id I3

T rarr F

F

Procuramos uma transiccedilatildeo sob F o lado esquerdo da produccedilatildeo

0 F $

O estado 0 possui uma transiccedilatildeo em F p o estado 3 onde empilhamos o estado 3 com o siacutembolo F Ver linha (3)

3

41 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I3

T rarr F

Natildeo haacute transiccedilatildeo a partir do estado 3 sob a entrada por isso reduzimos

A partir do item [T rarr F ] no estado 3 efetuamos uma reduccedilatildeo segundo a produccedilatildeo T rarr F

3

0

T $

42 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

I7

T rarr T F

F rarr ( E )

F rarr id

id

Como outro exemplo considere a linha (5) com o estado 7 referente ao siacutembolo no topo da pilha

Esse estado 7 possui uma transaccedilatildeo para o estado 5 sob a entrada id de modo que empilhamos o estado 5

43 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o estado 5 natildeo possui transiccedilotildees de modo que reduzimos segundo F rarr id

quando removemos da pilha o estado 5 correspondente ao lado direito id o estado 7 passa a ser o topo da pilha

44 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Como o estado 7 possui uma transaccedilatildeo sob F para o estado 10 empilhamos o estado 10 (siacutembolo F)

I7

T rarr T F

F rarr ( E )

F rarr id

I10

T rarr T F

F

45 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O algoritmo eacute o mesmo para todos

os analisadores sintaacuteticos LR

Soacute a tabela de anaacutelise eacute diferente

de um analisador para o outro

O algoritmo lecirc caracteres de um

buffer de entrada um de cada vez

46 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O analisador sintaacutetico shift-reduce

transfere um siacutembolo para pilha jaacute

o analisador sintaacutetico LR transfere

um estado

Cada estado resume a informaccedilatildeo

contida na pilha abaixo dele

47 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

A pilha conteacutem uma sequencia de

estados s0s1 sm onde sm estaacute

no topo

No meacutetodo SLR a pilha conteacutem

estados do autocircmato LR(0)

Por construccedilatildeo a cada estado eacute

associado 1 siacutembolo da gramaacutetica

48 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Lembrem-se de que os estados

correspondem a conj de itens e

que haacute uma transiccedilatildeo do estado i

para o estado j se GOTO(Ii X) = Ij

Todas as transiccedilotildees para o estado

j devem ser para o mesmo siacutembolo

da gramaacutetica X

49 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

Sm

Sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Desta forma cada estado exceto

o estado inicial 0 possui um uacutenico

siacutembolo da gramaacutetica associado a

ele

50 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

A tabela LR consiste em duas partes ACTION uma funccedilatildeo de accedilatildeo de anaacutelise e GOTO uma funccedilatildeo de transiccedilatildeo

1 A funccedilatildeo ACTION recebe como argumentos um estado i e um estado a (ou $) O valor de ACTION(i a) pode ter um dos quatro formatos

a) Shift j onde j eacute um estado

A accedilatildeo tomada pelo analisador sintaacutetico efetivamente transfere a entrada a para a pilha mas usa o estado j para representar a

51 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

b) Reduce Ararr β A accedilatildeo do analisador efetivamente reduz β no topo da pilha para A o lado esquerdo da produccedilatildeo

c) Accept O analisador aceita a entrada e termina a anaacutelise

d) Error O analisador descobre um erro em sua entrada passa o controle p o recuperador de erro que toma alguma accedilatildeo corretiva

2 Estendemos a funccedilatildeo GOTO definida sobre um conjunto de itens para os estados se GOTO(Ii A) = Ij entatildeo GOTO tambeacutem mapeia um estado i e um natildeo-terminal A para o estado j

52 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

Para descrever o comportamento de uma analisador LR eacute recomendaacutevel ter uma notaccedilatildeo representado o estado completo do analisador sua pilha e a entrada restante

Uma configuraccedilatildeo p um analisador LR eacute um par (s0s1sm aiai+1an $) O primeiro componente eacute o conteuacutedo da pilha com o topo agrave direita e o segundo componente representa a entrada restante

Essa configuraccedilatildeo representa a seguinte forma sentencial agrave direita (X0X1Xmaiai+1an) Assim como faria um analisador shift-reduce

53 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

A uacutenica diferenccedila eacute que em inveacutes de siacutembolos da gramaacutetica a pilha conteacutem estados a partir dos quais os siacutembolos da gramaacutetica podem ser recuperados

Ou seja Xi eacute o siacutembolo da gramaacutetica representado pelo estado si

Observe que s0 o estado inicial do analisador sintaacutetico natildeo representa um siacutembolo da gramaacutetica e serve como marcador de fundo da pilha aleacutem de desempenhar um papel importante na anaacutelise

54 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

O proacuteximo movimento do analisador a partir da configuraccedilatildeo dada eacute determinado pela leitura de ai o siacutembolo de entrada corrente e sm o estado do topo da pilha e entatildeo consultando a entrada ACTION[sm ai] na tabela de accedilatildeo de anaacutelise

As configuraccedilotildees restantes apoacutes cada um dos quatro tipos de movimentaccedilatildeo satildeo as seguintes

1 Se ACTION[Sm ai] = shift s o analisador sintaacutetico executa um movimento de transferecircncia (shift move) ele empilha o estado s e avanccedila da entrada resultando na configuraccedilatildeo (s0s1 sm ai+1an $)

55 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2 Se ACTION[Sm ai]=reduce Ararrβ entatildeo o analisador sintaacutetico executa um movimento de reduzir (reduce move) resultando na configuraccedilatildeo (s0s1 sm-rs aiai+1an $)

onde r eacute o comprimento de β e s = GOTO[sm-r A]

Aqui o analisador sintaacutetico incialmente desempilhou os r siacutembolos de estado da pilha expondo o estado sm-r

O analisador sintaacutetico entatildeo empilhou s a entrada para GOTO[sm-r A] na pilha O siacutembolo corrente da entrada natildeo eacute alterado em um movimento de reduzir

56 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2

Para os LR que construiremos Xm-r+1Xm a sequencia de siacutembolos da gramaacutetica correspondendo aos estados retirados da pilha sempre iratildeo casar com β o lado direito da produccedilatildeo sendo reduzida

A saiacuteda de um analisador LR eacute gerada apoacutes um movimento de reduzir executando a accedilatildeo semacircntica associada agrave produccedilatildeo que estaacute sendo reduzida

No momento vamos considerar que a saiacuteda consiste soacute na impressatildeo da produccedilatildeo de reduccedilatildeo

57 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

3 Se ACTION[sm ai] = accept a anaacutelise estaacute concluiacuteda

4 Se ACTION[sm ai] = error o analisador sintaacutetico descobriu um erro e ativa uma rotina para recuperaccedilatildeo de erro

Todos os analisadores sintaacuteticos LR se comportam dessa maneira

A uacutenica diferenccedila entre eles diz respeito a informaccedilatildeo contida nos campos ACTION e GOTO da tabela de anaacutelise

O algoritmo de anaacutelise LR eacute resumido nos proacuteximos slides

58 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

Entrada Uma cadeia de entrada w e uma tabela de anaacutelise com funccedilotildees ACTION e GOTO para uma gramaacutetica G

Saiacuteda Se w estaacute em L(G) os passos os passos de uma reduccedilatildeo de uma anaacutelise ascendente para w

Caso contraacuterio uma indicaccedilatildeo de erro

Meacutetodo Inicialmente o analisador sintaacutetico possui w$ no buffer de entrada e s0 em sua pilha onde s0 representa o estado inicial

O analisador sintaacutetico entatildeo executa o algoritmo

59 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

[PSEUDO] seja a o primeiro siacutembolo de w$ while (1) Seja s o estado no topo da pilha if (ACTION[s a] = shift t) empilha t na pilha seja a o proacuteximo siacutembolo da entrada else if (ACTION[s a] = reduce Ararr β) desempilha siacutembolos |β| da pilha faccedila o estado t agora ser o topo da pilha empilhe GOTO[t A] na pilha imprima a produccedilatildeo Ararr β else if (ACTION[s a] = accept) pare a anaacutelise terminou

else chame uma rotina de recuperaccedilatildeo de erros

60 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR ndash Exemplo

A tabela do proacuteximo slide monstra as funccedilotildees ACTION e GOTO de uma tabela de anaacutelise LR para a gramaacutetica de expressatildeo estudada nesta aula e repetida aqui com produccedilotildees numeradas

Os coacutedigos para as accedilotildees satildeo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

(1) E rarr E + T

(2) E rarr T

(3) T rarr T F

(4) T rarr F

(5) F rarr ( E )

(6) F rarr id

1 Si significa avanccedila na entrada e empilha o estado i na pilha

2 Rj significa reduce segundo a produccedilatildeo de nuacutemero j

3 Acc significa accept

4 Entrada em branco significa error

61 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Estado ACTION

id + ( ) $

0 s5 s4

1 S6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4

5 r6 r6 r6 r6

6 s5 s4

7 s5 s4

8 r6 s11

9 s1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

GOTO

E T F

1 2 3

8 2 3

9 3

10

O valor de GOTO(s a) para o

terminal a estaacute em ACTION da

tabela de anaacutelise conectado agrave

accedilatildeo de transferecircncia sob a

entrada a e o estado s

O GOTO fornece o GOTO[s a]

para os natildeo-terminais A

Ok

Mas como eu consigo os dados

desta tabela

62 Geovane Griesang

A sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

FOLLOW(E) = FOLLOW(Ersquo) = ) $

FOLLOW(T) = FOLLOW(Trsquo) = + ) $

FOLLOW(F) = + ) $

63 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Construindo tabelas de anaacutelise SLR

Esse meacutetodo eacute o mais simples dos LRs Vamos nos referir a tabela de anaacutelise construiacuteda por este meacutetodo como uma tabela SLR e o analisador LR usando uma tabela SLR como um analisador sintaacutetico SLR

O meacutetodo SLR comeccedila com os itens LR(0) e autocircmatos LR(0) ou seja dada uma gramaacutetica G estendemos G para produzir Grsquo com o novo siacutembolo inicial Srsquo A partir de Grsquo construiacutemos C a coleccedilatildeo canocircnica de conj de itens para Grsquo junto com a funccedilatildeo GOTO

Para construir as entradas ACTION e GOTO da tabela de anaacutelise usando o algoritmo a seguir eacute preciso que conheccedilamos FOLLOW(A) para cada natildeo-terminal A de uma gramaacutetica

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 36: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

36 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Usamos uma pilha

p conter os estados

Os siacutembolos que correspondem aos estados estatildeo na coluna ldquoSiacutembolosrdquo

A pilha da linha (1) tecircm o estado inicial 0 do autocircmato

37 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Portanto fazemos a transferecircncia

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

O siacutembolo da linha 1 eacute o marcador de fundo da pilha $

O proacuteximo siacutembolo de entrada eacute id e o estado 0 tem uma transiccedilatildeo sob id p o estado 5

38 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

A partir do item [F rarr id ] no estado 5 efetuamos uma reduccedilatildeo segundo a produccedilatildeo F rarr id

Na linha 2 o estado 5 eacute empilhado (siacutembolo id)

I5

F rarr id

Natildeo haacute transiccedilatildeo a partir do estado 5 sob a entrada por isso reduzimos

39 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o lado direito da produccedilatildeo da linha (2) eacute id correspondendo ao estado 5 e seu lado direito eacute o F

Com os estados ao desempilhar o estado 5 correspondendo ao siacutembolo id o estado 0 passa a ser o topo

0 F $

40 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id I3

T rarr F

F

Procuramos uma transiccedilatildeo sob F o lado esquerdo da produccedilatildeo

0 F $

O estado 0 possui uma transiccedilatildeo em F p o estado 3 onde empilhamos o estado 3 com o siacutembolo F Ver linha (3)

3

41 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I3

T rarr F

Natildeo haacute transiccedilatildeo a partir do estado 3 sob a entrada por isso reduzimos

A partir do item [T rarr F ] no estado 3 efetuamos uma reduccedilatildeo segundo a produccedilatildeo T rarr F

3

0

T $

42 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

I7

T rarr T F

F rarr ( E )

F rarr id

id

Como outro exemplo considere a linha (5) com o estado 7 referente ao siacutembolo no topo da pilha

Esse estado 7 possui uma transaccedilatildeo para o estado 5 sob a entrada id de modo que empilhamos o estado 5

43 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o estado 5 natildeo possui transiccedilotildees de modo que reduzimos segundo F rarr id

quando removemos da pilha o estado 5 correspondente ao lado direito id o estado 7 passa a ser o topo da pilha

44 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Como o estado 7 possui uma transaccedilatildeo sob F para o estado 10 empilhamos o estado 10 (siacutembolo F)

I7

T rarr T F

F rarr ( E )

F rarr id

I10

T rarr T F

F

45 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O algoritmo eacute o mesmo para todos

os analisadores sintaacuteticos LR

Soacute a tabela de anaacutelise eacute diferente

de um analisador para o outro

O algoritmo lecirc caracteres de um

buffer de entrada um de cada vez

46 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O analisador sintaacutetico shift-reduce

transfere um siacutembolo para pilha jaacute

o analisador sintaacutetico LR transfere

um estado

Cada estado resume a informaccedilatildeo

contida na pilha abaixo dele

47 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

A pilha conteacutem uma sequencia de

estados s0s1 sm onde sm estaacute

no topo

No meacutetodo SLR a pilha conteacutem

estados do autocircmato LR(0)

Por construccedilatildeo a cada estado eacute

associado 1 siacutembolo da gramaacutetica

48 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Lembrem-se de que os estados

correspondem a conj de itens e

que haacute uma transiccedilatildeo do estado i

para o estado j se GOTO(Ii X) = Ij

Todas as transiccedilotildees para o estado

j devem ser para o mesmo siacutembolo

da gramaacutetica X

49 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

Sm

Sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Desta forma cada estado exceto

o estado inicial 0 possui um uacutenico

siacutembolo da gramaacutetica associado a

ele

50 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

A tabela LR consiste em duas partes ACTION uma funccedilatildeo de accedilatildeo de anaacutelise e GOTO uma funccedilatildeo de transiccedilatildeo

1 A funccedilatildeo ACTION recebe como argumentos um estado i e um estado a (ou $) O valor de ACTION(i a) pode ter um dos quatro formatos

a) Shift j onde j eacute um estado

A accedilatildeo tomada pelo analisador sintaacutetico efetivamente transfere a entrada a para a pilha mas usa o estado j para representar a

51 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

b) Reduce Ararr β A accedilatildeo do analisador efetivamente reduz β no topo da pilha para A o lado esquerdo da produccedilatildeo

c) Accept O analisador aceita a entrada e termina a anaacutelise

d) Error O analisador descobre um erro em sua entrada passa o controle p o recuperador de erro que toma alguma accedilatildeo corretiva

2 Estendemos a funccedilatildeo GOTO definida sobre um conjunto de itens para os estados se GOTO(Ii A) = Ij entatildeo GOTO tambeacutem mapeia um estado i e um natildeo-terminal A para o estado j

52 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

Para descrever o comportamento de uma analisador LR eacute recomendaacutevel ter uma notaccedilatildeo representado o estado completo do analisador sua pilha e a entrada restante

Uma configuraccedilatildeo p um analisador LR eacute um par (s0s1sm aiai+1an $) O primeiro componente eacute o conteuacutedo da pilha com o topo agrave direita e o segundo componente representa a entrada restante

Essa configuraccedilatildeo representa a seguinte forma sentencial agrave direita (X0X1Xmaiai+1an) Assim como faria um analisador shift-reduce

53 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

A uacutenica diferenccedila eacute que em inveacutes de siacutembolos da gramaacutetica a pilha conteacutem estados a partir dos quais os siacutembolos da gramaacutetica podem ser recuperados

Ou seja Xi eacute o siacutembolo da gramaacutetica representado pelo estado si

Observe que s0 o estado inicial do analisador sintaacutetico natildeo representa um siacutembolo da gramaacutetica e serve como marcador de fundo da pilha aleacutem de desempenhar um papel importante na anaacutelise

54 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

O proacuteximo movimento do analisador a partir da configuraccedilatildeo dada eacute determinado pela leitura de ai o siacutembolo de entrada corrente e sm o estado do topo da pilha e entatildeo consultando a entrada ACTION[sm ai] na tabela de accedilatildeo de anaacutelise

As configuraccedilotildees restantes apoacutes cada um dos quatro tipos de movimentaccedilatildeo satildeo as seguintes

1 Se ACTION[Sm ai] = shift s o analisador sintaacutetico executa um movimento de transferecircncia (shift move) ele empilha o estado s e avanccedila da entrada resultando na configuraccedilatildeo (s0s1 sm ai+1an $)

55 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2 Se ACTION[Sm ai]=reduce Ararrβ entatildeo o analisador sintaacutetico executa um movimento de reduzir (reduce move) resultando na configuraccedilatildeo (s0s1 sm-rs aiai+1an $)

onde r eacute o comprimento de β e s = GOTO[sm-r A]

Aqui o analisador sintaacutetico incialmente desempilhou os r siacutembolos de estado da pilha expondo o estado sm-r

O analisador sintaacutetico entatildeo empilhou s a entrada para GOTO[sm-r A] na pilha O siacutembolo corrente da entrada natildeo eacute alterado em um movimento de reduzir

56 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2

Para os LR que construiremos Xm-r+1Xm a sequencia de siacutembolos da gramaacutetica correspondendo aos estados retirados da pilha sempre iratildeo casar com β o lado direito da produccedilatildeo sendo reduzida

A saiacuteda de um analisador LR eacute gerada apoacutes um movimento de reduzir executando a accedilatildeo semacircntica associada agrave produccedilatildeo que estaacute sendo reduzida

No momento vamos considerar que a saiacuteda consiste soacute na impressatildeo da produccedilatildeo de reduccedilatildeo

57 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

3 Se ACTION[sm ai] = accept a anaacutelise estaacute concluiacuteda

4 Se ACTION[sm ai] = error o analisador sintaacutetico descobriu um erro e ativa uma rotina para recuperaccedilatildeo de erro

Todos os analisadores sintaacuteticos LR se comportam dessa maneira

A uacutenica diferenccedila entre eles diz respeito a informaccedilatildeo contida nos campos ACTION e GOTO da tabela de anaacutelise

O algoritmo de anaacutelise LR eacute resumido nos proacuteximos slides

58 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

Entrada Uma cadeia de entrada w e uma tabela de anaacutelise com funccedilotildees ACTION e GOTO para uma gramaacutetica G

Saiacuteda Se w estaacute em L(G) os passos os passos de uma reduccedilatildeo de uma anaacutelise ascendente para w

Caso contraacuterio uma indicaccedilatildeo de erro

Meacutetodo Inicialmente o analisador sintaacutetico possui w$ no buffer de entrada e s0 em sua pilha onde s0 representa o estado inicial

O analisador sintaacutetico entatildeo executa o algoritmo

59 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

[PSEUDO] seja a o primeiro siacutembolo de w$ while (1) Seja s o estado no topo da pilha if (ACTION[s a] = shift t) empilha t na pilha seja a o proacuteximo siacutembolo da entrada else if (ACTION[s a] = reduce Ararr β) desempilha siacutembolos |β| da pilha faccedila o estado t agora ser o topo da pilha empilhe GOTO[t A] na pilha imprima a produccedilatildeo Ararr β else if (ACTION[s a] = accept) pare a anaacutelise terminou

else chame uma rotina de recuperaccedilatildeo de erros

60 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR ndash Exemplo

A tabela do proacuteximo slide monstra as funccedilotildees ACTION e GOTO de uma tabela de anaacutelise LR para a gramaacutetica de expressatildeo estudada nesta aula e repetida aqui com produccedilotildees numeradas

Os coacutedigos para as accedilotildees satildeo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

(1) E rarr E + T

(2) E rarr T

(3) T rarr T F

(4) T rarr F

(5) F rarr ( E )

(6) F rarr id

1 Si significa avanccedila na entrada e empilha o estado i na pilha

2 Rj significa reduce segundo a produccedilatildeo de nuacutemero j

3 Acc significa accept

4 Entrada em branco significa error

61 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Estado ACTION

id + ( ) $

0 s5 s4

1 S6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4

5 r6 r6 r6 r6

6 s5 s4

7 s5 s4

8 r6 s11

9 s1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

GOTO

E T F

1 2 3

8 2 3

9 3

10

O valor de GOTO(s a) para o

terminal a estaacute em ACTION da

tabela de anaacutelise conectado agrave

accedilatildeo de transferecircncia sob a

entrada a e o estado s

O GOTO fornece o GOTO[s a]

para os natildeo-terminais A

Ok

Mas como eu consigo os dados

desta tabela

62 Geovane Griesang

A sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

FOLLOW(E) = FOLLOW(Ersquo) = ) $

FOLLOW(T) = FOLLOW(Trsquo) = + ) $

FOLLOW(F) = + ) $

63 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Construindo tabelas de anaacutelise SLR

Esse meacutetodo eacute o mais simples dos LRs Vamos nos referir a tabela de anaacutelise construiacuteda por este meacutetodo como uma tabela SLR e o analisador LR usando uma tabela SLR como um analisador sintaacutetico SLR

O meacutetodo SLR comeccedila com os itens LR(0) e autocircmatos LR(0) ou seja dada uma gramaacutetica G estendemos G para produzir Grsquo com o novo siacutembolo inicial Srsquo A partir de Grsquo construiacutemos C a coleccedilatildeo canocircnica de conj de itens para Grsquo junto com a funccedilatildeo GOTO

Para construir as entradas ACTION e GOTO da tabela de anaacutelise usando o algoritmo a seguir eacute preciso que conheccedilamos FOLLOW(A) para cada natildeo-terminal A de uma gramaacutetica

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 37: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

37 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Portanto fazemos a transferecircncia

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

O siacutembolo da linha 1 eacute o marcador de fundo da pilha $

O proacuteximo siacutembolo de entrada eacute id e o estado 0 tem uma transiccedilatildeo sob id p o estado 5

38 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

A partir do item [F rarr id ] no estado 5 efetuamos uma reduccedilatildeo segundo a produccedilatildeo F rarr id

Na linha 2 o estado 5 eacute empilhado (siacutembolo id)

I5

F rarr id

Natildeo haacute transiccedilatildeo a partir do estado 5 sob a entrada por isso reduzimos

39 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o lado direito da produccedilatildeo da linha (2) eacute id correspondendo ao estado 5 e seu lado direito eacute o F

Com os estados ao desempilhar o estado 5 correspondendo ao siacutembolo id o estado 0 passa a ser o topo

0 F $

40 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id I3

T rarr F

F

Procuramos uma transiccedilatildeo sob F o lado esquerdo da produccedilatildeo

0 F $

O estado 0 possui uma transiccedilatildeo em F p o estado 3 onde empilhamos o estado 3 com o siacutembolo F Ver linha (3)

3

41 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I3

T rarr F

Natildeo haacute transiccedilatildeo a partir do estado 3 sob a entrada por isso reduzimos

A partir do item [T rarr F ] no estado 3 efetuamos uma reduccedilatildeo segundo a produccedilatildeo T rarr F

3

0

T $

42 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

I7

T rarr T F

F rarr ( E )

F rarr id

id

Como outro exemplo considere a linha (5) com o estado 7 referente ao siacutembolo no topo da pilha

Esse estado 7 possui uma transaccedilatildeo para o estado 5 sob a entrada id de modo que empilhamos o estado 5

43 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o estado 5 natildeo possui transiccedilotildees de modo que reduzimos segundo F rarr id

quando removemos da pilha o estado 5 correspondente ao lado direito id o estado 7 passa a ser o topo da pilha

44 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Como o estado 7 possui uma transaccedilatildeo sob F para o estado 10 empilhamos o estado 10 (siacutembolo F)

I7

T rarr T F

F rarr ( E )

F rarr id

I10

T rarr T F

F

45 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O algoritmo eacute o mesmo para todos

os analisadores sintaacuteticos LR

Soacute a tabela de anaacutelise eacute diferente

de um analisador para o outro

O algoritmo lecirc caracteres de um

buffer de entrada um de cada vez

46 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O analisador sintaacutetico shift-reduce

transfere um siacutembolo para pilha jaacute

o analisador sintaacutetico LR transfere

um estado

Cada estado resume a informaccedilatildeo

contida na pilha abaixo dele

47 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

A pilha conteacutem uma sequencia de

estados s0s1 sm onde sm estaacute

no topo

No meacutetodo SLR a pilha conteacutem

estados do autocircmato LR(0)

Por construccedilatildeo a cada estado eacute

associado 1 siacutembolo da gramaacutetica

48 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Lembrem-se de que os estados

correspondem a conj de itens e

que haacute uma transiccedilatildeo do estado i

para o estado j se GOTO(Ii X) = Ij

Todas as transiccedilotildees para o estado

j devem ser para o mesmo siacutembolo

da gramaacutetica X

49 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

Sm

Sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Desta forma cada estado exceto

o estado inicial 0 possui um uacutenico

siacutembolo da gramaacutetica associado a

ele

50 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

A tabela LR consiste em duas partes ACTION uma funccedilatildeo de accedilatildeo de anaacutelise e GOTO uma funccedilatildeo de transiccedilatildeo

1 A funccedilatildeo ACTION recebe como argumentos um estado i e um estado a (ou $) O valor de ACTION(i a) pode ter um dos quatro formatos

a) Shift j onde j eacute um estado

A accedilatildeo tomada pelo analisador sintaacutetico efetivamente transfere a entrada a para a pilha mas usa o estado j para representar a

51 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

b) Reduce Ararr β A accedilatildeo do analisador efetivamente reduz β no topo da pilha para A o lado esquerdo da produccedilatildeo

c) Accept O analisador aceita a entrada e termina a anaacutelise

d) Error O analisador descobre um erro em sua entrada passa o controle p o recuperador de erro que toma alguma accedilatildeo corretiva

2 Estendemos a funccedilatildeo GOTO definida sobre um conjunto de itens para os estados se GOTO(Ii A) = Ij entatildeo GOTO tambeacutem mapeia um estado i e um natildeo-terminal A para o estado j

52 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

Para descrever o comportamento de uma analisador LR eacute recomendaacutevel ter uma notaccedilatildeo representado o estado completo do analisador sua pilha e a entrada restante

Uma configuraccedilatildeo p um analisador LR eacute um par (s0s1sm aiai+1an $) O primeiro componente eacute o conteuacutedo da pilha com o topo agrave direita e o segundo componente representa a entrada restante

Essa configuraccedilatildeo representa a seguinte forma sentencial agrave direita (X0X1Xmaiai+1an) Assim como faria um analisador shift-reduce

53 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

A uacutenica diferenccedila eacute que em inveacutes de siacutembolos da gramaacutetica a pilha conteacutem estados a partir dos quais os siacutembolos da gramaacutetica podem ser recuperados

Ou seja Xi eacute o siacutembolo da gramaacutetica representado pelo estado si

Observe que s0 o estado inicial do analisador sintaacutetico natildeo representa um siacutembolo da gramaacutetica e serve como marcador de fundo da pilha aleacutem de desempenhar um papel importante na anaacutelise

54 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

O proacuteximo movimento do analisador a partir da configuraccedilatildeo dada eacute determinado pela leitura de ai o siacutembolo de entrada corrente e sm o estado do topo da pilha e entatildeo consultando a entrada ACTION[sm ai] na tabela de accedilatildeo de anaacutelise

As configuraccedilotildees restantes apoacutes cada um dos quatro tipos de movimentaccedilatildeo satildeo as seguintes

1 Se ACTION[Sm ai] = shift s o analisador sintaacutetico executa um movimento de transferecircncia (shift move) ele empilha o estado s e avanccedila da entrada resultando na configuraccedilatildeo (s0s1 sm ai+1an $)

55 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2 Se ACTION[Sm ai]=reduce Ararrβ entatildeo o analisador sintaacutetico executa um movimento de reduzir (reduce move) resultando na configuraccedilatildeo (s0s1 sm-rs aiai+1an $)

onde r eacute o comprimento de β e s = GOTO[sm-r A]

Aqui o analisador sintaacutetico incialmente desempilhou os r siacutembolos de estado da pilha expondo o estado sm-r

O analisador sintaacutetico entatildeo empilhou s a entrada para GOTO[sm-r A] na pilha O siacutembolo corrente da entrada natildeo eacute alterado em um movimento de reduzir

56 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2

Para os LR que construiremos Xm-r+1Xm a sequencia de siacutembolos da gramaacutetica correspondendo aos estados retirados da pilha sempre iratildeo casar com β o lado direito da produccedilatildeo sendo reduzida

A saiacuteda de um analisador LR eacute gerada apoacutes um movimento de reduzir executando a accedilatildeo semacircntica associada agrave produccedilatildeo que estaacute sendo reduzida

No momento vamos considerar que a saiacuteda consiste soacute na impressatildeo da produccedilatildeo de reduccedilatildeo

57 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

3 Se ACTION[sm ai] = accept a anaacutelise estaacute concluiacuteda

4 Se ACTION[sm ai] = error o analisador sintaacutetico descobriu um erro e ativa uma rotina para recuperaccedilatildeo de erro

Todos os analisadores sintaacuteticos LR se comportam dessa maneira

A uacutenica diferenccedila entre eles diz respeito a informaccedilatildeo contida nos campos ACTION e GOTO da tabela de anaacutelise

O algoritmo de anaacutelise LR eacute resumido nos proacuteximos slides

58 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

Entrada Uma cadeia de entrada w e uma tabela de anaacutelise com funccedilotildees ACTION e GOTO para uma gramaacutetica G

Saiacuteda Se w estaacute em L(G) os passos os passos de uma reduccedilatildeo de uma anaacutelise ascendente para w

Caso contraacuterio uma indicaccedilatildeo de erro

Meacutetodo Inicialmente o analisador sintaacutetico possui w$ no buffer de entrada e s0 em sua pilha onde s0 representa o estado inicial

O analisador sintaacutetico entatildeo executa o algoritmo

59 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

[PSEUDO] seja a o primeiro siacutembolo de w$ while (1) Seja s o estado no topo da pilha if (ACTION[s a] = shift t) empilha t na pilha seja a o proacuteximo siacutembolo da entrada else if (ACTION[s a] = reduce Ararr β) desempilha siacutembolos |β| da pilha faccedila o estado t agora ser o topo da pilha empilhe GOTO[t A] na pilha imprima a produccedilatildeo Ararr β else if (ACTION[s a] = accept) pare a anaacutelise terminou

else chame uma rotina de recuperaccedilatildeo de erros

60 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR ndash Exemplo

A tabela do proacuteximo slide monstra as funccedilotildees ACTION e GOTO de uma tabela de anaacutelise LR para a gramaacutetica de expressatildeo estudada nesta aula e repetida aqui com produccedilotildees numeradas

Os coacutedigos para as accedilotildees satildeo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

(1) E rarr E + T

(2) E rarr T

(3) T rarr T F

(4) T rarr F

(5) F rarr ( E )

(6) F rarr id

1 Si significa avanccedila na entrada e empilha o estado i na pilha

2 Rj significa reduce segundo a produccedilatildeo de nuacutemero j

3 Acc significa accept

4 Entrada em branco significa error

61 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Estado ACTION

id + ( ) $

0 s5 s4

1 S6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4

5 r6 r6 r6 r6

6 s5 s4

7 s5 s4

8 r6 s11

9 s1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

GOTO

E T F

1 2 3

8 2 3

9 3

10

O valor de GOTO(s a) para o

terminal a estaacute em ACTION da

tabela de anaacutelise conectado agrave

accedilatildeo de transferecircncia sob a

entrada a e o estado s

O GOTO fornece o GOTO[s a]

para os natildeo-terminais A

Ok

Mas como eu consigo os dados

desta tabela

62 Geovane Griesang

A sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

FOLLOW(E) = FOLLOW(Ersquo) = ) $

FOLLOW(T) = FOLLOW(Trsquo) = + ) $

FOLLOW(F) = + ) $

63 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Construindo tabelas de anaacutelise SLR

Esse meacutetodo eacute o mais simples dos LRs Vamos nos referir a tabela de anaacutelise construiacuteda por este meacutetodo como uma tabela SLR e o analisador LR usando uma tabela SLR como um analisador sintaacutetico SLR

O meacutetodo SLR comeccedila com os itens LR(0) e autocircmatos LR(0) ou seja dada uma gramaacutetica G estendemos G para produzir Grsquo com o novo siacutembolo inicial Srsquo A partir de Grsquo construiacutemos C a coleccedilatildeo canocircnica de conj de itens para Grsquo junto com a funccedilatildeo GOTO

Para construir as entradas ACTION e GOTO da tabela de anaacutelise usando o algoritmo a seguir eacute preciso que conheccedilamos FOLLOW(A) para cada natildeo-terminal A de uma gramaacutetica

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 38: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

38 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

A partir do item [F rarr id ] no estado 5 efetuamos uma reduccedilatildeo segundo a produccedilatildeo F rarr id

Na linha 2 o estado 5 eacute empilhado (siacutembolo id)

I5

F rarr id

Natildeo haacute transiccedilatildeo a partir do estado 5 sob a entrada por isso reduzimos

39 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o lado direito da produccedilatildeo da linha (2) eacute id correspondendo ao estado 5 e seu lado direito eacute o F

Com os estados ao desempilhar o estado 5 correspondendo ao siacutembolo id o estado 0 passa a ser o topo

0 F $

40 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id I3

T rarr F

F

Procuramos uma transiccedilatildeo sob F o lado esquerdo da produccedilatildeo

0 F $

O estado 0 possui uma transiccedilatildeo em F p o estado 3 onde empilhamos o estado 3 com o siacutembolo F Ver linha (3)

3

41 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I3

T rarr F

Natildeo haacute transiccedilatildeo a partir do estado 3 sob a entrada por isso reduzimos

A partir do item [T rarr F ] no estado 3 efetuamos uma reduccedilatildeo segundo a produccedilatildeo T rarr F

3

0

T $

42 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

I7

T rarr T F

F rarr ( E )

F rarr id

id

Como outro exemplo considere a linha (5) com o estado 7 referente ao siacutembolo no topo da pilha

Esse estado 7 possui uma transaccedilatildeo para o estado 5 sob a entrada id de modo que empilhamos o estado 5

43 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o estado 5 natildeo possui transiccedilotildees de modo que reduzimos segundo F rarr id

quando removemos da pilha o estado 5 correspondente ao lado direito id o estado 7 passa a ser o topo da pilha

44 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Como o estado 7 possui uma transaccedilatildeo sob F para o estado 10 empilhamos o estado 10 (siacutembolo F)

I7

T rarr T F

F rarr ( E )

F rarr id

I10

T rarr T F

F

45 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O algoritmo eacute o mesmo para todos

os analisadores sintaacuteticos LR

Soacute a tabela de anaacutelise eacute diferente

de um analisador para o outro

O algoritmo lecirc caracteres de um

buffer de entrada um de cada vez

46 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O analisador sintaacutetico shift-reduce

transfere um siacutembolo para pilha jaacute

o analisador sintaacutetico LR transfere

um estado

Cada estado resume a informaccedilatildeo

contida na pilha abaixo dele

47 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

A pilha conteacutem uma sequencia de

estados s0s1 sm onde sm estaacute

no topo

No meacutetodo SLR a pilha conteacutem

estados do autocircmato LR(0)

Por construccedilatildeo a cada estado eacute

associado 1 siacutembolo da gramaacutetica

48 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Lembrem-se de que os estados

correspondem a conj de itens e

que haacute uma transiccedilatildeo do estado i

para o estado j se GOTO(Ii X) = Ij

Todas as transiccedilotildees para o estado

j devem ser para o mesmo siacutembolo

da gramaacutetica X

49 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

Sm

Sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Desta forma cada estado exceto

o estado inicial 0 possui um uacutenico

siacutembolo da gramaacutetica associado a

ele

50 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

A tabela LR consiste em duas partes ACTION uma funccedilatildeo de accedilatildeo de anaacutelise e GOTO uma funccedilatildeo de transiccedilatildeo

1 A funccedilatildeo ACTION recebe como argumentos um estado i e um estado a (ou $) O valor de ACTION(i a) pode ter um dos quatro formatos

a) Shift j onde j eacute um estado

A accedilatildeo tomada pelo analisador sintaacutetico efetivamente transfere a entrada a para a pilha mas usa o estado j para representar a

51 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

b) Reduce Ararr β A accedilatildeo do analisador efetivamente reduz β no topo da pilha para A o lado esquerdo da produccedilatildeo

c) Accept O analisador aceita a entrada e termina a anaacutelise

d) Error O analisador descobre um erro em sua entrada passa o controle p o recuperador de erro que toma alguma accedilatildeo corretiva

2 Estendemos a funccedilatildeo GOTO definida sobre um conjunto de itens para os estados se GOTO(Ii A) = Ij entatildeo GOTO tambeacutem mapeia um estado i e um natildeo-terminal A para o estado j

52 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

Para descrever o comportamento de uma analisador LR eacute recomendaacutevel ter uma notaccedilatildeo representado o estado completo do analisador sua pilha e a entrada restante

Uma configuraccedilatildeo p um analisador LR eacute um par (s0s1sm aiai+1an $) O primeiro componente eacute o conteuacutedo da pilha com o topo agrave direita e o segundo componente representa a entrada restante

Essa configuraccedilatildeo representa a seguinte forma sentencial agrave direita (X0X1Xmaiai+1an) Assim como faria um analisador shift-reduce

53 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

A uacutenica diferenccedila eacute que em inveacutes de siacutembolos da gramaacutetica a pilha conteacutem estados a partir dos quais os siacutembolos da gramaacutetica podem ser recuperados

Ou seja Xi eacute o siacutembolo da gramaacutetica representado pelo estado si

Observe que s0 o estado inicial do analisador sintaacutetico natildeo representa um siacutembolo da gramaacutetica e serve como marcador de fundo da pilha aleacutem de desempenhar um papel importante na anaacutelise

54 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

O proacuteximo movimento do analisador a partir da configuraccedilatildeo dada eacute determinado pela leitura de ai o siacutembolo de entrada corrente e sm o estado do topo da pilha e entatildeo consultando a entrada ACTION[sm ai] na tabela de accedilatildeo de anaacutelise

As configuraccedilotildees restantes apoacutes cada um dos quatro tipos de movimentaccedilatildeo satildeo as seguintes

1 Se ACTION[Sm ai] = shift s o analisador sintaacutetico executa um movimento de transferecircncia (shift move) ele empilha o estado s e avanccedila da entrada resultando na configuraccedilatildeo (s0s1 sm ai+1an $)

55 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2 Se ACTION[Sm ai]=reduce Ararrβ entatildeo o analisador sintaacutetico executa um movimento de reduzir (reduce move) resultando na configuraccedilatildeo (s0s1 sm-rs aiai+1an $)

onde r eacute o comprimento de β e s = GOTO[sm-r A]

Aqui o analisador sintaacutetico incialmente desempilhou os r siacutembolos de estado da pilha expondo o estado sm-r

O analisador sintaacutetico entatildeo empilhou s a entrada para GOTO[sm-r A] na pilha O siacutembolo corrente da entrada natildeo eacute alterado em um movimento de reduzir

56 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2

Para os LR que construiremos Xm-r+1Xm a sequencia de siacutembolos da gramaacutetica correspondendo aos estados retirados da pilha sempre iratildeo casar com β o lado direito da produccedilatildeo sendo reduzida

A saiacuteda de um analisador LR eacute gerada apoacutes um movimento de reduzir executando a accedilatildeo semacircntica associada agrave produccedilatildeo que estaacute sendo reduzida

No momento vamos considerar que a saiacuteda consiste soacute na impressatildeo da produccedilatildeo de reduccedilatildeo

57 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

3 Se ACTION[sm ai] = accept a anaacutelise estaacute concluiacuteda

4 Se ACTION[sm ai] = error o analisador sintaacutetico descobriu um erro e ativa uma rotina para recuperaccedilatildeo de erro

Todos os analisadores sintaacuteticos LR se comportam dessa maneira

A uacutenica diferenccedila entre eles diz respeito a informaccedilatildeo contida nos campos ACTION e GOTO da tabela de anaacutelise

O algoritmo de anaacutelise LR eacute resumido nos proacuteximos slides

58 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

Entrada Uma cadeia de entrada w e uma tabela de anaacutelise com funccedilotildees ACTION e GOTO para uma gramaacutetica G

Saiacuteda Se w estaacute em L(G) os passos os passos de uma reduccedilatildeo de uma anaacutelise ascendente para w

Caso contraacuterio uma indicaccedilatildeo de erro

Meacutetodo Inicialmente o analisador sintaacutetico possui w$ no buffer de entrada e s0 em sua pilha onde s0 representa o estado inicial

O analisador sintaacutetico entatildeo executa o algoritmo

59 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

[PSEUDO] seja a o primeiro siacutembolo de w$ while (1) Seja s o estado no topo da pilha if (ACTION[s a] = shift t) empilha t na pilha seja a o proacuteximo siacutembolo da entrada else if (ACTION[s a] = reduce Ararr β) desempilha siacutembolos |β| da pilha faccedila o estado t agora ser o topo da pilha empilhe GOTO[t A] na pilha imprima a produccedilatildeo Ararr β else if (ACTION[s a] = accept) pare a anaacutelise terminou

else chame uma rotina de recuperaccedilatildeo de erros

60 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR ndash Exemplo

A tabela do proacuteximo slide monstra as funccedilotildees ACTION e GOTO de uma tabela de anaacutelise LR para a gramaacutetica de expressatildeo estudada nesta aula e repetida aqui com produccedilotildees numeradas

Os coacutedigos para as accedilotildees satildeo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

(1) E rarr E + T

(2) E rarr T

(3) T rarr T F

(4) T rarr F

(5) F rarr ( E )

(6) F rarr id

1 Si significa avanccedila na entrada e empilha o estado i na pilha

2 Rj significa reduce segundo a produccedilatildeo de nuacutemero j

3 Acc significa accept

4 Entrada em branco significa error

61 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Estado ACTION

id + ( ) $

0 s5 s4

1 S6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4

5 r6 r6 r6 r6

6 s5 s4

7 s5 s4

8 r6 s11

9 s1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

GOTO

E T F

1 2 3

8 2 3

9 3

10

O valor de GOTO(s a) para o

terminal a estaacute em ACTION da

tabela de anaacutelise conectado agrave

accedilatildeo de transferecircncia sob a

entrada a e o estado s

O GOTO fornece o GOTO[s a]

para os natildeo-terminais A

Ok

Mas como eu consigo os dados

desta tabela

62 Geovane Griesang

A sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

FOLLOW(E) = FOLLOW(Ersquo) = ) $

FOLLOW(T) = FOLLOW(Trsquo) = + ) $

FOLLOW(F) = + ) $

63 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Construindo tabelas de anaacutelise SLR

Esse meacutetodo eacute o mais simples dos LRs Vamos nos referir a tabela de anaacutelise construiacuteda por este meacutetodo como uma tabela SLR e o analisador LR usando uma tabela SLR como um analisador sintaacutetico SLR

O meacutetodo SLR comeccedila com os itens LR(0) e autocircmatos LR(0) ou seja dada uma gramaacutetica G estendemos G para produzir Grsquo com o novo siacutembolo inicial Srsquo A partir de Grsquo construiacutemos C a coleccedilatildeo canocircnica de conj de itens para Grsquo junto com a funccedilatildeo GOTO

Para construir as entradas ACTION e GOTO da tabela de anaacutelise usando o algoritmo a seguir eacute preciso que conheccedilamos FOLLOW(A) para cada natildeo-terminal A de uma gramaacutetica

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 39: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

39 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o lado direito da produccedilatildeo da linha (2) eacute id correspondendo ao estado 5 e seu lado direito eacute o F

Com os estados ao desempilhar o estado 5 correspondendo ao siacutembolo id o estado 0 passa a ser o topo

0 F $

40 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id I3

T rarr F

F

Procuramos uma transiccedilatildeo sob F o lado esquerdo da produccedilatildeo

0 F $

O estado 0 possui uma transiccedilatildeo em F p o estado 3 onde empilhamos o estado 3 com o siacutembolo F Ver linha (3)

3

41 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I3

T rarr F

Natildeo haacute transiccedilatildeo a partir do estado 3 sob a entrada por isso reduzimos

A partir do item [T rarr F ] no estado 3 efetuamos uma reduccedilatildeo segundo a produccedilatildeo T rarr F

3

0

T $

42 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

I7

T rarr T F

F rarr ( E )

F rarr id

id

Como outro exemplo considere a linha (5) com o estado 7 referente ao siacutembolo no topo da pilha

Esse estado 7 possui uma transaccedilatildeo para o estado 5 sob a entrada id de modo que empilhamos o estado 5

43 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o estado 5 natildeo possui transiccedilotildees de modo que reduzimos segundo F rarr id

quando removemos da pilha o estado 5 correspondente ao lado direito id o estado 7 passa a ser o topo da pilha

44 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Como o estado 7 possui uma transaccedilatildeo sob F para o estado 10 empilhamos o estado 10 (siacutembolo F)

I7

T rarr T F

F rarr ( E )

F rarr id

I10

T rarr T F

F

45 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O algoritmo eacute o mesmo para todos

os analisadores sintaacuteticos LR

Soacute a tabela de anaacutelise eacute diferente

de um analisador para o outro

O algoritmo lecirc caracteres de um

buffer de entrada um de cada vez

46 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O analisador sintaacutetico shift-reduce

transfere um siacutembolo para pilha jaacute

o analisador sintaacutetico LR transfere

um estado

Cada estado resume a informaccedilatildeo

contida na pilha abaixo dele

47 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

A pilha conteacutem uma sequencia de

estados s0s1 sm onde sm estaacute

no topo

No meacutetodo SLR a pilha conteacutem

estados do autocircmato LR(0)

Por construccedilatildeo a cada estado eacute

associado 1 siacutembolo da gramaacutetica

48 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Lembrem-se de que os estados

correspondem a conj de itens e

que haacute uma transiccedilatildeo do estado i

para o estado j se GOTO(Ii X) = Ij

Todas as transiccedilotildees para o estado

j devem ser para o mesmo siacutembolo

da gramaacutetica X

49 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

Sm

Sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Desta forma cada estado exceto

o estado inicial 0 possui um uacutenico

siacutembolo da gramaacutetica associado a

ele

50 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

A tabela LR consiste em duas partes ACTION uma funccedilatildeo de accedilatildeo de anaacutelise e GOTO uma funccedilatildeo de transiccedilatildeo

1 A funccedilatildeo ACTION recebe como argumentos um estado i e um estado a (ou $) O valor de ACTION(i a) pode ter um dos quatro formatos

a) Shift j onde j eacute um estado

A accedilatildeo tomada pelo analisador sintaacutetico efetivamente transfere a entrada a para a pilha mas usa o estado j para representar a

51 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

b) Reduce Ararr β A accedilatildeo do analisador efetivamente reduz β no topo da pilha para A o lado esquerdo da produccedilatildeo

c) Accept O analisador aceita a entrada e termina a anaacutelise

d) Error O analisador descobre um erro em sua entrada passa o controle p o recuperador de erro que toma alguma accedilatildeo corretiva

2 Estendemos a funccedilatildeo GOTO definida sobre um conjunto de itens para os estados se GOTO(Ii A) = Ij entatildeo GOTO tambeacutem mapeia um estado i e um natildeo-terminal A para o estado j

52 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

Para descrever o comportamento de uma analisador LR eacute recomendaacutevel ter uma notaccedilatildeo representado o estado completo do analisador sua pilha e a entrada restante

Uma configuraccedilatildeo p um analisador LR eacute um par (s0s1sm aiai+1an $) O primeiro componente eacute o conteuacutedo da pilha com o topo agrave direita e o segundo componente representa a entrada restante

Essa configuraccedilatildeo representa a seguinte forma sentencial agrave direita (X0X1Xmaiai+1an) Assim como faria um analisador shift-reduce

53 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

A uacutenica diferenccedila eacute que em inveacutes de siacutembolos da gramaacutetica a pilha conteacutem estados a partir dos quais os siacutembolos da gramaacutetica podem ser recuperados

Ou seja Xi eacute o siacutembolo da gramaacutetica representado pelo estado si

Observe que s0 o estado inicial do analisador sintaacutetico natildeo representa um siacutembolo da gramaacutetica e serve como marcador de fundo da pilha aleacutem de desempenhar um papel importante na anaacutelise

54 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

O proacuteximo movimento do analisador a partir da configuraccedilatildeo dada eacute determinado pela leitura de ai o siacutembolo de entrada corrente e sm o estado do topo da pilha e entatildeo consultando a entrada ACTION[sm ai] na tabela de accedilatildeo de anaacutelise

As configuraccedilotildees restantes apoacutes cada um dos quatro tipos de movimentaccedilatildeo satildeo as seguintes

1 Se ACTION[Sm ai] = shift s o analisador sintaacutetico executa um movimento de transferecircncia (shift move) ele empilha o estado s e avanccedila da entrada resultando na configuraccedilatildeo (s0s1 sm ai+1an $)

55 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2 Se ACTION[Sm ai]=reduce Ararrβ entatildeo o analisador sintaacutetico executa um movimento de reduzir (reduce move) resultando na configuraccedilatildeo (s0s1 sm-rs aiai+1an $)

onde r eacute o comprimento de β e s = GOTO[sm-r A]

Aqui o analisador sintaacutetico incialmente desempilhou os r siacutembolos de estado da pilha expondo o estado sm-r

O analisador sintaacutetico entatildeo empilhou s a entrada para GOTO[sm-r A] na pilha O siacutembolo corrente da entrada natildeo eacute alterado em um movimento de reduzir

56 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2

Para os LR que construiremos Xm-r+1Xm a sequencia de siacutembolos da gramaacutetica correspondendo aos estados retirados da pilha sempre iratildeo casar com β o lado direito da produccedilatildeo sendo reduzida

A saiacuteda de um analisador LR eacute gerada apoacutes um movimento de reduzir executando a accedilatildeo semacircntica associada agrave produccedilatildeo que estaacute sendo reduzida

No momento vamos considerar que a saiacuteda consiste soacute na impressatildeo da produccedilatildeo de reduccedilatildeo

57 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

3 Se ACTION[sm ai] = accept a anaacutelise estaacute concluiacuteda

4 Se ACTION[sm ai] = error o analisador sintaacutetico descobriu um erro e ativa uma rotina para recuperaccedilatildeo de erro

Todos os analisadores sintaacuteticos LR se comportam dessa maneira

A uacutenica diferenccedila entre eles diz respeito a informaccedilatildeo contida nos campos ACTION e GOTO da tabela de anaacutelise

O algoritmo de anaacutelise LR eacute resumido nos proacuteximos slides

58 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

Entrada Uma cadeia de entrada w e uma tabela de anaacutelise com funccedilotildees ACTION e GOTO para uma gramaacutetica G

Saiacuteda Se w estaacute em L(G) os passos os passos de uma reduccedilatildeo de uma anaacutelise ascendente para w

Caso contraacuterio uma indicaccedilatildeo de erro

Meacutetodo Inicialmente o analisador sintaacutetico possui w$ no buffer de entrada e s0 em sua pilha onde s0 representa o estado inicial

O analisador sintaacutetico entatildeo executa o algoritmo

59 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

[PSEUDO] seja a o primeiro siacutembolo de w$ while (1) Seja s o estado no topo da pilha if (ACTION[s a] = shift t) empilha t na pilha seja a o proacuteximo siacutembolo da entrada else if (ACTION[s a] = reduce Ararr β) desempilha siacutembolos |β| da pilha faccedila o estado t agora ser o topo da pilha empilhe GOTO[t A] na pilha imprima a produccedilatildeo Ararr β else if (ACTION[s a] = accept) pare a anaacutelise terminou

else chame uma rotina de recuperaccedilatildeo de erros

60 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR ndash Exemplo

A tabela do proacuteximo slide monstra as funccedilotildees ACTION e GOTO de uma tabela de anaacutelise LR para a gramaacutetica de expressatildeo estudada nesta aula e repetida aqui com produccedilotildees numeradas

Os coacutedigos para as accedilotildees satildeo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

(1) E rarr E + T

(2) E rarr T

(3) T rarr T F

(4) T rarr F

(5) F rarr ( E )

(6) F rarr id

1 Si significa avanccedila na entrada e empilha o estado i na pilha

2 Rj significa reduce segundo a produccedilatildeo de nuacutemero j

3 Acc significa accept

4 Entrada em branco significa error

61 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Estado ACTION

id + ( ) $

0 s5 s4

1 S6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4

5 r6 r6 r6 r6

6 s5 s4

7 s5 s4

8 r6 s11

9 s1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

GOTO

E T F

1 2 3

8 2 3

9 3

10

O valor de GOTO(s a) para o

terminal a estaacute em ACTION da

tabela de anaacutelise conectado agrave

accedilatildeo de transferecircncia sob a

entrada a e o estado s

O GOTO fornece o GOTO[s a]

para os natildeo-terminais A

Ok

Mas como eu consigo os dados

desta tabela

62 Geovane Griesang

A sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

FOLLOW(E) = FOLLOW(Ersquo) = ) $

FOLLOW(T) = FOLLOW(Trsquo) = + ) $

FOLLOW(F) = + ) $

63 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Construindo tabelas de anaacutelise SLR

Esse meacutetodo eacute o mais simples dos LRs Vamos nos referir a tabela de anaacutelise construiacuteda por este meacutetodo como uma tabela SLR e o analisador LR usando uma tabela SLR como um analisador sintaacutetico SLR

O meacutetodo SLR comeccedila com os itens LR(0) e autocircmatos LR(0) ou seja dada uma gramaacutetica G estendemos G para produzir Grsquo com o novo siacutembolo inicial Srsquo A partir de Grsquo construiacutemos C a coleccedilatildeo canocircnica de conj de itens para Grsquo junto com a funccedilatildeo GOTO

Para construir as entradas ACTION e GOTO da tabela de anaacutelise usando o algoritmo a seguir eacute preciso que conheccedilamos FOLLOW(A) para cada natildeo-terminal A de uma gramaacutetica

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 40: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

40 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id I3

T rarr F

F

Procuramos uma transiccedilatildeo sob F o lado esquerdo da produccedilatildeo

0 F $

O estado 0 possui uma transiccedilatildeo em F p o estado 3 onde empilhamos o estado 3 com o siacutembolo F Ver linha (3)

3

41 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I3

T rarr F

Natildeo haacute transiccedilatildeo a partir do estado 3 sob a entrada por isso reduzimos

A partir do item [T rarr F ] no estado 3 efetuamos uma reduccedilatildeo segundo a produccedilatildeo T rarr F

3

0

T $

42 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

I7

T rarr T F

F rarr ( E )

F rarr id

id

Como outro exemplo considere a linha (5) com o estado 7 referente ao siacutembolo no topo da pilha

Esse estado 7 possui uma transaccedilatildeo para o estado 5 sob a entrada id de modo que empilhamos o estado 5

43 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o estado 5 natildeo possui transiccedilotildees de modo que reduzimos segundo F rarr id

quando removemos da pilha o estado 5 correspondente ao lado direito id o estado 7 passa a ser o topo da pilha

44 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Como o estado 7 possui uma transaccedilatildeo sob F para o estado 10 empilhamos o estado 10 (siacutembolo F)

I7

T rarr T F

F rarr ( E )

F rarr id

I10

T rarr T F

F

45 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O algoritmo eacute o mesmo para todos

os analisadores sintaacuteticos LR

Soacute a tabela de anaacutelise eacute diferente

de um analisador para o outro

O algoritmo lecirc caracteres de um

buffer de entrada um de cada vez

46 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O analisador sintaacutetico shift-reduce

transfere um siacutembolo para pilha jaacute

o analisador sintaacutetico LR transfere

um estado

Cada estado resume a informaccedilatildeo

contida na pilha abaixo dele

47 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

A pilha conteacutem uma sequencia de

estados s0s1 sm onde sm estaacute

no topo

No meacutetodo SLR a pilha conteacutem

estados do autocircmato LR(0)

Por construccedilatildeo a cada estado eacute

associado 1 siacutembolo da gramaacutetica

48 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Lembrem-se de que os estados

correspondem a conj de itens e

que haacute uma transiccedilatildeo do estado i

para o estado j se GOTO(Ii X) = Ij

Todas as transiccedilotildees para o estado

j devem ser para o mesmo siacutembolo

da gramaacutetica X

49 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

Sm

Sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Desta forma cada estado exceto

o estado inicial 0 possui um uacutenico

siacutembolo da gramaacutetica associado a

ele

50 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

A tabela LR consiste em duas partes ACTION uma funccedilatildeo de accedilatildeo de anaacutelise e GOTO uma funccedilatildeo de transiccedilatildeo

1 A funccedilatildeo ACTION recebe como argumentos um estado i e um estado a (ou $) O valor de ACTION(i a) pode ter um dos quatro formatos

a) Shift j onde j eacute um estado

A accedilatildeo tomada pelo analisador sintaacutetico efetivamente transfere a entrada a para a pilha mas usa o estado j para representar a

51 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

b) Reduce Ararr β A accedilatildeo do analisador efetivamente reduz β no topo da pilha para A o lado esquerdo da produccedilatildeo

c) Accept O analisador aceita a entrada e termina a anaacutelise

d) Error O analisador descobre um erro em sua entrada passa o controle p o recuperador de erro que toma alguma accedilatildeo corretiva

2 Estendemos a funccedilatildeo GOTO definida sobre um conjunto de itens para os estados se GOTO(Ii A) = Ij entatildeo GOTO tambeacutem mapeia um estado i e um natildeo-terminal A para o estado j

52 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

Para descrever o comportamento de uma analisador LR eacute recomendaacutevel ter uma notaccedilatildeo representado o estado completo do analisador sua pilha e a entrada restante

Uma configuraccedilatildeo p um analisador LR eacute um par (s0s1sm aiai+1an $) O primeiro componente eacute o conteuacutedo da pilha com o topo agrave direita e o segundo componente representa a entrada restante

Essa configuraccedilatildeo representa a seguinte forma sentencial agrave direita (X0X1Xmaiai+1an) Assim como faria um analisador shift-reduce

53 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

A uacutenica diferenccedila eacute que em inveacutes de siacutembolos da gramaacutetica a pilha conteacutem estados a partir dos quais os siacutembolos da gramaacutetica podem ser recuperados

Ou seja Xi eacute o siacutembolo da gramaacutetica representado pelo estado si

Observe que s0 o estado inicial do analisador sintaacutetico natildeo representa um siacutembolo da gramaacutetica e serve como marcador de fundo da pilha aleacutem de desempenhar um papel importante na anaacutelise

54 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

O proacuteximo movimento do analisador a partir da configuraccedilatildeo dada eacute determinado pela leitura de ai o siacutembolo de entrada corrente e sm o estado do topo da pilha e entatildeo consultando a entrada ACTION[sm ai] na tabela de accedilatildeo de anaacutelise

As configuraccedilotildees restantes apoacutes cada um dos quatro tipos de movimentaccedilatildeo satildeo as seguintes

1 Se ACTION[Sm ai] = shift s o analisador sintaacutetico executa um movimento de transferecircncia (shift move) ele empilha o estado s e avanccedila da entrada resultando na configuraccedilatildeo (s0s1 sm ai+1an $)

55 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2 Se ACTION[Sm ai]=reduce Ararrβ entatildeo o analisador sintaacutetico executa um movimento de reduzir (reduce move) resultando na configuraccedilatildeo (s0s1 sm-rs aiai+1an $)

onde r eacute o comprimento de β e s = GOTO[sm-r A]

Aqui o analisador sintaacutetico incialmente desempilhou os r siacutembolos de estado da pilha expondo o estado sm-r

O analisador sintaacutetico entatildeo empilhou s a entrada para GOTO[sm-r A] na pilha O siacutembolo corrente da entrada natildeo eacute alterado em um movimento de reduzir

56 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2

Para os LR que construiremos Xm-r+1Xm a sequencia de siacutembolos da gramaacutetica correspondendo aos estados retirados da pilha sempre iratildeo casar com β o lado direito da produccedilatildeo sendo reduzida

A saiacuteda de um analisador LR eacute gerada apoacutes um movimento de reduzir executando a accedilatildeo semacircntica associada agrave produccedilatildeo que estaacute sendo reduzida

No momento vamos considerar que a saiacuteda consiste soacute na impressatildeo da produccedilatildeo de reduccedilatildeo

57 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

3 Se ACTION[sm ai] = accept a anaacutelise estaacute concluiacuteda

4 Se ACTION[sm ai] = error o analisador sintaacutetico descobriu um erro e ativa uma rotina para recuperaccedilatildeo de erro

Todos os analisadores sintaacuteticos LR se comportam dessa maneira

A uacutenica diferenccedila entre eles diz respeito a informaccedilatildeo contida nos campos ACTION e GOTO da tabela de anaacutelise

O algoritmo de anaacutelise LR eacute resumido nos proacuteximos slides

58 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

Entrada Uma cadeia de entrada w e uma tabela de anaacutelise com funccedilotildees ACTION e GOTO para uma gramaacutetica G

Saiacuteda Se w estaacute em L(G) os passos os passos de uma reduccedilatildeo de uma anaacutelise ascendente para w

Caso contraacuterio uma indicaccedilatildeo de erro

Meacutetodo Inicialmente o analisador sintaacutetico possui w$ no buffer de entrada e s0 em sua pilha onde s0 representa o estado inicial

O analisador sintaacutetico entatildeo executa o algoritmo

59 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

[PSEUDO] seja a o primeiro siacutembolo de w$ while (1) Seja s o estado no topo da pilha if (ACTION[s a] = shift t) empilha t na pilha seja a o proacuteximo siacutembolo da entrada else if (ACTION[s a] = reduce Ararr β) desempilha siacutembolos |β| da pilha faccedila o estado t agora ser o topo da pilha empilhe GOTO[t A] na pilha imprima a produccedilatildeo Ararr β else if (ACTION[s a] = accept) pare a anaacutelise terminou

else chame uma rotina de recuperaccedilatildeo de erros

60 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR ndash Exemplo

A tabela do proacuteximo slide monstra as funccedilotildees ACTION e GOTO de uma tabela de anaacutelise LR para a gramaacutetica de expressatildeo estudada nesta aula e repetida aqui com produccedilotildees numeradas

Os coacutedigos para as accedilotildees satildeo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

(1) E rarr E + T

(2) E rarr T

(3) T rarr T F

(4) T rarr F

(5) F rarr ( E )

(6) F rarr id

1 Si significa avanccedila na entrada e empilha o estado i na pilha

2 Rj significa reduce segundo a produccedilatildeo de nuacutemero j

3 Acc significa accept

4 Entrada em branco significa error

61 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Estado ACTION

id + ( ) $

0 s5 s4

1 S6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4

5 r6 r6 r6 r6

6 s5 s4

7 s5 s4

8 r6 s11

9 s1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

GOTO

E T F

1 2 3

8 2 3

9 3

10

O valor de GOTO(s a) para o

terminal a estaacute em ACTION da

tabela de anaacutelise conectado agrave

accedilatildeo de transferecircncia sob a

entrada a e o estado s

O GOTO fornece o GOTO[s a]

para os natildeo-terminais A

Ok

Mas como eu consigo os dados

desta tabela

62 Geovane Griesang

A sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

FOLLOW(E) = FOLLOW(Ersquo) = ) $

FOLLOW(T) = FOLLOW(Trsquo) = + ) $

FOLLOW(F) = + ) $

63 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Construindo tabelas de anaacutelise SLR

Esse meacutetodo eacute o mais simples dos LRs Vamos nos referir a tabela de anaacutelise construiacuteda por este meacutetodo como uma tabela SLR e o analisador LR usando uma tabela SLR como um analisador sintaacutetico SLR

O meacutetodo SLR comeccedila com os itens LR(0) e autocircmatos LR(0) ou seja dada uma gramaacutetica G estendemos G para produzir Grsquo com o novo siacutembolo inicial Srsquo A partir de Grsquo construiacutemos C a coleccedilatildeo canocircnica de conj de itens para Grsquo junto com a funccedilatildeo GOTO

Para construir as entradas ACTION e GOTO da tabela de anaacutelise usando o algoritmo a seguir eacute preciso que conheccedilamos FOLLOW(A) para cada natildeo-terminal A de uma gramaacutetica

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 41: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

41 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I3

T rarr F

Natildeo haacute transiccedilatildeo a partir do estado 3 sob a entrada por isso reduzimos

A partir do item [T rarr F ] no estado 3 efetuamos uma reduccedilatildeo segundo a produccedilatildeo T rarr F

3

0

T $

42 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

I7

T rarr T F

F rarr ( E )

F rarr id

id

Como outro exemplo considere a linha (5) com o estado 7 referente ao siacutembolo no topo da pilha

Esse estado 7 possui uma transaccedilatildeo para o estado 5 sob a entrada id de modo que empilhamos o estado 5

43 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o estado 5 natildeo possui transiccedilotildees de modo que reduzimos segundo F rarr id

quando removemos da pilha o estado 5 correspondente ao lado direito id o estado 7 passa a ser o topo da pilha

44 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Como o estado 7 possui uma transaccedilatildeo sob F para o estado 10 empilhamos o estado 10 (siacutembolo F)

I7

T rarr T F

F rarr ( E )

F rarr id

I10

T rarr T F

F

45 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O algoritmo eacute o mesmo para todos

os analisadores sintaacuteticos LR

Soacute a tabela de anaacutelise eacute diferente

de um analisador para o outro

O algoritmo lecirc caracteres de um

buffer de entrada um de cada vez

46 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O analisador sintaacutetico shift-reduce

transfere um siacutembolo para pilha jaacute

o analisador sintaacutetico LR transfere

um estado

Cada estado resume a informaccedilatildeo

contida na pilha abaixo dele

47 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

A pilha conteacutem uma sequencia de

estados s0s1 sm onde sm estaacute

no topo

No meacutetodo SLR a pilha conteacutem

estados do autocircmato LR(0)

Por construccedilatildeo a cada estado eacute

associado 1 siacutembolo da gramaacutetica

48 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Lembrem-se de que os estados

correspondem a conj de itens e

que haacute uma transiccedilatildeo do estado i

para o estado j se GOTO(Ii X) = Ij

Todas as transiccedilotildees para o estado

j devem ser para o mesmo siacutembolo

da gramaacutetica X

49 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

Sm

Sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Desta forma cada estado exceto

o estado inicial 0 possui um uacutenico

siacutembolo da gramaacutetica associado a

ele

50 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

A tabela LR consiste em duas partes ACTION uma funccedilatildeo de accedilatildeo de anaacutelise e GOTO uma funccedilatildeo de transiccedilatildeo

1 A funccedilatildeo ACTION recebe como argumentos um estado i e um estado a (ou $) O valor de ACTION(i a) pode ter um dos quatro formatos

a) Shift j onde j eacute um estado

A accedilatildeo tomada pelo analisador sintaacutetico efetivamente transfere a entrada a para a pilha mas usa o estado j para representar a

51 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

b) Reduce Ararr β A accedilatildeo do analisador efetivamente reduz β no topo da pilha para A o lado esquerdo da produccedilatildeo

c) Accept O analisador aceita a entrada e termina a anaacutelise

d) Error O analisador descobre um erro em sua entrada passa o controle p o recuperador de erro que toma alguma accedilatildeo corretiva

2 Estendemos a funccedilatildeo GOTO definida sobre um conjunto de itens para os estados se GOTO(Ii A) = Ij entatildeo GOTO tambeacutem mapeia um estado i e um natildeo-terminal A para o estado j

52 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

Para descrever o comportamento de uma analisador LR eacute recomendaacutevel ter uma notaccedilatildeo representado o estado completo do analisador sua pilha e a entrada restante

Uma configuraccedilatildeo p um analisador LR eacute um par (s0s1sm aiai+1an $) O primeiro componente eacute o conteuacutedo da pilha com o topo agrave direita e o segundo componente representa a entrada restante

Essa configuraccedilatildeo representa a seguinte forma sentencial agrave direita (X0X1Xmaiai+1an) Assim como faria um analisador shift-reduce

53 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

A uacutenica diferenccedila eacute que em inveacutes de siacutembolos da gramaacutetica a pilha conteacutem estados a partir dos quais os siacutembolos da gramaacutetica podem ser recuperados

Ou seja Xi eacute o siacutembolo da gramaacutetica representado pelo estado si

Observe que s0 o estado inicial do analisador sintaacutetico natildeo representa um siacutembolo da gramaacutetica e serve como marcador de fundo da pilha aleacutem de desempenhar um papel importante na anaacutelise

54 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

O proacuteximo movimento do analisador a partir da configuraccedilatildeo dada eacute determinado pela leitura de ai o siacutembolo de entrada corrente e sm o estado do topo da pilha e entatildeo consultando a entrada ACTION[sm ai] na tabela de accedilatildeo de anaacutelise

As configuraccedilotildees restantes apoacutes cada um dos quatro tipos de movimentaccedilatildeo satildeo as seguintes

1 Se ACTION[Sm ai] = shift s o analisador sintaacutetico executa um movimento de transferecircncia (shift move) ele empilha o estado s e avanccedila da entrada resultando na configuraccedilatildeo (s0s1 sm ai+1an $)

55 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2 Se ACTION[Sm ai]=reduce Ararrβ entatildeo o analisador sintaacutetico executa um movimento de reduzir (reduce move) resultando na configuraccedilatildeo (s0s1 sm-rs aiai+1an $)

onde r eacute o comprimento de β e s = GOTO[sm-r A]

Aqui o analisador sintaacutetico incialmente desempilhou os r siacutembolos de estado da pilha expondo o estado sm-r

O analisador sintaacutetico entatildeo empilhou s a entrada para GOTO[sm-r A] na pilha O siacutembolo corrente da entrada natildeo eacute alterado em um movimento de reduzir

56 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2

Para os LR que construiremos Xm-r+1Xm a sequencia de siacutembolos da gramaacutetica correspondendo aos estados retirados da pilha sempre iratildeo casar com β o lado direito da produccedilatildeo sendo reduzida

A saiacuteda de um analisador LR eacute gerada apoacutes um movimento de reduzir executando a accedilatildeo semacircntica associada agrave produccedilatildeo que estaacute sendo reduzida

No momento vamos considerar que a saiacuteda consiste soacute na impressatildeo da produccedilatildeo de reduccedilatildeo

57 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

3 Se ACTION[sm ai] = accept a anaacutelise estaacute concluiacuteda

4 Se ACTION[sm ai] = error o analisador sintaacutetico descobriu um erro e ativa uma rotina para recuperaccedilatildeo de erro

Todos os analisadores sintaacuteticos LR se comportam dessa maneira

A uacutenica diferenccedila entre eles diz respeito a informaccedilatildeo contida nos campos ACTION e GOTO da tabela de anaacutelise

O algoritmo de anaacutelise LR eacute resumido nos proacuteximos slides

58 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

Entrada Uma cadeia de entrada w e uma tabela de anaacutelise com funccedilotildees ACTION e GOTO para uma gramaacutetica G

Saiacuteda Se w estaacute em L(G) os passos os passos de uma reduccedilatildeo de uma anaacutelise ascendente para w

Caso contraacuterio uma indicaccedilatildeo de erro

Meacutetodo Inicialmente o analisador sintaacutetico possui w$ no buffer de entrada e s0 em sua pilha onde s0 representa o estado inicial

O analisador sintaacutetico entatildeo executa o algoritmo

59 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

[PSEUDO] seja a o primeiro siacutembolo de w$ while (1) Seja s o estado no topo da pilha if (ACTION[s a] = shift t) empilha t na pilha seja a o proacuteximo siacutembolo da entrada else if (ACTION[s a] = reduce Ararr β) desempilha siacutembolos |β| da pilha faccedila o estado t agora ser o topo da pilha empilhe GOTO[t A] na pilha imprima a produccedilatildeo Ararr β else if (ACTION[s a] = accept) pare a anaacutelise terminou

else chame uma rotina de recuperaccedilatildeo de erros

60 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR ndash Exemplo

A tabela do proacuteximo slide monstra as funccedilotildees ACTION e GOTO de uma tabela de anaacutelise LR para a gramaacutetica de expressatildeo estudada nesta aula e repetida aqui com produccedilotildees numeradas

Os coacutedigos para as accedilotildees satildeo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

(1) E rarr E + T

(2) E rarr T

(3) T rarr T F

(4) T rarr F

(5) F rarr ( E )

(6) F rarr id

1 Si significa avanccedila na entrada e empilha o estado i na pilha

2 Rj significa reduce segundo a produccedilatildeo de nuacutemero j

3 Acc significa accept

4 Entrada em branco significa error

61 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Estado ACTION

id + ( ) $

0 s5 s4

1 S6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4

5 r6 r6 r6 r6

6 s5 s4

7 s5 s4

8 r6 s11

9 s1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

GOTO

E T F

1 2 3

8 2 3

9 3

10

O valor de GOTO(s a) para o

terminal a estaacute em ACTION da

tabela de anaacutelise conectado agrave

accedilatildeo de transferecircncia sob a

entrada a e o estado s

O GOTO fornece o GOTO[s a]

para os natildeo-terminais A

Ok

Mas como eu consigo os dados

desta tabela

62 Geovane Griesang

A sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

FOLLOW(E) = FOLLOW(Ersquo) = ) $

FOLLOW(T) = FOLLOW(Trsquo) = + ) $

FOLLOW(F) = + ) $

63 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Construindo tabelas de anaacutelise SLR

Esse meacutetodo eacute o mais simples dos LRs Vamos nos referir a tabela de anaacutelise construiacuteda por este meacutetodo como uma tabela SLR e o analisador LR usando uma tabela SLR como um analisador sintaacutetico SLR

O meacutetodo SLR comeccedila com os itens LR(0) e autocircmatos LR(0) ou seja dada uma gramaacutetica G estendemos G para produzir Grsquo com o novo siacutembolo inicial Srsquo A partir de Grsquo construiacutemos C a coleccedilatildeo canocircnica de conj de itens para Grsquo junto com a funccedilatildeo GOTO

Para construir as entradas ACTION e GOTO da tabela de anaacutelise usando o algoritmo a seguir eacute preciso que conheccedilamos FOLLOW(A) para cada natildeo-terminal A de uma gramaacutetica

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 42: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

42 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

I7

T rarr T F

F rarr ( E )

F rarr id

id

Como outro exemplo considere a linha (5) com o estado 7 referente ao siacutembolo no topo da pilha

Esse estado 7 possui uma transaccedilatildeo para o estado 5 sob a entrada id de modo que empilhamos o estado 5

43 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o estado 5 natildeo possui transiccedilotildees de modo que reduzimos segundo F rarr id

quando removemos da pilha o estado 5 correspondente ao lado direito id o estado 7 passa a ser o topo da pilha

44 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Como o estado 7 possui uma transaccedilatildeo sob F para o estado 10 empilhamos o estado 10 (siacutembolo F)

I7

T rarr T F

F rarr ( E )

F rarr id

I10

T rarr T F

F

45 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O algoritmo eacute o mesmo para todos

os analisadores sintaacuteticos LR

Soacute a tabela de anaacutelise eacute diferente

de um analisador para o outro

O algoritmo lecirc caracteres de um

buffer de entrada um de cada vez

46 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O analisador sintaacutetico shift-reduce

transfere um siacutembolo para pilha jaacute

o analisador sintaacutetico LR transfere

um estado

Cada estado resume a informaccedilatildeo

contida na pilha abaixo dele

47 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

A pilha conteacutem uma sequencia de

estados s0s1 sm onde sm estaacute

no topo

No meacutetodo SLR a pilha conteacutem

estados do autocircmato LR(0)

Por construccedilatildeo a cada estado eacute

associado 1 siacutembolo da gramaacutetica

48 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Lembrem-se de que os estados

correspondem a conj de itens e

que haacute uma transiccedilatildeo do estado i

para o estado j se GOTO(Ii X) = Ij

Todas as transiccedilotildees para o estado

j devem ser para o mesmo siacutembolo

da gramaacutetica X

49 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

Sm

Sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Desta forma cada estado exceto

o estado inicial 0 possui um uacutenico

siacutembolo da gramaacutetica associado a

ele

50 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

A tabela LR consiste em duas partes ACTION uma funccedilatildeo de accedilatildeo de anaacutelise e GOTO uma funccedilatildeo de transiccedilatildeo

1 A funccedilatildeo ACTION recebe como argumentos um estado i e um estado a (ou $) O valor de ACTION(i a) pode ter um dos quatro formatos

a) Shift j onde j eacute um estado

A accedilatildeo tomada pelo analisador sintaacutetico efetivamente transfere a entrada a para a pilha mas usa o estado j para representar a

51 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

b) Reduce Ararr β A accedilatildeo do analisador efetivamente reduz β no topo da pilha para A o lado esquerdo da produccedilatildeo

c) Accept O analisador aceita a entrada e termina a anaacutelise

d) Error O analisador descobre um erro em sua entrada passa o controle p o recuperador de erro que toma alguma accedilatildeo corretiva

2 Estendemos a funccedilatildeo GOTO definida sobre um conjunto de itens para os estados se GOTO(Ii A) = Ij entatildeo GOTO tambeacutem mapeia um estado i e um natildeo-terminal A para o estado j

52 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

Para descrever o comportamento de uma analisador LR eacute recomendaacutevel ter uma notaccedilatildeo representado o estado completo do analisador sua pilha e a entrada restante

Uma configuraccedilatildeo p um analisador LR eacute um par (s0s1sm aiai+1an $) O primeiro componente eacute o conteuacutedo da pilha com o topo agrave direita e o segundo componente representa a entrada restante

Essa configuraccedilatildeo representa a seguinte forma sentencial agrave direita (X0X1Xmaiai+1an) Assim como faria um analisador shift-reduce

53 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

A uacutenica diferenccedila eacute que em inveacutes de siacutembolos da gramaacutetica a pilha conteacutem estados a partir dos quais os siacutembolos da gramaacutetica podem ser recuperados

Ou seja Xi eacute o siacutembolo da gramaacutetica representado pelo estado si

Observe que s0 o estado inicial do analisador sintaacutetico natildeo representa um siacutembolo da gramaacutetica e serve como marcador de fundo da pilha aleacutem de desempenhar um papel importante na anaacutelise

54 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

O proacuteximo movimento do analisador a partir da configuraccedilatildeo dada eacute determinado pela leitura de ai o siacutembolo de entrada corrente e sm o estado do topo da pilha e entatildeo consultando a entrada ACTION[sm ai] na tabela de accedilatildeo de anaacutelise

As configuraccedilotildees restantes apoacutes cada um dos quatro tipos de movimentaccedilatildeo satildeo as seguintes

1 Se ACTION[Sm ai] = shift s o analisador sintaacutetico executa um movimento de transferecircncia (shift move) ele empilha o estado s e avanccedila da entrada resultando na configuraccedilatildeo (s0s1 sm ai+1an $)

55 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2 Se ACTION[Sm ai]=reduce Ararrβ entatildeo o analisador sintaacutetico executa um movimento de reduzir (reduce move) resultando na configuraccedilatildeo (s0s1 sm-rs aiai+1an $)

onde r eacute o comprimento de β e s = GOTO[sm-r A]

Aqui o analisador sintaacutetico incialmente desempilhou os r siacutembolos de estado da pilha expondo o estado sm-r

O analisador sintaacutetico entatildeo empilhou s a entrada para GOTO[sm-r A] na pilha O siacutembolo corrente da entrada natildeo eacute alterado em um movimento de reduzir

56 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2

Para os LR que construiremos Xm-r+1Xm a sequencia de siacutembolos da gramaacutetica correspondendo aos estados retirados da pilha sempre iratildeo casar com β o lado direito da produccedilatildeo sendo reduzida

A saiacuteda de um analisador LR eacute gerada apoacutes um movimento de reduzir executando a accedilatildeo semacircntica associada agrave produccedilatildeo que estaacute sendo reduzida

No momento vamos considerar que a saiacuteda consiste soacute na impressatildeo da produccedilatildeo de reduccedilatildeo

57 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

3 Se ACTION[sm ai] = accept a anaacutelise estaacute concluiacuteda

4 Se ACTION[sm ai] = error o analisador sintaacutetico descobriu um erro e ativa uma rotina para recuperaccedilatildeo de erro

Todos os analisadores sintaacuteticos LR se comportam dessa maneira

A uacutenica diferenccedila entre eles diz respeito a informaccedilatildeo contida nos campos ACTION e GOTO da tabela de anaacutelise

O algoritmo de anaacutelise LR eacute resumido nos proacuteximos slides

58 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

Entrada Uma cadeia de entrada w e uma tabela de anaacutelise com funccedilotildees ACTION e GOTO para uma gramaacutetica G

Saiacuteda Se w estaacute em L(G) os passos os passos de uma reduccedilatildeo de uma anaacutelise ascendente para w

Caso contraacuterio uma indicaccedilatildeo de erro

Meacutetodo Inicialmente o analisador sintaacutetico possui w$ no buffer de entrada e s0 em sua pilha onde s0 representa o estado inicial

O analisador sintaacutetico entatildeo executa o algoritmo

59 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

[PSEUDO] seja a o primeiro siacutembolo de w$ while (1) Seja s o estado no topo da pilha if (ACTION[s a] = shift t) empilha t na pilha seja a o proacuteximo siacutembolo da entrada else if (ACTION[s a] = reduce Ararr β) desempilha siacutembolos |β| da pilha faccedila o estado t agora ser o topo da pilha empilhe GOTO[t A] na pilha imprima a produccedilatildeo Ararr β else if (ACTION[s a] = accept) pare a anaacutelise terminou

else chame uma rotina de recuperaccedilatildeo de erros

60 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR ndash Exemplo

A tabela do proacuteximo slide monstra as funccedilotildees ACTION e GOTO de uma tabela de anaacutelise LR para a gramaacutetica de expressatildeo estudada nesta aula e repetida aqui com produccedilotildees numeradas

Os coacutedigos para as accedilotildees satildeo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

(1) E rarr E + T

(2) E rarr T

(3) T rarr T F

(4) T rarr F

(5) F rarr ( E )

(6) F rarr id

1 Si significa avanccedila na entrada e empilha o estado i na pilha

2 Rj significa reduce segundo a produccedilatildeo de nuacutemero j

3 Acc significa accept

4 Entrada em branco significa error

61 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Estado ACTION

id + ( ) $

0 s5 s4

1 S6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4

5 r6 r6 r6 r6

6 s5 s4

7 s5 s4

8 r6 s11

9 s1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

GOTO

E T F

1 2 3

8 2 3

9 3

10

O valor de GOTO(s a) para o

terminal a estaacute em ACTION da

tabela de anaacutelise conectado agrave

accedilatildeo de transferecircncia sob a

entrada a e o estado s

O GOTO fornece o GOTO[s a]

para os natildeo-terminais A

Ok

Mas como eu consigo os dados

desta tabela

62 Geovane Griesang

A sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

FOLLOW(E) = FOLLOW(Ersquo) = ) $

FOLLOW(T) = FOLLOW(Trsquo) = + ) $

FOLLOW(F) = + ) $

63 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Construindo tabelas de anaacutelise SLR

Esse meacutetodo eacute o mais simples dos LRs Vamos nos referir a tabela de anaacutelise construiacuteda por este meacutetodo como uma tabela SLR e o analisador LR usando uma tabela SLR como um analisador sintaacutetico SLR

O meacutetodo SLR comeccedila com os itens LR(0) e autocircmatos LR(0) ou seja dada uma gramaacutetica G estendemos G para produzir Grsquo com o novo siacutembolo inicial Srsquo A partir de Grsquo construiacutemos C a coleccedilatildeo canocircnica de conj de itens para Grsquo junto com a funccedilatildeo GOTO

Para construir as entradas ACTION e GOTO da tabela de anaacutelise usando o algoritmo a seguir eacute preciso que conheccedilamos FOLLOW(A) para cada natildeo-terminal A de uma gramaacutetica

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 43: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

43 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

I5

F rarr id

o estado 5 natildeo possui transiccedilotildees de modo que reduzimos segundo F rarr id

quando removemos da pilha o estado 5 correspondente ao lado direito id o estado 7 passa a ser o topo da pilha

44 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Como o estado 7 possui uma transaccedilatildeo sob F para o estado 10 empilhamos o estado 10 (siacutembolo F)

I7

T rarr T F

F rarr ( E )

F rarr id

I10

T rarr T F

F

45 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O algoritmo eacute o mesmo para todos

os analisadores sintaacuteticos LR

Soacute a tabela de anaacutelise eacute diferente

de um analisador para o outro

O algoritmo lecirc caracteres de um

buffer de entrada um de cada vez

46 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O analisador sintaacutetico shift-reduce

transfere um siacutembolo para pilha jaacute

o analisador sintaacutetico LR transfere

um estado

Cada estado resume a informaccedilatildeo

contida na pilha abaixo dele

47 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

A pilha conteacutem uma sequencia de

estados s0s1 sm onde sm estaacute

no topo

No meacutetodo SLR a pilha conteacutem

estados do autocircmato LR(0)

Por construccedilatildeo a cada estado eacute

associado 1 siacutembolo da gramaacutetica

48 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Lembrem-se de que os estados

correspondem a conj de itens e

que haacute uma transiccedilatildeo do estado i

para o estado j se GOTO(Ii X) = Ij

Todas as transiccedilotildees para o estado

j devem ser para o mesmo siacutembolo

da gramaacutetica X

49 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

Sm

Sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Desta forma cada estado exceto

o estado inicial 0 possui um uacutenico

siacutembolo da gramaacutetica associado a

ele

50 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

A tabela LR consiste em duas partes ACTION uma funccedilatildeo de accedilatildeo de anaacutelise e GOTO uma funccedilatildeo de transiccedilatildeo

1 A funccedilatildeo ACTION recebe como argumentos um estado i e um estado a (ou $) O valor de ACTION(i a) pode ter um dos quatro formatos

a) Shift j onde j eacute um estado

A accedilatildeo tomada pelo analisador sintaacutetico efetivamente transfere a entrada a para a pilha mas usa o estado j para representar a

51 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

b) Reduce Ararr β A accedilatildeo do analisador efetivamente reduz β no topo da pilha para A o lado esquerdo da produccedilatildeo

c) Accept O analisador aceita a entrada e termina a anaacutelise

d) Error O analisador descobre um erro em sua entrada passa o controle p o recuperador de erro que toma alguma accedilatildeo corretiva

2 Estendemos a funccedilatildeo GOTO definida sobre um conjunto de itens para os estados se GOTO(Ii A) = Ij entatildeo GOTO tambeacutem mapeia um estado i e um natildeo-terminal A para o estado j

52 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

Para descrever o comportamento de uma analisador LR eacute recomendaacutevel ter uma notaccedilatildeo representado o estado completo do analisador sua pilha e a entrada restante

Uma configuraccedilatildeo p um analisador LR eacute um par (s0s1sm aiai+1an $) O primeiro componente eacute o conteuacutedo da pilha com o topo agrave direita e o segundo componente representa a entrada restante

Essa configuraccedilatildeo representa a seguinte forma sentencial agrave direita (X0X1Xmaiai+1an) Assim como faria um analisador shift-reduce

53 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

A uacutenica diferenccedila eacute que em inveacutes de siacutembolos da gramaacutetica a pilha conteacutem estados a partir dos quais os siacutembolos da gramaacutetica podem ser recuperados

Ou seja Xi eacute o siacutembolo da gramaacutetica representado pelo estado si

Observe que s0 o estado inicial do analisador sintaacutetico natildeo representa um siacutembolo da gramaacutetica e serve como marcador de fundo da pilha aleacutem de desempenhar um papel importante na anaacutelise

54 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

O proacuteximo movimento do analisador a partir da configuraccedilatildeo dada eacute determinado pela leitura de ai o siacutembolo de entrada corrente e sm o estado do topo da pilha e entatildeo consultando a entrada ACTION[sm ai] na tabela de accedilatildeo de anaacutelise

As configuraccedilotildees restantes apoacutes cada um dos quatro tipos de movimentaccedilatildeo satildeo as seguintes

1 Se ACTION[Sm ai] = shift s o analisador sintaacutetico executa um movimento de transferecircncia (shift move) ele empilha o estado s e avanccedila da entrada resultando na configuraccedilatildeo (s0s1 sm ai+1an $)

55 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2 Se ACTION[Sm ai]=reduce Ararrβ entatildeo o analisador sintaacutetico executa um movimento de reduzir (reduce move) resultando na configuraccedilatildeo (s0s1 sm-rs aiai+1an $)

onde r eacute o comprimento de β e s = GOTO[sm-r A]

Aqui o analisador sintaacutetico incialmente desempilhou os r siacutembolos de estado da pilha expondo o estado sm-r

O analisador sintaacutetico entatildeo empilhou s a entrada para GOTO[sm-r A] na pilha O siacutembolo corrente da entrada natildeo eacute alterado em um movimento de reduzir

56 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2

Para os LR que construiremos Xm-r+1Xm a sequencia de siacutembolos da gramaacutetica correspondendo aos estados retirados da pilha sempre iratildeo casar com β o lado direito da produccedilatildeo sendo reduzida

A saiacuteda de um analisador LR eacute gerada apoacutes um movimento de reduzir executando a accedilatildeo semacircntica associada agrave produccedilatildeo que estaacute sendo reduzida

No momento vamos considerar que a saiacuteda consiste soacute na impressatildeo da produccedilatildeo de reduccedilatildeo

57 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

3 Se ACTION[sm ai] = accept a anaacutelise estaacute concluiacuteda

4 Se ACTION[sm ai] = error o analisador sintaacutetico descobriu um erro e ativa uma rotina para recuperaccedilatildeo de erro

Todos os analisadores sintaacuteticos LR se comportam dessa maneira

A uacutenica diferenccedila entre eles diz respeito a informaccedilatildeo contida nos campos ACTION e GOTO da tabela de anaacutelise

O algoritmo de anaacutelise LR eacute resumido nos proacuteximos slides

58 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

Entrada Uma cadeia de entrada w e uma tabela de anaacutelise com funccedilotildees ACTION e GOTO para uma gramaacutetica G

Saiacuteda Se w estaacute em L(G) os passos os passos de uma reduccedilatildeo de uma anaacutelise ascendente para w

Caso contraacuterio uma indicaccedilatildeo de erro

Meacutetodo Inicialmente o analisador sintaacutetico possui w$ no buffer de entrada e s0 em sua pilha onde s0 representa o estado inicial

O analisador sintaacutetico entatildeo executa o algoritmo

59 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

[PSEUDO] seja a o primeiro siacutembolo de w$ while (1) Seja s o estado no topo da pilha if (ACTION[s a] = shift t) empilha t na pilha seja a o proacuteximo siacutembolo da entrada else if (ACTION[s a] = reduce Ararr β) desempilha siacutembolos |β| da pilha faccedila o estado t agora ser o topo da pilha empilhe GOTO[t A] na pilha imprima a produccedilatildeo Ararr β else if (ACTION[s a] = accept) pare a anaacutelise terminou

else chame uma rotina de recuperaccedilatildeo de erros

60 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR ndash Exemplo

A tabela do proacuteximo slide monstra as funccedilotildees ACTION e GOTO de uma tabela de anaacutelise LR para a gramaacutetica de expressatildeo estudada nesta aula e repetida aqui com produccedilotildees numeradas

Os coacutedigos para as accedilotildees satildeo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

(1) E rarr E + T

(2) E rarr T

(3) T rarr T F

(4) T rarr F

(5) F rarr ( E )

(6) F rarr id

1 Si significa avanccedila na entrada e empilha o estado i na pilha

2 Rj significa reduce segundo a produccedilatildeo de nuacutemero j

3 Acc significa accept

4 Entrada em branco significa error

61 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Estado ACTION

id + ( ) $

0 s5 s4

1 S6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4

5 r6 r6 r6 r6

6 s5 s4

7 s5 s4

8 r6 s11

9 s1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

GOTO

E T F

1 2 3

8 2 3

9 3

10

O valor de GOTO(s a) para o

terminal a estaacute em ACTION da

tabela de anaacutelise conectado agrave

accedilatildeo de transferecircncia sob a

entrada a e o estado s

O GOTO fornece o GOTO[s a]

para os natildeo-terminais A

Ok

Mas como eu consigo os dados

desta tabela

62 Geovane Griesang

A sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

FOLLOW(E) = FOLLOW(Ersquo) = ) $

FOLLOW(T) = FOLLOW(Trsquo) = + ) $

FOLLOW(F) = + ) $

63 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Construindo tabelas de anaacutelise SLR

Esse meacutetodo eacute o mais simples dos LRs Vamos nos referir a tabela de anaacutelise construiacuteda por este meacutetodo como uma tabela SLR e o analisador LR usando uma tabela SLR como um analisador sintaacutetico SLR

O meacutetodo SLR comeccedila com os itens LR(0) e autocircmatos LR(0) ou seja dada uma gramaacutetica G estendemos G para produzir Grsquo com o novo siacutembolo inicial Srsquo A partir de Grsquo construiacutemos C a coleccedilatildeo canocircnica de conj de itens para Grsquo junto com a funccedilatildeo GOTO

Para construir as entradas ACTION e GOTO da tabela de anaacutelise usando o algoritmo a seguir eacute preciso que conheccedilamos FOLLOW(A) para cada natildeo-terminal A de uma gramaacutetica

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 44: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

44 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Uso do autocircmato LR(0)

Accedilotildees de uma analisador shift-reduce p a entrada id id

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id $ empilha 5 e avanccedila

(2) 0 5 $ id id $ reduz segundo F rarr id

(3) 0 3 $ F id $ reduz segundo Trarr F

(4) 0 2 $ T id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id $ reduz segundo F rarr id

(7) 0 2 7 10 $ T F $ reduz segundo T rarr T F

(8) 0 2 $ T $ reduz segundo E rarr T

(9) 0 1 $ E $ aceitar

Como o estado 7 possui uma transaccedilatildeo sob F para o estado 10 empilhamos o estado 10 (siacutembolo F)

I7

T rarr T F

F rarr ( E )

F rarr id

I10

T rarr T F

F

45 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O algoritmo eacute o mesmo para todos

os analisadores sintaacuteticos LR

Soacute a tabela de anaacutelise eacute diferente

de um analisador para o outro

O algoritmo lecirc caracteres de um

buffer de entrada um de cada vez

46 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O analisador sintaacutetico shift-reduce

transfere um siacutembolo para pilha jaacute

o analisador sintaacutetico LR transfere

um estado

Cada estado resume a informaccedilatildeo

contida na pilha abaixo dele

47 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

A pilha conteacutem uma sequencia de

estados s0s1 sm onde sm estaacute

no topo

No meacutetodo SLR a pilha conteacutem

estados do autocircmato LR(0)

Por construccedilatildeo a cada estado eacute

associado 1 siacutembolo da gramaacutetica

48 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Lembrem-se de que os estados

correspondem a conj de itens e

que haacute uma transiccedilatildeo do estado i

para o estado j se GOTO(Ii X) = Ij

Todas as transiccedilotildees para o estado

j devem ser para o mesmo siacutembolo

da gramaacutetica X

49 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

Sm

Sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Desta forma cada estado exceto

o estado inicial 0 possui um uacutenico

siacutembolo da gramaacutetica associado a

ele

50 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

A tabela LR consiste em duas partes ACTION uma funccedilatildeo de accedilatildeo de anaacutelise e GOTO uma funccedilatildeo de transiccedilatildeo

1 A funccedilatildeo ACTION recebe como argumentos um estado i e um estado a (ou $) O valor de ACTION(i a) pode ter um dos quatro formatos

a) Shift j onde j eacute um estado

A accedilatildeo tomada pelo analisador sintaacutetico efetivamente transfere a entrada a para a pilha mas usa o estado j para representar a

51 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

b) Reduce Ararr β A accedilatildeo do analisador efetivamente reduz β no topo da pilha para A o lado esquerdo da produccedilatildeo

c) Accept O analisador aceita a entrada e termina a anaacutelise

d) Error O analisador descobre um erro em sua entrada passa o controle p o recuperador de erro que toma alguma accedilatildeo corretiva

2 Estendemos a funccedilatildeo GOTO definida sobre um conjunto de itens para os estados se GOTO(Ii A) = Ij entatildeo GOTO tambeacutem mapeia um estado i e um natildeo-terminal A para o estado j

52 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

Para descrever o comportamento de uma analisador LR eacute recomendaacutevel ter uma notaccedilatildeo representado o estado completo do analisador sua pilha e a entrada restante

Uma configuraccedilatildeo p um analisador LR eacute um par (s0s1sm aiai+1an $) O primeiro componente eacute o conteuacutedo da pilha com o topo agrave direita e o segundo componente representa a entrada restante

Essa configuraccedilatildeo representa a seguinte forma sentencial agrave direita (X0X1Xmaiai+1an) Assim como faria um analisador shift-reduce

53 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

A uacutenica diferenccedila eacute que em inveacutes de siacutembolos da gramaacutetica a pilha conteacutem estados a partir dos quais os siacutembolos da gramaacutetica podem ser recuperados

Ou seja Xi eacute o siacutembolo da gramaacutetica representado pelo estado si

Observe que s0 o estado inicial do analisador sintaacutetico natildeo representa um siacutembolo da gramaacutetica e serve como marcador de fundo da pilha aleacutem de desempenhar um papel importante na anaacutelise

54 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

O proacuteximo movimento do analisador a partir da configuraccedilatildeo dada eacute determinado pela leitura de ai o siacutembolo de entrada corrente e sm o estado do topo da pilha e entatildeo consultando a entrada ACTION[sm ai] na tabela de accedilatildeo de anaacutelise

As configuraccedilotildees restantes apoacutes cada um dos quatro tipos de movimentaccedilatildeo satildeo as seguintes

1 Se ACTION[Sm ai] = shift s o analisador sintaacutetico executa um movimento de transferecircncia (shift move) ele empilha o estado s e avanccedila da entrada resultando na configuraccedilatildeo (s0s1 sm ai+1an $)

55 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2 Se ACTION[Sm ai]=reduce Ararrβ entatildeo o analisador sintaacutetico executa um movimento de reduzir (reduce move) resultando na configuraccedilatildeo (s0s1 sm-rs aiai+1an $)

onde r eacute o comprimento de β e s = GOTO[sm-r A]

Aqui o analisador sintaacutetico incialmente desempilhou os r siacutembolos de estado da pilha expondo o estado sm-r

O analisador sintaacutetico entatildeo empilhou s a entrada para GOTO[sm-r A] na pilha O siacutembolo corrente da entrada natildeo eacute alterado em um movimento de reduzir

56 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2

Para os LR que construiremos Xm-r+1Xm a sequencia de siacutembolos da gramaacutetica correspondendo aos estados retirados da pilha sempre iratildeo casar com β o lado direito da produccedilatildeo sendo reduzida

A saiacuteda de um analisador LR eacute gerada apoacutes um movimento de reduzir executando a accedilatildeo semacircntica associada agrave produccedilatildeo que estaacute sendo reduzida

No momento vamos considerar que a saiacuteda consiste soacute na impressatildeo da produccedilatildeo de reduccedilatildeo

57 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

3 Se ACTION[sm ai] = accept a anaacutelise estaacute concluiacuteda

4 Se ACTION[sm ai] = error o analisador sintaacutetico descobriu um erro e ativa uma rotina para recuperaccedilatildeo de erro

Todos os analisadores sintaacuteticos LR se comportam dessa maneira

A uacutenica diferenccedila entre eles diz respeito a informaccedilatildeo contida nos campos ACTION e GOTO da tabela de anaacutelise

O algoritmo de anaacutelise LR eacute resumido nos proacuteximos slides

58 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

Entrada Uma cadeia de entrada w e uma tabela de anaacutelise com funccedilotildees ACTION e GOTO para uma gramaacutetica G

Saiacuteda Se w estaacute em L(G) os passos os passos de uma reduccedilatildeo de uma anaacutelise ascendente para w

Caso contraacuterio uma indicaccedilatildeo de erro

Meacutetodo Inicialmente o analisador sintaacutetico possui w$ no buffer de entrada e s0 em sua pilha onde s0 representa o estado inicial

O analisador sintaacutetico entatildeo executa o algoritmo

59 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

[PSEUDO] seja a o primeiro siacutembolo de w$ while (1) Seja s o estado no topo da pilha if (ACTION[s a] = shift t) empilha t na pilha seja a o proacuteximo siacutembolo da entrada else if (ACTION[s a] = reduce Ararr β) desempilha siacutembolos |β| da pilha faccedila o estado t agora ser o topo da pilha empilhe GOTO[t A] na pilha imprima a produccedilatildeo Ararr β else if (ACTION[s a] = accept) pare a anaacutelise terminou

else chame uma rotina de recuperaccedilatildeo de erros

60 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR ndash Exemplo

A tabela do proacuteximo slide monstra as funccedilotildees ACTION e GOTO de uma tabela de anaacutelise LR para a gramaacutetica de expressatildeo estudada nesta aula e repetida aqui com produccedilotildees numeradas

Os coacutedigos para as accedilotildees satildeo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

(1) E rarr E + T

(2) E rarr T

(3) T rarr T F

(4) T rarr F

(5) F rarr ( E )

(6) F rarr id

1 Si significa avanccedila na entrada e empilha o estado i na pilha

2 Rj significa reduce segundo a produccedilatildeo de nuacutemero j

3 Acc significa accept

4 Entrada em branco significa error

61 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Estado ACTION

id + ( ) $

0 s5 s4

1 S6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4

5 r6 r6 r6 r6

6 s5 s4

7 s5 s4

8 r6 s11

9 s1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

GOTO

E T F

1 2 3

8 2 3

9 3

10

O valor de GOTO(s a) para o

terminal a estaacute em ACTION da

tabela de anaacutelise conectado agrave

accedilatildeo de transferecircncia sob a

entrada a e o estado s

O GOTO fornece o GOTO[s a]

para os natildeo-terminais A

Ok

Mas como eu consigo os dados

desta tabela

62 Geovane Griesang

A sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

FOLLOW(E) = FOLLOW(Ersquo) = ) $

FOLLOW(T) = FOLLOW(Trsquo) = + ) $

FOLLOW(F) = + ) $

63 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Construindo tabelas de anaacutelise SLR

Esse meacutetodo eacute o mais simples dos LRs Vamos nos referir a tabela de anaacutelise construiacuteda por este meacutetodo como uma tabela SLR e o analisador LR usando uma tabela SLR como um analisador sintaacutetico SLR

O meacutetodo SLR comeccedila com os itens LR(0) e autocircmatos LR(0) ou seja dada uma gramaacutetica G estendemos G para produzir Grsquo com o novo siacutembolo inicial Srsquo A partir de Grsquo construiacutemos C a coleccedilatildeo canocircnica de conj de itens para Grsquo junto com a funccedilatildeo GOTO

Para construir as entradas ACTION e GOTO da tabela de anaacutelise usando o algoritmo a seguir eacute preciso que conheccedilamos FOLLOW(A) para cada natildeo-terminal A de uma gramaacutetica

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 45: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

45 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O algoritmo eacute o mesmo para todos

os analisadores sintaacuteticos LR

Soacute a tabela de anaacutelise eacute diferente

de um analisador para o outro

O algoritmo lecirc caracteres de um

buffer de entrada um de cada vez

46 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O analisador sintaacutetico shift-reduce

transfere um siacutembolo para pilha jaacute

o analisador sintaacutetico LR transfere

um estado

Cada estado resume a informaccedilatildeo

contida na pilha abaixo dele

47 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

A pilha conteacutem uma sequencia de

estados s0s1 sm onde sm estaacute

no topo

No meacutetodo SLR a pilha conteacutem

estados do autocircmato LR(0)

Por construccedilatildeo a cada estado eacute

associado 1 siacutembolo da gramaacutetica

48 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Lembrem-se de que os estados

correspondem a conj de itens e

que haacute uma transiccedilatildeo do estado i

para o estado j se GOTO(Ii X) = Ij

Todas as transiccedilotildees para o estado

j devem ser para o mesmo siacutembolo

da gramaacutetica X

49 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

Sm

Sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Desta forma cada estado exceto

o estado inicial 0 possui um uacutenico

siacutembolo da gramaacutetica associado a

ele

50 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

A tabela LR consiste em duas partes ACTION uma funccedilatildeo de accedilatildeo de anaacutelise e GOTO uma funccedilatildeo de transiccedilatildeo

1 A funccedilatildeo ACTION recebe como argumentos um estado i e um estado a (ou $) O valor de ACTION(i a) pode ter um dos quatro formatos

a) Shift j onde j eacute um estado

A accedilatildeo tomada pelo analisador sintaacutetico efetivamente transfere a entrada a para a pilha mas usa o estado j para representar a

51 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

b) Reduce Ararr β A accedilatildeo do analisador efetivamente reduz β no topo da pilha para A o lado esquerdo da produccedilatildeo

c) Accept O analisador aceita a entrada e termina a anaacutelise

d) Error O analisador descobre um erro em sua entrada passa o controle p o recuperador de erro que toma alguma accedilatildeo corretiva

2 Estendemos a funccedilatildeo GOTO definida sobre um conjunto de itens para os estados se GOTO(Ii A) = Ij entatildeo GOTO tambeacutem mapeia um estado i e um natildeo-terminal A para o estado j

52 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

Para descrever o comportamento de uma analisador LR eacute recomendaacutevel ter uma notaccedilatildeo representado o estado completo do analisador sua pilha e a entrada restante

Uma configuraccedilatildeo p um analisador LR eacute um par (s0s1sm aiai+1an $) O primeiro componente eacute o conteuacutedo da pilha com o topo agrave direita e o segundo componente representa a entrada restante

Essa configuraccedilatildeo representa a seguinte forma sentencial agrave direita (X0X1Xmaiai+1an) Assim como faria um analisador shift-reduce

53 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

A uacutenica diferenccedila eacute que em inveacutes de siacutembolos da gramaacutetica a pilha conteacutem estados a partir dos quais os siacutembolos da gramaacutetica podem ser recuperados

Ou seja Xi eacute o siacutembolo da gramaacutetica representado pelo estado si

Observe que s0 o estado inicial do analisador sintaacutetico natildeo representa um siacutembolo da gramaacutetica e serve como marcador de fundo da pilha aleacutem de desempenhar um papel importante na anaacutelise

54 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

O proacuteximo movimento do analisador a partir da configuraccedilatildeo dada eacute determinado pela leitura de ai o siacutembolo de entrada corrente e sm o estado do topo da pilha e entatildeo consultando a entrada ACTION[sm ai] na tabela de accedilatildeo de anaacutelise

As configuraccedilotildees restantes apoacutes cada um dos quatro tipos de movimentaccedilatildeo satildeo as seguintes

1 Se ACTION[Sm ai] = shift s o analisador sintaacutetico executa um movimento de transferecircncia (shift move) ele empilha o estado s e avanccedila da entrada resultando na configuraccedilatildeo (s0s1 sm ai+1an $)

55 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2 Se ACTION[Sm ai]=reduce Ararrβ entatildeo o analisador sintaacutetico executa um movimento de reduzir (reduce move) resultando na configuraccedilatildeo (s0s1 sm-rs aiai+1an $)

onde r eacute o comprimento de β e s = GOTO[sm-r A]

Aqui o analisador sintaacutetico incialmente desempilhou os r siacutembolos de estado da pilha expondo o estado sm-r

O analisador sintaacutetico entatildeo empilhou s a entrada para GOTO[sm-r A] na pilha O siacutembolo corrente da entrada natildeo eacute alterado em um movimento de reduzir

56 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2

Para os LR que construiremos Xm-r+1Xm a sequencia de siacutembolos da gramaacutetica correspondendo aos estados retirados da pilha sempre iratildeo casar com β o lado direito da produccedilatildeo sendo reduzida

A saiacuteda de um analisador LR eacute gerada apoacutes um movimento de reduzir executando a accedilatildeo semacircntica associada agrave produccedilatildeo que estaacute sendo reduzida

No momento vamos considerar que a saiacuteda consiste soacute na impressatildeo da produccedilatildeo de reduccedilatildeo

57 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

3 Se ACTION[sm ai] = accept a anaacutelise estaacute concluiacuteda

4 Se ACTION[sm ai] = error o analisador sintaacutetico descobriu um erro e ativa uma rotina para recuperaccedilatildeo de erro

Todos os analisadores sintaacuteticos LR se comportam dessa maneira

A uacutenica diferenccedila entre eles diz respeito a informaccedilatildeo contida nos campos ACTION e GOTO da tabela de anaacutelise

O algoritmo de anaacutelise LR eacute resumido nos proacuteximos slides

58 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

Entrada Uma cadeia de entrada w e uma tabela de anaacutelise com funccedilotildees ACTION e GOTO para uma gramaacutetica G

Saiacuteda Se w estaacute em L(G) os passos os passos de uma reduccedilatildeo de uma anaacutelise ascendente para w

Caso contraacuterio uma indicaccedilatildeo de erro

Meacutetodo Inicialmente o analisador sintaacutetico possui w$ no buffer de entrada e s0 em sua pilha onde s0 representa o estado inicial

O analisador sintaacutetico entatildeo executa o algoritmo

59 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

[PSEUDO] seja a o primeiro siacutembolo de w$ while (1) Seja s o estado no topo da pilha if (ACTION[s a] = shift t) empilha t na pilha seja a o proacuteximo siacutembolo da entrada else if (ACTION[s a] = reduce Ararr β) desempilha siacutembolos |β| da pilha faccedila o estado t agora ser o topo da pilha empilhe GOTO[t A] na pilha imprima a produccedilatildeo Ararr β else if (ACTION[s a] = accept) pare a anaacutelise terminou

else chame uma rotina de recuperaccedilatildeo de erros

60 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR ndash Exemplo

A tabela do proacuteximo slide monstra as funccedilotildees ACTION e GOTO de uma tabela de anaacutelise LR para a gramaacutetica de expressatildeo estudada nesta aula e repetida aqui com produccedilotildees numeradas

Os coacutedigos para as accedilotildees satildeo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

(1) E rarr E + T

(2) E rarr T

(3) T rarr T F

(4) T rarr F

(5) F rarr ( E )

(6) F rarr id

1 Si significa avanccedila na entrada e empilha o estado i na pilha

2 Rj significa reduce segundo a produccedilatildeo de nuacutemero j

3 Acc significa accept

4 Entrada em branco significa error

61 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Estado ACTION

id + ( ) $

0 s5 s4

1 S6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4

5 r6 r6 r6 r6

6 s5 s4

7 s5 s4

8 r6 s11

9 s1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

GOTO

E T F

1 2 3

8 2 3

9 3

10

O valor de GOTO(s a) para o

terminal a estaacute em ACTION da

tabela de anaacutelise conectado agrave

accedilatildeo de transferecircncia sob a

entrada a e o estado s

O GOTO fornece o GOTO[s a]

para os natildeo-terminais A

Ok

Mas como eu consigo os dados

desta tabela

62 Geovane Griesang

A sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

FOLLOW(E) = FOLLOW(Ersquo) = ) $

FOLLOW(T) = FOLLOW(Trsquo) = + ) $

FOLLOW(F) = + ) $

63 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Construindo tabelas de anaacutelise SLR

Esse meacutetodo eacute o mais simples dos LRs Vamos nos referir a tabela de anaacutelise construiacuteda por este meacutetodo como uma tabela SLR e o analisador LR usando uma tabela SLR como um analisador sintaacutetico SLR

O meacutetodo SLR comeccedila com os itens LR(0) e autocircmatos LR(0) ou seja dada uma gramaacutetica G estendemos G para produzir Grsquo com o novo siacutembolo inicial Srsquo A partir de Grsquo construiacutemos C a coleccedilatildeo canocircnica de conj de itens para Grsquo junto com a funccedilatildeo GOTO

Para construir as entradas ACTION e GOTO da tabela de anaacutelise usando o algoritmo a seguir eacute preciso que conheccedilamos FOLLOW(A) para cada natildeo-terminal A de uma gramaacutetica

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 46: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

46 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

O analisador sintaacutetico shift-reduce

transfere um siacutembolo para pilha jaacute

o analisador sintaacutetico LR transfere

um estado

Cada estado resume a informaccedilatildeo

contida na pilha abaixo dele

47 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

A pilha conteacutem uma sequencia de

estados s0s1 sm onde sm estaacute

no topo

No meacutetodo SLR a pilha conteacutem

estados do autocircmato LR(0)

Por construccedilatildeo a cada estado eacute

associado 1 siacutembolo da gramaacutetica

48 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Lembrem-se de que os estados

correspondem a conj de itens e

que haacute uma transiccedilatildeo do estado i

para o estado j se GOTO(Ii X) = Ij

Todas as transiccedilotildees para o estado

j devem ser para o mesmo siacutembolo

da gramaacutetica X

49 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

Sm

Sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Desta forma cada estado exceto

o estado inicial 0 possui um uacutenico

siacutembolo da gramaacutetica associado a

ele

50 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

A tabela LR consiste em duas partes ACTION uma funccedilatildeo de accedilatildeo de anaacutelise e GOTO uma funccedilatildeo de transiccedilatildeo

1 A funccedilatildeo ACTION recebe como argumentos um estado i e um estado a (ou $) O valor de ACTION(i a) pode ter um dos quatro formatos

a) Shift j onde j eacute um estado

A accedilatildeo tomada pelo analisador sintaacutetico efetivamente transfere a entrada a para a pilha mas usa o estado j para representar a

51 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

b) Reduce Ararr β A accedilatildeo do analisador efetivamente reduz β no topo da pilha para A o lado esquerdo da produccedilatildeo

c) Accept O analisador aceita a entrada e termina a anaacutelise

d) Error O analisador descobre um erro em sua entrada passa o controle p o recuperador de erro que toma alguma accedilatildeo corretiva

2 Estendemos a funccedilatildeo GOTO definida sobre um conjunto de itens para os estados se GOTO(Ii A) = Ij entatildeo GOTO tambeacutem mapeia um estado i e um natildeo-terminal A para o estado j

52 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

Para descrever o comportamento de uma analisador LR eacute recomendaacutevel ter uma notaccedilatildeo representado o estado completo do analisador sua pilha e a entrada restante

Uma configuraccedilatildeo p um analisador LR eacute um par (s0s1sm aiai+1an $) O primeiro componente eacute o conteuacutedo da pilha com o topo agrave direita e o segundo componente representa a entrada restante

Essa configuraccedilatildeo representa a seguinte forma sentencial agrave direita (X0X1Xmaiai+1an) Assim como faria um analisador shift-reduce

53 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

A uacutenica diferenccedila eacute que em inveacutes de siacutembolos da gramaacutetica a pilha conteacutem estados a partir dos quais os siacutembolos da gramaacutetica podem ser recuperados

Ou seja Xi eacute o siacutembolo da gramaacutetica representado pelo estado si

Observe que s0 o estado inicial do analisador sintaacutetico natildeo representa um siacutembolo da gramaacutetica e serve como marcador de fundo da pilha aleacutem de desempenhar um papel importante na anaacutelise

54 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

O proacuteximo movimento do analisador a partir da configuraccedilatildeo dada eacute determinado pela leitura de ai o siacutembolo de entrada corrente e sm o estado do topo da pilha e entatildeo consultando a entrada ACTION[sm ai] na tabela de accedilatildeo de anaacutelise

As configuraccedilotildees restantes apoacutes cada um dos quatro tipos de movimentaccedilatildeo satildeo as seguintes

1 Se ACTION[Sm ai] = shift s o analisador sintaacutetico executa um movimento de transferecircncia (shift move) ele empilha o estado s e avanccedila da entrada resultando na configuraccedilatildeo (s0s1 sm ai+1an $)

55 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2 Se ACTION[Sm ai]=reduce Ararrβ entatildeo o analisador sintaacutetico executa um movimento de reduzir (reduce move) resultando na configuraccedilatildeo (s0s1 sm-rs aiai+1an $)

onde r eacute o comprimento de β e s = GOTO[sm-r A]

Aqui o analisador sintaacutetico incialmente desempilhou os r siacutembolos de estado da pilha expondo o estado sm-r

O analisador sintaacutetico entatildeo empilhou s a entrada para GOTO[sm-r A] na pilha O siacutembolo corrente da entrada natildeo eacute alterado em um movimento de reduzir

56 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2

Para os LR que construiremos Xm-r+1Xm a sequencia de siacutembolos da gramaacutetica correspondendo aos estados retirados da pilha sempre iratildeo casar com β o lado direito da produccedilatildeo sendo reduzida

A saiacuteda de um analisador LR eacute gerada apoacutes um movimento de reduzir executando a accedilatildeo semacircntica associada agrave produccedilatildeo que estaacute sendo reduzida

No momento vamos considerar que a saiacuteda consiste soacute na impressatildeo da produccedilatildeo de reduccedilatildeo

57 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

3 Se ACTION[sm ai] = accept a anaacutelise estaacute concluiacuteda

4 Se ACTION[sm ai] = error o analisador sintaacutetico descobriu um erro e ativa uma rotina para recuperaccedilatildeo de erro

Todos os analisadores sintaacuteticos LR se comportam dessa maneira

A uacutenica diferenccedila entre eles diz respeito a informaccedilatildeo contida nos campos ACTION e GOTO da tabela de anaacutelise

O algoritmo de anaacutelise LR eacute resumido nos proacuteximos slides

58 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

Entrada Uma cadeia de entrada w e uma tabela de anaacutelise com funccedilotildees ACTION e GOTO para uma gramaacutetica G

Saiacuteda Se w estaacute em L(G) os passos os passos de uma reduccedilatildeo de uma anaacutelise ascendente para w

Caso contraacuterio uma indicaccedilatildeo de erro

Meacutetodo Inicialmente o analisador sintaacutetico possui w$ no buffer de entrada e s0 em sua pilha onde s0 representa o estado inicial

O analisador sintaacutetico entatildeo executa o algoritmo

59 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

[PSEUDO] seja a o primeiro siacutembolo de w$ while (1) Seja s o estado no topo da pilha if (ACTION[s a] = shift t) empilha t na pilha seja a o proacuteximo siacutembolo da entrada else if (ACTION[s a] = reduce Ararr β) desempilha siacutembolos |β| da pilha faccedila o estado t agora ser o topo da pilha empilhe GOTO[t A] na pilha imprima a produccedilatildeo Ararr β else if (ACTION[s a] = accept) pare a anaacutelise terminou

else chame uma rotina de recuperaccedilatildeo de erros

60 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR ndash Exemplo

A tabela do proacuteximo slide monstra as funccedilotildees ACTION e GOTO de uma tabela de anaacutelise LR para a gramaacutetica de expressatildeo estudada nesta aula e repetida aqui com produccedilotildees numeradas

Os coacutedigos para as accedilotildees satildeo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

(1) E rarr E + T

(2) E rarr T

(3) T rarr T F

(4) T rarr F

(5) F rarr ( E )

(6) F rarr id

1 Si significa avanccedila na entrada e empilha o estado i na pilha

2 Rj significa reduce segundo a produccedilatildeo de nuacutemero j

3 Acc significa accept

4 Entrada em branco significa error

61 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Estado ACTION

id + ( ) $

0 s5 s4

1 S6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4

5 r6 r6 r6 r6

6 s5 s4

7 s5 s4

8 r6 s11

9 s1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

GOTO

E T F

1 2 3

8 2 3

9 3

10

O valor de GOTO(s a) para o

terminal a estaacute em ACTION da

tabela de anaacutelise conectado agrave

accedilatildeo de transferecircncia sob a

entrada a e o estado s

O GOTO fornece o GOTO[s a]

para os natildeo-terminais A

Ok

Mas como eu consigo os dados

desta tabela

62 Geovane Griesang

A sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

FOLLOW(E) = FOLLOW(Ersquo) = ) $

FOLLOW(T) = FOLLOW(Trsquo) = + ) $

FOLLOW(F) = + ) $

63 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Construindo tabelas de anaacutelise SLR

Esse meacutetodo eacute o mais simples dos LRs Vamos nos referir a tabela de anaacutelise construiacuteda por este meacutetodo como uma tabela SLR e o analisador LR usando uma tabela SLR como um analisador sintaacutetico SLR

O meacutetodo SLR comeccedila com os itens LR(0) e autocircmatos LR(0) ou seja dada uma gramaacutetica G estendemos G para produzir Grsquo com o novo siacutembolo inicial Srsquo A partir de Grsquo construiacutemos C a coleccedilatildeo canocircnica de conj de itens para Grsquo junto com a funccedilatildeo GOTO

Para construir as entradas ACTION e GOTO da tabela de anaacutelise usando o algoritmo a seguir eacute preciso que conheccedilamos FOLLOW(A) para cada natildeo-terminal A de uma gramaacutetica

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 47: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

47 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

A pilha conteacutem uma sequencia de

estados s0s1 sm onde sm estaacute

no topo

No meacutetodo SLR a pilha conteacutem

estados do autocircmato LR(0)

Por construccedilatildeo a cada estado eacute

associado 1 siacutembolo da gramaacutetica

48 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Lembrem-se de que os estados

correspondem a conj de itens e

que haacute uma transiccedilatildeo do estado i

para o estado j se GOTO(Ii X) = Ij

Todas as transiccedilotildees para o estado

j devem ser para o mesmo siacutembolo

da gramaacutetica X

49 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

Sm

Sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Desta forma cada estado exceto

o estado inicial 0 possui um uacutenico

siacutembolo da gramaacutetica associado a

ele

50 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

A tabela LR consiste em duas partes ACTION uma funccedilatildeo de accedilatildeo de anaacutelise e GOTO uma funccedilatildeo de transiccedilatildeo

1 A funccedilatildeo ACTION recebe como argumentos um estado i e um estado a (ou $) O valor de ACTION(i a) pode ter um dos quatro formatos

a) Shift j onde j eacute um estado

A accedilatildeo tomada pelo analisador sintaacutetico efetivamente transfere a entrada a para a pilha mas usa o estado j para representar a

51 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

b) Reduce Ararr β A accedilatildeo do analisador efetivamente reduz β no topo da pilha para A o lado esquerdo da produccedilatildeo

c) Accept O analisador aceita a entrada e termina a anaacutelise

d) Error O analisador descobre um erro em sua entrada passa o controle p o recuperador de erro que toma alguma accedilatildeo corretiva

2 Estendemos a funccedilatildeo GOTO definida sobre um conjunto de itens para os estados se GOTO(Ii A) = Ij entatildeo GOTO tambeacutem mapeia um estado i e um natildeo-terminal A para o estado j

52 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

Para descrever o comportamento de uma analisador LR eacute recomendaacutevel ter uma notaccedilatildeo representado o estado completo do analisador sua pilha e a entrada restante

Uma configuraccedilatildeo p um analisador LR eacute um par (s0s1sm aiai+1an $) O primeiro componente eacute o conteuacutedo da pilha com o topo agrave direita e o segundo componente representa a entrada restante

Essa configuraccedilatildeo representa a seguinte forma sentencial agrave direita (X0X1Xmaiai+1an) Assim como faria um analisador shift-reduce

53 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

A uacutenica diferenccedila eacute que em inveacutes de siacutembolos da gramaacutetica a pilha conteacutem estados a partir dos quais os siacutembolos da gramaacutetica podem ser recuperados

Ou seja Xi eacute o siacutembolo da gramaacutetica representado pelo estado si

Observe que s0 o estado inicial do analisador sintaacutetico natildeo representa um siacutembolo da gramaacutetica e serve como marcador de fundo da pilha aleacutem de desempenhar um papel importante na anaacutelise

54 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

O proacuteximo movimento do analisador a partir da configuraccedilatildeo dada eacute determinado pela leitura de ai o siacutembolo de entrada corrente e sm o estado do topo da pilha e entatildeo consultando a entrada ACTION[sm ai] na tabela de accedilatildeo de anaacutelise

As configuraccedilotildees restantes apoacutes cada um dos quatro tipos de movimentaccedilatildeo satildeo as seguintes

1 Se ACTION[Sm ai] = shift s o analisador sintaacutetico executa um movimento de transferecircncia (shift move) ele empilha o estado s e avanccedila da entrada resultando na configuraccedilatildeo (s0s1 sm ai+1an $)

55 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2 Se ACTION[Sm ai]=reduce Ararrβ entatildeo o analisador sintaacutetico executa um movimento de reduzir (reduce move) resultando na configuraccedilatildeo (s0s1 sm-rs aiai+1an $)

onde r eacute o comprimento de β e s = GOTO[sm-r A]

Aqui o analisador sintaacutetico incialmente desempilhou os r siacutembolos de estado da pilha expondo o estado sm-r

O analisador sintaacutetico entatildeo empilhou s a entrada para GOTO[sm-r A] na pilha O siacutembolo corrente da entrada natildeo eacute alterado em um movimento de reduzir

56 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2

Para os LR que construiremos Xm-r+1Xm a sequencia de siacutembolos da gramaacutetica correspondendo aos estados retirados da pilha sempre iratildeo casar com β o lado direito da produccedilatildeo sendo reduzida

A saiacuteda de um analisador LR eacute gerada apoacutes um movimento de reduzir executando a accedilatildeo semacircntica associada agrave produccedilatildeo que estaacute sendo reduzida

No momento vamos considerar que a saiacuteda consiste soacute na impressatildeo da produccedilatildeo de reduccedilatildeo

57 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

3 Se ACTION[sm ai] = accept a anaacutelise estaacute concluiacuteda

4 Se ACTION[sm ai] = error o analisador sintaacutetico descobriu um erro e ativa uma rotina para recuperaccedilatildeo de erro

Todos os analisadores sintaacuteticos LR se comportam dessa maneira

A uacutenica diferenccedila entre eles diz respeito a informaccedilatildeo contida nos campos ACTION e GOTO da tabela de anaacutelise

O algoritmo de anaacutelise LR eacute resumido nos proacuteximos slides

58 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

Entrada Uma cadeia de entrada w e uma tabela de anaacutelise com funccedilotildees ACTION e GOTO para uma gramaacutetica G

Saiacuteda Se w estaacute em L(G) os passos os passos de uma reduccedilatildeo de uma anaacutelise ascendente para w

Caso contraacuterio uma indicaccedilatildeo de erro

Meacutetodo Inicialmente o analisador sintaacutetico possui w$ no buffer de entrada e s0 em sua pilha onde s0 representa o estado inicial

O analisador sintaacutetico entatildeo executa o algoritmo

59 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

[PSEUDO] seja a o primeiro siacutembolo de w$ while (1) Seja s o estado no topo da pilha if (ACTION[s a] = shift t) empilha t na pilha seja a o proacuteximo siacutembolo da entrada else if (ACTION[s a] = reduce Ararr β) desempilha siacutembolos |β| da pilha faccedila o estado t agora ser o topo da pilha empilhe GOTO[t A] na pilha imprima a produccedilatildeo Ararr β else if (ACTION[s a] = accept) pare a anaacutelise terminou

else chame uma rotina de recuperaccedilatildeo de erros

60 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR ndash Exemplo

A tabela do proacuteximo slide monstra as funccedilotildees ACTION e GOTO de uma tabela de anaacutelise LR para a gramaacutetica de expressatildeo estudada nesta aula e repetida aqui com produccedilotildees numeradas

Os coacutedigos para as accedilotildees satildeo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

(1) E rarr E + T

(2) E rarr T

(3) T rarr T F

(4) T rarr F

(5) F rarr ( E )

(6) F rarr id

1 Si significa avanccedila na entrada e empilha o estado i na pilha

2 Rj significa reduce segundo a produccedilatildeo de nuacutemero j

3 Acc significa accept

4 Entrada em branco significa error

61 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Estado ACTION

id + ( ) $

0 s5 s4

1 S6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4

5 r6 r6 r6 r6

6 s5 s4

7 s5 s4

8 r6 s11

9 s1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

GOTO

E T F

1 2 3

8 2 3

9 3

10

O valor de GOTO(s a) para o

terminal a estaacute em ACTION da

tabela de anaacutelise conectado agrave

accedilatildeo de transferecircncia sob a

entrada a e o estado s

O GOTO fornece o GOTO[s a]

para os natildeo-terminais A

Ok

Mas como eu consigo os dados

desta tabela

62 Geovane Griesang

A sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

FOLLOW(E) = FOLLOW(Ersquo) = ) $

FOLLOW(T) = FOLLOW(Trsquo) = + ) $

FOLLOW(F) = + ) $

63 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Construindo tabelas de anaacutelise SLR

Esse meacutetodo eacute o mais simples dos LRs Vamos nos referir a tabela de anaacutelise construiacuteda por este meacutetodo como uma tabela SLR e o analisador LR usando uma tabela SLR como um analisador sintaacutetico SLR

O meacutetodo SLR comeccedila com os itens LR(0) e autocircmatos LR(0) ou seja dada uma gramaacutetica G estendemos G para produzir Grsquo com o novo siacutembolo inicial Srsquo A partir de Grsquo construiacutemos C a coleccedilatildeo canocircnica de conj de itens para Grsquo junto com a funccedilatildeo GOTO

Para construir as entradas ACTION e GOTO da tabela de anaacutelise usando o algoritmo a seguir eacute preciso que conheccedilamos FOLLOW(A) para cada natildeo-terminal A de uma gramaacutetica

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 48: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

48 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

sm

sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Lembrem-se de que os estados

correspondem a conj de itens e

que haacute uma transiccedilatildeo do estado i

para o estado j se GOTO(Ii X) = Ij

Todas as transiccedilotildees para o estado

j devem ser para o mesmo siacutembolo

da gramaacutetica X

49 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

Sm

Sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Desta forma cada estado exceto

o estado inicial 0 possui um uacutenico

siacutembolo da gramaacutetica associado a

ele

50 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

A tabela LR consiste em duas partes ACTION uma funccedilatildeo de accedilatildeo de anaacutelise e GOTO uma funccedilatildeo de transiccedilatildeo

1 A funccedilatildeo ACTION recebe como argumentos um estado i e um estado a (ou $) O valor de ACTION(i a) pode ter um dos quatro formatos

a) Shift j onde j eacute um estado

A accedilatildeo tomada pelo analisador sintaacutetico efetivamente transfere a entrada a para a pilha mas usa o estado j para representar a

51 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

b) Reduce Ararr β A accedilatildeo do analisador efetivamente reduz β no topo da pilha para A o lado esquerdo da produccedilatildeo

c) Accept O analisador aceita a entrada e termina a anaacutelise

d) Error O analisador descobre um erro em sua entrada passa o controle p o recuperador de erro que toma alguma accedilatildeo corretiva

2 Estendemos a funccedilatildeo GOTO definida sobre um conjunto de itens para os estados se GOTO(Ii A) = Ij entatildeo GOTO tambeacutem mapeia um estado i e um natildeo-terminal A para o estado j

52 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

Para descrever o comportamento de uma analisador LR eacute recomendaacutevel ter uma notaccedilatildeo representado o estado completo do analisador sua pilha e a entrada restante

Uma configuraccedilatildeo p um analisador LR eacute um par (s0s1sm aiai+1an $) O primeiro componente eacute o conteuacutedo da pilha com o topo agrave direita e o segundo componente representa a entrada restante

Essa configuraccedilatildeo representa a seguinte forma sentencial agrave direita (X0X1Xmaiai+1an) Assim como faria um analisador shift-reduce

53 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

A uacutenica diferenccedila eacute que em inveacutes de siacutembolos da gramaacutetica a pilha conteacutem estados a partir dos quais os siacutembolos da gramaacutetica podem ser recuperados

Ou seja Xi eacute o siacutembolo da gramaacutetica representado pelo estado si

Observe que s0 o estado inicial do analisador sintaacutetico natildeo representa um siacutembolo da gramaacutetica e serve como marcador de fundo da pilha aleacutem de desempenhar um papel importante na anaacutelise

54 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

O proacuteximo movimento do analisador a partir da configuraccedilatildeo dada eacute determinado pela leitura de ai o siacutembolo de entrada corrente e sm o estado do topo da pilha e entatildeo consultando a entrada ACTION[sm ai] na tabela de accedilatildeo de anaacutelise

As configuraccedilotildees restantes apoacutes cada um dos quatro tipos de movimentaccedilatildeo satildeo as seguintes

1 Se ACTION[Sm ai] = shift s o analisador sintaacutetico executa um movimento de transferecircncia (shift move) ele empilha o estado s e avanccedila da entrada resultando na configuraccedilatildeo (s0s1 sm ai+1an $)

55 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2 Se ACTION[Sm ai]=reduce Ararrβ entatildeo o analisador sintaacutetico executa um movimento de reduzir (reduce move) resultando na configuraccedilatildeo (s0s1 sm-rs aiai+1an $)

onde r eacute o comprimento de β e s = GOTO[sm-r A]

Aqui o analisador sintaacutetico incialmente desempilhou os r siacutembolos de estado da pilha expondo o estado sm-r

O analisador sintaacutetico entatildeo empilhou s a entrada para GOTO[sm-r A] na pilha O siacutembolo corrente da entrada natildeo eacute alterado em um movimento de reduzir

56 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2

Para os LR que construiremos Xm-r+1Xm a sequencia de siacutembolos da gramaacutetica correspondendo aos estados retirados da pilha sempre iratildeo casar com β o lado direito da produccedilatildeo sendo reduzida

A saiacuteda de um analisador LR eacute gerada apoacutes um movimento de reduzir executando a accedilatildeo semacircntica associada agrave produccedilatildeo que estaacute sendo reduzida

No momento vamos considerar que a saiacuteda consiste soacute na impressatildeo da produccedilatildeo de reduccedilatildeo

57 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

3 Se ACTION[sm ai] = accept a anaacutelise estaacute concluiacuteda

4 Se ACTION[sm ai] = error o analisador sintaacutetico descobriu um erro e ativa uma rotina para recuperaccedilatildeo de erro

Todos os analisadores sintaacuteticos LR se comportam dessa maneira

A uacutenica diferenccedila entre eles diz respeito a informaccedilatildeo contida nos campos ACTION e GOTO da tabela de anaacutelise

O algoritmo de anaacutelise LR eacute resumido nos proacuteximos slides

58 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

Entrada Uma cadeia de entrada w e uma tabela de anaacutelise com funccedilotildees ACTION e GOTO para uma gramaacutetica G

Saiacuteda Se w estaacute em L(G) os passos os passos de uma reduccedilatildeo de uma anaacutelise ascendente para w

Caso contraacuterio uma indicaccedilatildeo de erro

Meacutetodo Inicialmente o analisador sintaacutetico possui w$ no buffer de entrada e s0 em sua pilha onde s0 representa o estado inicial

O analisador sintaacutetico entatildeo executa o algoritmo

59 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

[PSEUDO] seja a o primeiro siacutembolo de w$ while (1) Seja s o estado no topo da pilha if (ACTION[s a] = shift t) empilha t na pilha seja a o proacuteximo siacutembolo da entrada else if (ACTION[s a] = reduce Ararr β) desempilha siacutembolos |β| da pilha faccedila o estado t agora ser o topo da pilha empilhe GOTO[t A] na pilha imprima a produccedilatildeo Ararr β else if (ACTION[s a] = accept) pare a anaacutelise terminou

else chame uma rotina de recuperaccedilatildeo de erros

60 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR ndash Exemplo

A tabela do proacuteximo slide monstra as funccedilotildees ACTION e GOTO de uma tabela de anaacutelise LR para a gramaacutetica de expressatildeo estudada nesta aula e repetida aqui com produccedilotildees numeradas

Os coacutedigos para as accedilotildees satildeo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

(1) E rarr E + T

(2) E rarr T

(3) T rarr T F

(4) T rarr F

(5) F rarr ( E )

(6) F rarr id

1 Si significa avanccedila na entrada e empilha o estado i na pilha

2 Rj significa reduce segundo a produccedilatildeo de nuacutemero j

3 Acc significa accept

4 Entrada em branco significa error

61 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Estado ACTION

id + ( ) $

0 s5 s4

1 S6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4

5 r6 r6 r6 r6

6 s5 s4

7 s5 s4

8 r6 s11

9 s1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

GOTO

E T F

1 2 3

8 2 3

9 3

10

O valor de GOTO(s a) para o

terminal a estaacute em ACTION da

tabela de anaacutelise conectado agrave

accedilatildeo de transferecircncia sob a

entrada a e o estado s

O GOTO fornece o GOTO[s a]

para os natildeo-terminais A

Ok

Mas como eu consigo os dados

desta tabela

62 Geovane Griesang

A sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

FOLLOW(E) = FOLLOW(Ersquo) = ) $

FOLLOW(T) = FOLLOW(Trsquo) = + ) $

FOLLOW(F) = + ) $

63 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Construindo tabelas de anaacutelise SLR

Esse meacutetodo eacute o mais simples dos LRs Vamos nos referir a tabela de anaacutelise construiacuteda por este meacutetodo como uma tabela SLR e o analisador LR usando uma tabela SLR como um analisador sintaacutetico SLR

O meacutetodo SLR comeccedila com os itens LR(0) e autocircmatos LR(0) ou seja dada uma gramaacutetica G estendemos G para produzir Grsquo com o novo siacutembolo inicial Srsquo A partir de Grsquo construiacutemos C a coleccedilatildeo canocircnica de conj de itens para Grsquo junto com a funccedilatildeo GOTO

Para construir as entradas ACTION e GOTO da tabela de anaacutelise usando o algoritmo a seguir eacute preciso que conheccedilamos FOLLOW(A) para cada natildeo-terminal A de uma gramaacutetica

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 49: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

49 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash O algoritmo de anaacutelise LR

Consiste em uma entrada uma saiacuteda uma pilha o algoritmo de anaacutelise sintaacutetica e uma tabela de anaacutelise construiacuteda de duas partes (ACTION e GOTO)

Algoritmo de

anaacutelise LR

ACTION

an $ ai a1

Sm

Sm-1

$

Saiacuteda

GOTO

Entrada

Pilha

Desta forma cada estado exceto

o estado inicial 0 possui um uacutenico

siacutembolo da gramaacutetica associado a

ele

50 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

A tabela LR consiste em duas partes ACTION uma funccedilatildeo de accedilatildeo de anaacutelise e GOTO uma funccedilatildeo de transiccedilatildeo

1 A funccedilatildeo ACTION recebe como argumentos um estado i e um estado a (ou $) O valor de ACTION(i a) pode ter um dos quatro formatos

a) Shift j onde j eacute um estado

A accedilatildeo tomada pelo analisador sintaacutetico efetivamente transfere a entrada a para a pilha mas usa o estado j para representar a

51 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

b) Reduce Ararr β A accedilatildeo do analisador efetivamente reduz β no topo da pilha para A o lado esquerdo da produccedilatildeo

c) Accept O analisador aceita a entrada e termina a anaacutelise

d) Error O analisador descobre um erro em sua entrada passa o controle p o recuperador de erro que toma alguma accedilatildeo corretiva

2 Estendemos a funccedilatildeo GOTO definida sobre um conjunto de itens para os estados se GOTO(Ii A) = Ij entatildeo GOTO tambeacutem mapeia um estado i e um natildeo-terminal A para o estado j

52 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

Para descrever o comportamento de uma analisador LR eacute recomendaacutevel ter uma notaccedilatildeo representado o estado completo do analisador sua pilha e a entrada restante

Uma configuraccedilatildeo p um analisador LR eacute um par (s0s1sm aiai+1an $) O primeiro componente eacute o conteuacutedo da pilha com o topo agrave direita e o segundo componente representa a entrada restante

Essa configuraccedilatildeo representa a seguinte forma sentencial agrave direita (X0X1Xmaiai+1an) Assim como faria um analisador shift-reduce

53 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

A uacutenica diferenccedila eacute que em inveacutes de siacutembolos da gramaacutetica a pilha conteacutem estados a partir dos quais os siacutembolos da gramaacutetica podem ser recuperados

Ou seja Xi eacute o siacutembolo da gramaacutetica representado pelo estado si

Observe que s0 o estado inicial do analisador sintaacutetico natildeo representa um siacutembolo da gramaacutetica e serve como marcador de fundo da pilha aleacutem de desempenhar um papel importante na anaacutelise

54 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

O proacuteximo movimento do analisador a partir da configuraccedilatildeo dada eacute determinado pela leitura de ai o siacutembolo de entrada corrente e sm o estado do topo da pilha e entatildeo consultando a entrada ACTION[sm ai] na tabela de accedilatildeo de anaacutelise

As configuraccedilotildees restantes apoacutes cada um dos quatro tipos de movimentaccedilatildeo satildeo as seguintes

1 Se ACTION[Sm ai] = shift s o analisador sintaacutetico executa um movimento de transferecircncia (shift move) ele empilha o estado s e avanccedila da entrada resultando na configuraccedilatildeo (s0s1 sm ai+1an $)

55 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2 Se ACTION[Sm ai]=reduce Ararrβ entatildeo o analisador sintaacutetico executa um movimento de reduzir (reduce move) resultando na configuraccedilatildeo (s0s1 sm-rs aiai+1an $)

onde r eacute o comprimento de β e s = GOTO[sm-r A]

Aqui o analisador sintaacutetico incialmente desempilhou os r siacutembolos de estado da pilha expondo o estado sm-r

O analisador sintaacutetico entatildeo empilhou s a entrada para GOTO[sm-r A] na pilha O siacutembolo corrente da entrada natildeo eacute alterado em um movimento de reduzir

56 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2

Para os LR que construiremos Xm-r+1Xm a sequencia de siacutembolos da gramaacutetica correspondendo aos estados retirados da pilha sempre iratildeo casar com β o lado direito da produccedilatildeo sendo reduzida

A saiacuteda de um analisador LR eacute gerada apoacutes um movimento de reduzir executando a accedilatildeo semacircntica associada agrave produccedilatildeo que estaacute sendo reduzida

No momento vamos considerar que a saiacuteda consiste soacute na impressatildeo da produccedilatildeo de reduccedilatildeo

57 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

3 Se ACTION[sm ai] = accept a anaacutelise estaacute concluiacuteda

4 Se ACTION[sm ai] = error o analisador sintaacutetico descobriu um erro e ativa uma rotina para recuperaccedilatildeo de erro

Todos os analisadores sintaacuteticos LR se comportam dessa maneira

A uacutenica diferenccedila entre eles diz respeito a informaccedilatildeo contida nos campos ACTION e GOTO da tabela de anaacutelise

O algoritmo de anaacutelise LR eacute resumido nos proacuteximos slides

58 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

Entrada Uma cadeia de entrada w e uma tabela de anaacutelise com funccedilotildees ACTION e GOTO para uma gramaacutetica G

Saiacuteda Se w estaacute em L(G) os passos os passos de uma reduccedilatildeo de uma anaacutelise ascendente para w

Caso contraacuterio uma indicaccedilatildeo de erro

Meacutetodo Inicialmente o analisador sintaacutetico possui w$ no buffer de entrada e s0 em sua pilha onde s0 representa o estado inicial

O analisador sintaacutetico entatildeo executa o algoritmo

59 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

[PSEUDO] seja a o primeiro siacutembolo de w$ while (1) Seja s o estado no topo da pilha if (ACTION[s a] = shift t) empilha t na pilha seja a o proacuteximo siacutembolo da entrada else if (ACTION[s a] = reduce Ararr β) desempilha siacutembolos |β| da pilha faccedila o estado t agora ser o topo da pilha empilhe GOTO[t A] na pilha imprima a produccedilatildeo Ararr β else if (ACTION[s a] = accept) pare a anaacutelise terminou

else chame uma rotina de recuperaccedilatildeo de erros

60 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR ndash Exemplo

A tabela do proacuteximo slide monstra as funccedilotildees ACTION e GOTO de uma tabela de anaacutelise LR para a gramaacutetica de expressatildeo estudada nesta aula e repetida aqui com produccedilotildees numeradas

Os coacutedigos para as accedilotildees satildeo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

(1) E rarr E + T

(2) E rarr T

(3) T rarr T F

(4) T rarr F

(5) F rarr ( E )

(6) F rarr id

1 Si significa avanccedila na entrada e empilha o estado i na pilha

2 Rj significa reduce segundo a produccedilatildeo de nuacutemero j

3 Acc significa accept

4 Entrada em branco significa error

61 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Estado ACTION

id + ( ) $

0 s5 s4

1 S6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4

5 r6 r6 r6 r6

6 s5 s4

7 s5 s4

8 r6 s11

9 s1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

GOTO

E T F

1 2 3

8 2 3

9 3

10

O valor de GOTO(s a) para o

terminal a estaacute em ACTION da

tabela de anaacutelise conectado agrave

accedilatildeo de transferecircncia sob a

entrada a e o estado s

O GOTO fornece o GOTO[s a]

para os natildeo-terminais A

Ok

Mas como eu consigo os dados

desta tabela

62 Geovane Griesang

A sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

FOLLOW(E) = FOLLOW(Ersquo) = ) $

FOLLOW(T) = FOLLOW(Trsquo) = + ) $

FOLLOW(F) = + ) $

63 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Construindo tabelas de anaacutelise SLR

Esse meacutetodo eacute o mais simples dos LRs Vamos nos referir a tabela de anaacutelise construiacuteda por este meacutetodo como uma tabela SLR e o analisador LR usando uma tabela SLR como um analisador sintaacutetico SLR

O meacutetodo SLR comeccedila com os itens LR(0) e autocircmatos LR(0) ou seja dada uma gramaacutetica G estendemos G para produzir Grsquo com o novo siacutembolo inicial Srsquo A partir de Grsquo construiacutemos C a coleccedilatildeo canocircnica de conj de itens para Grsquo junto com a funccedilatildeo GOTO

Para construir as entradas ACTION e GOTO da tabela de anaacutelise usando o algoritmo a seguir eacute preciso que conheccedilamos FOLLOW(A) para cada natildeo-terminal A de uma gramaacutetica

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 50: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

50 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

A tabela LR consiste em duas partes ACTION uma funccedilatildeo de accedilatildeo de anaacutelise e GOTO uma funccedilatildeo de transiccedilatildeo

1 A funccedilatildeo ACTION recebe como argumentos um estado i e um estado a (ou $) O valor de ACTION(i a) pode ter um dos quatro formatos

a) Shift j onde j eacute um estado

A accedilatildeo tomada pelo analisador sintaacutetico efetivamente transfere a entrada a para a pilha mas usa o estado j para representar a

51 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

b) Reduce Ararr β A accedilatildeo do analisador efetivamente reduz β no topo da pilha para A o lado esquerdo da produccedilatildeo

c) Accept O analisador aceita a entrada e termina a anaacutelise

d) Error O analisador descobre um erro em sua entrada passa o controle p o recuperador de erro que toma alguma accedilatildeo corretiva

2 Estendemos a funccedilatildeo GOTO definida sobre um conjunto de itens para os estados se GOTO(Ii A) = Ij entatildeo GOTO tambeacutem mapeia um estado i e um natildeo-terminal A para o estado j

52 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

Para descrever o comportamento de uma analisador LR eacute recomendaacutevel ter uma notaccedilatildeo representado o estado completo do analisador sua pilha e a entrada restante

Uma configuraccedilatildeo p um analisador LR eacute um par (s0s1sm aiai+1an $) O primeiro componente eacute o conteuacutedo da pilha com o topo agrave direita e o segundo componente representa a entrada restante

Essa configuraccedilatildeo representa a seguinte forma sentencial agrave direita (X0X1Xmaiai+1an) Assim como faria um analisador shift-reduce

53 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

A uacutenica diferenccedila eacute que em inveacutes de siacutembolos da gramaacutetica a pilha conteacutem estados a partir dos quais os siacutembolos da gramaacutetica podem ser recuperados

Ou seja Xi eacute o siacutembolo da gramaacutetica representado pelo estado si

Observe que s0 o estado inicial do analisador sintaacutetico natildeo representa um siacutembolo da gramaacutetica e serve como marcador de fundo da pilha aleacutem de desempenhar um papel importante na anaacutelise

54 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

O proacuteximo movimento do analisador a partir da configuraccedilatildeo dada eacute determinado pela leitura de ai o siacutembolo de entrada corrente e sm o estado do topo da pilha e entatildeo consultando a entrada ACTION[sm ai] na tabela de accedilatildeo de anaacutelise

As configuraccedilotildees restantes apoacutes cada um dos quatro tipos de movimentaccedilatildeo satildeo as seguintes

1 Se ACTION[Sm ai] = shift s o analisador sintaacutetico executa um movimento de transferecircncia (shift move) ele empilha o estado s e avanccedila da entrada resultando na configuraccedilatildeo (s0s1 sm ai+1an $)

55 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2 Se ACTION[Sm ai]=reduce Ararrβ entatildeo o analisador sintaacutetico executa um movimento de reduzir (reduce move) resultando na configuraccedilatildeo (s0s1 sm-rs aiai+1an $)

onde r eacute o comprimento de β e s = GOTO[sm-r A]

Aqui o analisador sintaacutetico incialmente desempilhou os r siacutembolos de estado da pilha expondo o estado sm-r

O analisador sintaacutetico entatildeo empilhou s a entrada para GOTO[sm-r A] na pilha O siacutembolo corrente da entrada natildeo eacute alterado em um movimento de reduzir

56 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2

Para os LR que construiremos Xm-r+1Xm a sequencia de siacutembolos da gramaacutetica correspondendo aos estados retirados da pilha sempre iratildeo casar com β o lado direito da produccedilatildeo sendo reduzida

A saiacuteda de um analisador LR eacute gerada apoacutes um movimento de reduzir executando a accedilatildeo semacircntica associada agrave produccedilatildeo que estaacute sendo reduzida

No momento vamos considerar que a saiacuteda consiste soacute na impressatildeo da produccedilatildeo de reduccedilatildeo

57 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

3 Se ACTION[sm ai] = accept a anaacutelise estaacute concluiacuteda

4 Se ACTION[sm ai] = error o analisador sintaacutetico descobriu um erro e ativa uma rotina para recuperaccedilatildeo de erro

Todos os analisadores sintaacuteticos LR se comportam dessa maneira

A uacutenica diferenccedila entre eles diz respeito a informaccedilatildeo contida nos campos ACTION e GOTO da tabela de anaacutelise

O algoritmo de anaacutelise LR eacute resumido nos proacuteximos slides

58 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

Entrada Uma cadeia de entrada w e uma tabela de anaacutelise com funccedilotildees ACTION e GOTO para uma gramaacutetica G

Saiacuteda Se w estaacute em L(G) os passos os passos de uma reduccedilatildeo de uma anaacutelise ascendente para w

Caso contraacuterio uma indicaccedilatildeo de erro

Meacutetodo Inicialmente o analisador sintaacutetico possui w$ no buffer de entrada e s0 em sua pilha onde s0 representa o estado inicial

O analisador sintaacutetico entatildeo executa o algoritmo

59 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

[PSEUDO] seja a o primeiro siacutembolo de w$ while (1) Seja s o estado no topo da pilha if (ACTION[s a] = shift t) empilha t na pilha seja a o proacuteximo siacutembolo da entrada else if (ACTION[s a] = reduce Ararr β) desempilha siacutembolos |β| da pilha faccedila o estado t agora ser o topo da pilha empilhe GOTO[t A] na pilha imprima a produccedilatildeo Ararr β else if (ACTION[s a] = accept) pare a anaacutelise terminou

else chame uma rotina de recuperaccedilatildeo de erros

60 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR ndash Exemplo

A tabela do proacuteximo slide monstra as funccedilotildees ACTION e GOTO de uma tabela de anaacutelise LR para a gramaacutetica de expressatildeo estudada nesta aula e repetida aqui com produccedilotildees numeradas

Os coacutedigos para as accedilotildees satildeo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

(1) E rarr E + T

(2) E rarr T

(3) T rarr T F

(4) T rarr F

(5) F rarr ( E )

(6) F rarr id

1 Si significa avanccedila na entrada e empilha o estado i na pilha

2 Rj significa reduce segundo a produccedilatildeo de nuacutemero j

3 Acc significa accept

4 Entrada em branco significa error

61 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Estado ACTION

id + ( ) $

0 s5 s4

1 S6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4

5 r6 r6 r6 r6

6 s5 s4

7 s5 s4

8 r6 s11

9 s1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

GOTO

E T F

1 2 3

8 2 3

9 3

10

O valor de GOTO(s a) para o

terminal a estaacute em ACTION da

tabela de anaacutelise conectado agrave

accedilatildeo de transferecircncia sob a

entrada a e o estado s

O GOTO fornece o GOTO[s a]

para os natildeo-terminais A

Ok

Mas como eu consigo os dados

desta tabela

62 Geovane Griesang

A sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

FOLLOW(E) = FOLLOW(Ersquo) = ) $

FOLLOW(T) = FOLLOW(Trsquo) = + ) $

FOLLOW(F) = + ) $

63 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Construindo tabelas de anaacutelise SLR

Esse meacutetodo eacute o mais simples dos LRs Vamos nos referir a tabela de anaacutelise construiacuteda por este meacutetodo como uma tabela SLR e o analisador LR usando uma tabela SLR como um analisador sintaacutetico SLR

O meacutetodo SLR comeccedila com os itens LR(0) e autocircmatos LR(0) ou seja dada uma gramaacutetica G estendemos G para produzir Grsquo com o novo siacutembolo inicial Srsquo A partir de Grsquo construiacutemos C a coleccedilatildeo canocircnica de conj de itens para Grsquo junto com a funccedilatildeo GOTO

Para construir as entradas ACTION e GOTO da tabela de anaacutelise usando o algoritmo a seguir eacute preciso que conheccedilamos FOLLOW(A) para cada natildeo-terminal A de uma gramaacutetica

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 51: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

51 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Estrutura da tabela LR

b) Reduce Ararr β A accedilatildeo do analisador efetivamente reduz β no topo da pilha para A o lado esquerdo da produccedilatildeo

c) Accept O analisador aceita a entrada e termina a anaacutelise

d) Error O analisador descobre um erro em sua entrada passa o controle p o recuperador de erro que toma alguma accedilatildeo corretiva

2 Estendemos a funccedilatildeo GOTO definida sobre um conjunto de itens para os estados se GOTO(Ii A) = Ij entatildeo GOTO tambeacutem mapeia um estado i e um natildeo-terminal A para o estado j

52 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

Para descrever o comportamento de uma analisador LR eacute recomendaacutevel ter uma notaccedilatildeo representado o estado completo do analisador sua pilha e a entrada restante

Uma configuraccedilatildeo p um analisador LR eacute um par (s0s1sm aiai+1an $) O primeiro componente eacute o conteuacutedo da pilha com o topo agrave direita e o segundo componente representa a entrada restante

Essa configuraccedilatildeo representa a seguinte forma sentencial agrave direita (X0X1Xmaiai+1an) Assim como faria um analisador shift-reduce

53 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

A uacutenica diferenccedila eacute que em inveacutes de siacutembolos da gramaacutetica a pilha conteacutem estados a partir dos quais os siacutembolos da gramaacutetica podem ser recuperados

Ou seja Xi eacute o siacutembolo da gramaacutetica representado pelo estado si

Observe que s0 o estado inicial do analisador sintaacutetico natildeo representa um siacutembolo da gramaacutetica e serve como marcador de fundo da pilha aleacutem de desempenhar um papel importante na anaacutelise

54 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

O proacuteximo movimento do analisador a partir da configuraccedilatildeo dada eacute determinado pela leitura de ai o siacutembolo de entrada corrente e sm o estado do topo da pilha e entatildeo consultando a entrada ACTION[sm ai] na tabela de accedilatildeo de anaacutelise

As configuraccedilotildees restantes apoacutes cada um dos quatro tipos de movimentaccedilatildeo satildeo as seguintes

1 Se ACTION[Sm ai] = shift s o analisador sintaacutetico executa um movimento de transferecircncia (shift move) ele empilha o estado s e avanccedila da entrada resultando na configuraccedilatildeo (s0s1 sm ai+1an $)

55 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2 Se ACTION[Sm ai]=reduce Ararrβ entatildeo o analisador sintaacutetico executa um movimento de reduzir (reduce move) resultando na configuraccedilatildeo (s0s1 sm-rs aiai+1an $)

onde r eacute o comprimento de β e s = GOTO[sm-r A]

Aqui o analisador sintaacutetico incialmente desempilhou os r siacutembolos de estado da pilha expondo o estado sm-r

O analisador sintaacutetico entatildeo empilhou s a entrada para GOTO[sm-r A] na pilha O siacutembolo corrente da entrada natildeo eacute alterado em um movimento de reduzir

56 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2

Para os LR que construiremos Xm-r+1Xm a sequencia de siacutembolos da gramaacutetica correspondendo aos estados retirados da pilha sempre iratildeo casar com β o lado direito da produccedilatildeo sendo reduzida

A saiacuteda de um analisador LR eacute gerada apoacutes um movimento de reduzir executando a accedilatildeo semacircntica associada agrave produccedilatildeo que estaacute sendo reduzida

No momento vamos considerar que a saiacuteda consiste soacute na impressatildeo da produccedilatildeo de reduccedilatildeo

57 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

3 Se ACTION[sm ai] = accept a anaacutelise estaacute concluiacuteda

4 Se ACTION[sm ai] = error o analisador sintaacutetico descobriu um erro e ativa uma rotina para recuperaccedilatildeo de erro

Todos os analisadores sintaacuteticos LR se comportam dessa maneira

A uacutenica diferenccedila entre eles diz respeito a informaccedilatildeo contida nos campos ACTION e GOTO da tabela de anaacutelise

O algoritmo de anaacutelise LR eacute resumido nos proacuteximos slides

58 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

Entrada Uma cadeia de entrada w e uma tabela de anaacutelise com funccedilotildees ACTION e GOTO para uma gramaacutetica G

Saiacuteda Se w estaacute em L(G) os passos os passos de uma reduccedilatildeo de uma anaacutelise ascendente para w

Caso contraacuterio uma indicaccedilatildeo de erro

Meacutetodo Inicialmente o analisador sintaacutetico possui w$ no buffer de entrada e s0 em sua pilha onde s0 representa o estado inicial

O analisador sintaacutetico entatildeo executa o algoritmo

59 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

[PSEUDO] seja a o primeiro siacutembolo de w$ while (1) Seja s o estado no topo da pilha if (ACTION[s a] = shift t) empilha t na pilha seja a o proacuteximo siacutembolo da entrada else if (ACTION[s a] = reduce Ararr β) desempilha siacutembolos |β| da pilha faccedila o estado t agora ser o topo da pilha empilhe GOTO[t A] na pilha imprima a produccedilatildeo Ararr β else if (ACTION[s a] = accept) pare a anaacutelise terminou

else chame uma rotina de recuperaccedilatildeo de erros

60 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR ndash Exemplo

A tabela do proacuteximo slide monstra as funccedilotildees ACTION e GOTO de uma tabela de anaacutelise LR para a gramaacutetica de expressatildeo estudada nesta aula e repetida aqui com produccedilotildees numeradas

Os coacutedigos para as accedilotildees satildeo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

(1) E rarr E + T

(2) E rarr T

(3) T rarr T F

(4) T rarr F

(5) F rarr ( E )

(6) F rarr id

1 Si significa avanccedila na entrada e empilha o estado i na pilha

2 Rj significa reduce segundo a produccedilatildeo de nuacutemero j

3 Acc significa accept

4 Entrada em branco significa error

61 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Estado ACTION

id + ( ) $

0 s5 s4

1 S6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4

5 r6 r6 r6 r6

6 s5 s4

7 s5 s4

8 r6 s11

9 s1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

GOTO

E T F

1 2 3

8 2 3

9 3

10

O valor de GOTO(s a) para o

terminal a estaacute em ACTION da

tabela de anaacutelise conectado agrave

accedilatildeo de transferecircncia sob a

entrada a e o estado s

O GOTO fornece o GOTO[s a]

para os natildeo-terminais A

Ok

Mas como eu consigo os dados

desta tabela

62 Geovane Griesang

A sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

FOLLOW(E) = FOLLOW(Ersquo) = ) $

FOLLOW(T) = FOLLOW(Trsquo) = + ) $

FOLLOW(F) = + ) $

63 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Construindo tabelas de anaacutelise SLR

Esse meacutetodo eacute o mais simples dos LRs Vamos nos referir a tabela de anaacutelise construiacuteda por este meacutetodo como uma tabela SLR e o analisador LR usando uma tabela SLR como um analisador sintaacutetico SLR

O meacutetodo SLR comeccedila com os itens LR(0) e autocircmatos LR(0) ou seja dada uma gramaacutetica G estendemos G para produzir Grsquo com o novo siacutembolo inicial Srsquo A partir de Grsquo construiacutemos C a coleccedilatildeo canocircnica de conj de itens para Grsquo junto com a funccedilatildeo GOTO

Para construir as entradas ACTION e GOTO da tabela de anaacutelise usando o algoritmo a seguir eacute preciso que conheccedilamos FOLLOW(A) para cada natildeo-terminal A de uma gramaacutetica

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 52: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

52 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

Para descrever o comportamento de uma analisador LR eacute recomendaacutevel ter uma notaccedilatildeo representado o estado completo do analisador sua pilha e a entrada restante

Uma configuraccedilatildeo p um analisador LR eacute um par (s0s1sm aiai+1an $) O primeiro componente eacute o conteuacutedo da pilha com o topo agrave direita e o segundo componente representa a entrada restante

Essa configuraccedilatildeo representa a seguinte forma sentencial agrave direita (X0X1Xmaiai+1an) Assim como faria um analisador shift-reduce

53 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

A uacutenica diferenccedila eacute que em inveacutes de siacutembolos da gramaacutetica a pilha conteacutem estados a partir dos quais os siacutembolos da gramaacutetica podem ser recuperados

Ou seja Xi eacute o siacutembolo da gramaacutetica representado pelo estado si

Observe que s0 o estado inicial do analisador sintaacutetico natildeo representa um siacutembolo da gramaacutetica e serve como marcador de fundo da pilha aleacutem de desempenhar um papel importante na anaacutelise

54 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

O proacuteximo movimento do analisador a partir da configuraccedilatildeo dada eacute determinado pela leitura de ai o siacutembolo de entrada corrente e sm o estado do topo da pilha e entatildeo consultando a entrada ACTION[sm ai] na tabela de accedilatildeo de anaacutelise

As configuraccedilotildees restantes apoacutes cada um dos quatro tipos de movimentaccedilatildeo satildeo as seguintes

1 Se ACTION[Sm ai] = shift s o analisador sintaacutetico executa um movimento de transferecircncia (shift move) ele empilha o estado s e avanccedila da entrada resultando na configuraccedilatildeo (s0s1 sm ai+1an $)

55 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2 Se ACTION[Sm ai]=reduce Ararrβ entatildeo o analisador sintaacutetico executa um movimento de reduzir (reduce move) resultando na configuraccedilatildeo (s0s1 sm-rs aiai+1an $)

onde r eacute o comprimento de β e s = GOTO[sm-r A]

Aqui o analisador sintaacutetico incialmente desempilhou os r siacutembolos de estado da pilha expondo o estado sm-r

O analisador sintaacutetico entatildeo empilhou s a entrada para GOTO[sm-r A] na pilha O siacutembolo corrente da entrada natildeo eacute alterado em um movimento de reduzir

56 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2

Para os LR que construiremos Xm-r+1Xm a sequencia de siacutembolos da gramaacutetica correspondendo aos estados retirados da pilha sempre iratildeo casar com β o lado direito da produccedilatildeo sendo reduzida

A saiacuteda de um analisador LR eacute gerada apoacutes um movimento de reduzir executando a accedilatildeo semacircntica associada agrave produccedilatildeo que estaacute sendo reduzida

No momento vamos considerar que a saiacuteda consiste soacute na impressatildeo da produccedilatildeo de reduccedilatildeo

57 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

3 Se ACTION[sm ai] = accept a anaacutelise estaacute concluiacuteda

4 Se ACTION[sm ai] = error o analisador sintaacutetico descobriu um erro e ativa uma rotina para recuperaccedilatildeo de erro

Todos os analisadores sintaacuteticos LR se comportam dessa maneira

A uacutenica diferenccedila entre eles diz respeito a informaccedilatildeo contida nos campos ACTION e GOTO da tabela de anaacutelise

O algoritmo de anaacutelise LR eacute resumido nos proacuteximos slides

58 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

Entrada Uma cadeia de entrada w e uma tabela de anaacutelise com funccedilotildees ACTION e GOTO para uma gramaacutetica G

Saiacuteda Se w estaacute em L(G) os passos os passos de uma reduccedilatildeo de uma anaacutelise ascendente para w

Caso contraacuterio uma indicaccedilatildeo de erro

Meacutetodo Inicialmente o analisador sintaacutetico possui w$ no buffer de entrada e s0 em sua pilha onde s0 representa o estado inicial

O analisador sintaacutetico entatildeo executa o algoritmo

59 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

[PSEUDO] seja a o primeiro siacutembolo de w$ while (1) Seja s o estado no topo da pilha if (ACTION[s a] = shift t) empilha t na pilha seja a o proacuteximo siacutembolo da entrada else if (ACTION[s a] = reduce Ararr β) desempilha siacutembolos |β| da pilha faccedila o estado t agora ser o topo da pilha empilhe GOTO[t A] na pilha imprima a produccedilatildeo Ararr β else if (ACTION[s a] = accept) pare a anaacutelise terminou

else chame uma rotina de recuperaccedilatildeo de erros

60 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR ndash Exemplo

A tabela do proacuteximo slide monstra as funccedilotildees ACTION e GOTO de uma tabela de anaacutelise LR para a gramaacutetica de expressatildeo estudada nesta aula e repetida aqui com produccedilotildees numeradas

Os coacutedigos para as accedilotildees satildeo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

(1) E rarr E + T

(2) E rarr T

(3) T rarr T F

(4) T rarr F

(5) F rarr ( E )

(6) F rarr id

1 Si significa avanccedila na entrada e empilha o estado i na pilha

2 Rj significa reduce segundo a produccedilatildeo de nuacutemero j

3 Acc significa accept

4 Entrada em branco significa error

61 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Estado ACTION

id + ( ) $

0 s5 s4

1 S6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4

5 r6 r6 r6 r6

6 s5 s4

7 s5 s4

8 r6 s11

9 s1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

GOTO

E T F

1 2 3

8 2 3

9 3

10

O valor de GOTO(s a) para o

terminal a estaacute em ACTION da

tabela de anaacutelise conectado agrave

accedilatildeo de transferecircncia sob a

entrada a e o estado s

O GOTO fornece o GOTO[s a]

para os natildeo-terminais A

Ok

Mas como eu consigo os dados

desta tabela

62 Geovane Griesang

A sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

FOLLOW(E) = FOLLOW(Ersquo) = ) $

FOLLOW(T) = FOLLOW(Trsquo) = + ) $

FOLLOW(F) = + ) $

63 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Construindo tabelas de anaacutelise SLR

Esse meacutetodo eacute o mais simples dos LRs Vamos nos referir a tabela de anaacutelise construiacuteda por este meacutetodo como uma tabela SLR e o analisador LR usando uma tabela SLR como um analisador sintaacutetico SLR

O meacutetodo SLR comeccedila com os itens LR(0) e autocircmatos LR(0) ou seja dada uma gramaacutetica G estendemos G para produzir Grsquo com o novo siacutembolo inicial Srsquo A partir de Grsquo construiacutemos C a coleccedilatildeo canocircnica de conj de itens para Grsquo junto com a funccedilatildeo GOTO

Para construir as entradas ACTION e GOTO da tabela de anaacutelise usando o algoritmo a seguir eacute preciso que conheccedilamos FOLLOW(A) para cada natildeo-terminal A de uma gramaacutetica

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 53: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

53 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Configuraccedilatildeo do analisador LR

A uacutenica diferenccedila eacute que em inveacutes de siacutembolos da gramaacutetica a pilha conteacutem estados a partir dos quais os siacutembolos da gramaacutetica podem ser recuperados

Ou seja Xi eacute o siacutembolo da gramaacutetica representado pelo estado si

Observe que s0 o estado inicial do analisador sintaacutetico natildeo representa um siacutembolo da gramaacutetica e serve como marcador de fundo da pilha aleacutem de desempenhar um papel importante na anaacutelise

54 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

O proacuteximo movimento do analisador a partir da configuraccedilatildeo dada eacute determinado pela leitura de ai o siacutembolo de entrada corrente e sm o estado do topo da pilha e entatildeo consultando a entrada ACTION[sm ai] na tabela de accedilatildeo de anaacutelise

As configuraccedilotildees restantes apoacutes cada um dos quatro tipos de movimentaccedilatildeo satildeo as seguintes

1 Se ACTION[Sm ai] = shift s o analisador sintaacutetico executa um movimento de transferecircncia (shift move) ele empilha o estado s e avanccedila da entrada resultando na configuraccedilatildeo (s0s1 sm ai+1an $)

55 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2 Se ACTION[Sm ai]=reduce Ararrβ entatildeo o analisador sintaacutetico executa um movimento de reduzir (reduce move) resultando na configuraccedilatildeo (s0s1 sm-rs aiai+1an $)

onde r eacute o comprimento de β e s = GOTO[sm-r A]

Aqui o analisador sintaacutetico incialmente desempilhou os r siacutembolos de estado da pilha expondo o estado sm-r

O analisador sintaacutetico entatildeo empilhou s a entrada para GOTO[sm-r A] na pilha O siacutembolo corrente da entrada natildeo eacute alterado em um movimento de reduzir

56 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2

Para os LR que construiremos Xm-r+1Xm a sequencia de siacutembolos da gramaacutetica correspondendo aos estados retirados da pilha sempre iratildeo casar com β o lado direito da produccedilatildeo sendo reduzida

A saiacuteda de um analisador LR eacute gerada apoacutes um movimento de reduzir executando a accedilatildeo semacircntica associada agrave produccedilatildeo que estaacute sendo reduzida

No momento vamos considerar que a saiacuteda consiste soacute na impressatildeo da produccedilatildeo de reduccedilatildeo

57 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

3 Se ACTION[sm ai] = accept a anaacutelise estaacute concluiacuteda

4 Se ACTION[sm ai] = error o analisador sintaacutetico descobriu um erro e ativa uma rotina para recuperaccedilatildeo de erro

Todos os analisadores sintaacuteticos LR se comportam dessa maneira

A uacutenica diferenccedila entre eles diz respeito a informaccedilatildeo contida nos campos ACTION e GOTO da tabela de anaacutelise

O algoritmo de anaacutelise LR eacute resumido nos proacuteximos slides

58 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

Entrada Uma cadeia de entrada w e uma tabela de anaacutelise com funccedilotildees ACTION e GOTO para uma gramaacutetica G

Saiacuteda Se w estaacute em L(G) os passos os passos de uma reduccedilatildeo de uma anaacutelise ascendente para w

Caso contraacuterio uma indicaccedilatildeo de erro

Meacutetodo Inicialmente o analisador sintaacutetico possui w$ no buffer de entrada e s0 em sua pilha onde s0 representa o estado inicial

O analisador sintaacutetico entatildeo executa o algoritmo

59 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

[PSEUDO] seja a o primeiro siacutembolo de w$ while (1) Seja s o estado no topo da pilha if (ACTION[s a] = shift t) empilha t na pilha seja a o proacuteximo siacutembolo da entrada else if (ACTION[s a] = reduce Ararr β) desempilha siacutembolos |β| da pilha faccedila o estado t agora ser o topo da pilha empilhe GOTO[t A] na pilha imprima a produccedilatildeo Ararr β else if (ACTION[s a] = accept) pare a anaacutelise terminou

else chame uma rotina de recuperaccedilatildeo de erros

60 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR ndash Exemplo

A tabela do proacuteximo slide monstra as funccedilotildees ACTION e GOTO de uma tabela de anaacutelise LR para a gramaacutetica de expressatildeo estudada nesta aula e repetida aqui com produccedilotildees numeradas

Os coacutedigos para as accedilotildees satildeo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

(1) E rarr E + T

(2) E rarr T

(3) T rarr T F

(4) T rarr F

(5) F rarr ( E )

(6) F rarr id

1 Si significa avanccedila na entrada e empilha o estado i na pilha

2 Rj significa reduce segundo a produccedilatildeo de nuacutemero j

3 Acc significa accept

4 Entrada em branco significa error

61 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Estado ACTION

id + ( ) $

0 s5 s4

1 S6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4

5 r6 r6 r6 r6

6 s5 s4

7 s5 s4

8 r6 s11

9 s1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

GOTO

E T F

1 2 3

8 2 3

9 3

10

O valor de GOTO(s a) para o

terminal a estaacute em ACTION da

tabela de anaacutelise conectado agrave

accedilatildeo de transferecircncia sob a

entrada a e o estado s

O GOTO fornece o GOTO[s a]

para os natildeo-terminais A

Ok

Mas como eu consigo os dados

desta tabela

62 Geovane Griesang

A sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

FOLLOW(E) = FOLLOW(Ersquo) = ) $

FOLLOW(T) = FOLLOW(Trsquo) = + ) $

FOLLOW(F) = + ) $

63 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Construindo tabelas de anaacutelise SLR

Esse meacutetodo eacute o mais simples dos LRs Vamos nos referir a tabela de anaacutelise construiacuteda por este meacutetodo como uma tabela SLR e o analisador LR usando uma tabela SLR como um analisador sintaacutetico SLR

O meacutetodo SLR comeccedila com os itens LR(0) e autocircmatos LR(0) ou seja dada uma gramaacutetica G estendemos G para produzir Grsquo com o novo siacutembolo inicial Srsquo A partir de Grsquo construiacutemos C a coleccedilatildeo canocircnica de conj de itens para Grsquo junto com a funccedilatildeo GOTO

Para construir as entradas ACTION e GOTO da tabela de anaacutelise usando o algoritmo a seguir eacute preciso que conheccedilamos FOLLOW(A) para cada natildeo-terminal A de uma gramaacutetica

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 54: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

54 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

O proacuteximo movimento do analisador a partir da configuraccedilatildeo dada eacute determinado pela leitura de ai o siacutembolo de entrada corrente e sm o estado do topo da pilha e entatildeo consultando a entrada ACTION[sm ai] na tabela de accedilatildeo de anaacutelise

As configuraccedilotildees restantes apoacutes cada um dos quatro tipos de movimentaccedilatildeo satildeo as seguintes

1 Se ACTION[Sm ai] = shift s o analisador sintaacutetico executa um movimento de transferecircncia (shift move) ele empilha o estado s e avanccedila da entrada resultando na configuraccedilatildeo (s0s1 sm ai+1an $)

55 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2 Se ACTION[Sm ai]=reduce Ararrβ entatildeo o analisador sintaacutetico executa um movimento de reduzir (reduce move) resultando na configuraccedilatildeo (s0s1 sm-rs aiai+1an $)

onde r eacute o comprimento de β e s = GOTO[sm-r A]

Aqui o analisador sintaacutetico incialmente desempilhou os r siacutembolos de estado da pilha expondo o estado sm-r

O analisador sintaacutetico entatildeo empilhou s a entrada para GOTO[sm-r A] na pilha O siacutembolo corrente da entrada natildeo eacute alterado em um movimento de reduzir

56 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2

Para os LR que construiremos Xm-r+1Xm a sequencia de siacutembolos da gramaacutetica correspondendo aos estados retirados da pilha sempre iratildeo casar com β o lado direito da produccedilatildeo sendo reduzida

A saiacuteda de um analisador LR eacute gerada apoacutes um movimento de reduzir executando a accedilatildeo semacircntica associada agrave produccedilatildeo que estaacute sendo reduzida

No momento vamos considerar que a saiacuteda consiste soacute na impressatildeo da produccedilatildeo de reduccedilatildeo

57 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

3 Se ACTION[sm ai] = accept a anaacutelise estaacute concluiacuteda

4 Se ACTION[sm ai] = error o analisador sintaacutetico descobriu um erro e ativa uma rotina para recuperaccedilatildeo de erro

Todos os analisadores sintaacuteticos LR se comportam dessa maneira

A uacutenica diferenccedila entre eles diz respeito a informaccedilatildeo contida nos campos ACTION e GOTO da tabela de anaacutelise

O algoritmo de anaacutelise LR eacute resumido nos proacuteximos slides

58 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

Entrada Uma cadeia de entrada w e uma tabela de anaacutelise com funccedilotildees ACTION e GOTO para uma gramaacutetica G

Saiacuteda Se w estaacute em L(G) os passos os passos de uma reduccedilatildeo de uma anaacutelise ascendente para w

Caso contraacuterio uma indicaccedilatildeo de erro

Meacutetodo Inicialmente o analisador sintaacutetico possui w$ no buffer de entrada e s0 em sua pilha onde s0 representa o estado inicial

O analisador sintaacutetico entatildeo executa o algoritmo

59 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

[PSEUDO] seja a o primeiro siacutembolo de w$ while (1) Seja s o estado no topo da pilha if (ACTION[s a] = shift t) empilha t na pilha seja a o proacuteximo siacutembolo da entrada else if (ACTION[s a] = reduce Ararr β) desempilha siacutembolos |β| da pilha faccedila o estado t agora ser o topo da pilha empilhe GOTO[t A] na pilha imprima a produccedilatildeo Ararr β else if (ACTION[s a] = accept) pare a anaacutelise terminou

else chame uma rotina de recuperaccedilatildeo de erros

60 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR ndash Exemplo

A tabela do proacuteximo slide monstra as funccedilotildees ACTION e GOTO de uma tabela de anaacutelise LR para a gramaacutetica de expressatildeo estudada nesta aula e repetida aqui com produccedilotildees numeradas

Os coacutedigos para as accedilotildees satildeo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

(1) E rarr E + T

(2) E rarr T

(3) T rarr T F

(4) T rarr F

(5) F rarr ( E )

(6) F rarr id

1 Si significa avanccedila na entrada e empilha o estado i na pilha

2 Rj significa reduce segundo a produccedilatildeo de nuacutemero j

3 Acc significa accept

4 Entrada em branco significa error

61 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Estado ACTION

id + ( ) $

0 s5 s4

1 S6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4

5 r6 r6 r6 r6

6 s5 s4

7 s5 s4

8 r6 s11

9 s1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

GOTO

E T F

1 2 3

8 2 3

9 3

10

O valor de GOTO(s a) para o

terminal a estaacute em ACTION da

tabela de anaacutelise conectado agrave

accedilatildeo de transferecircncia sob a

entrada a e o estado s

O GOTO fornece o GOTO[s a]

para os natildeo-terminais A

Ok

Mas como eu consigo os dados

desta tabela

62 Geovane Griesang

A sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

FOLLOW(E) = FOLLOW(Ersquo) = ) $

FOLLOW(T) = FOLLOW(Trsquo) = + ) $

FOLLOW(F) = + ) $

63 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Construindo tabelas de anaacutelise SLR

Esse meacutetodo eacute o mais simples dos LRs Vamos nos referir a tabela de anaacutelise construiacuteda por este meacutetodo como uma tabela SLR e o analisador LR usando uma tabela SLR como um analisador sintaacutetico SLR

O meacutetodo SLR comeccedila com os itens LR(0) e autocircmatos LR(0) ou seja dada uma gramaacutetica G estendemos G para produzir Grsquo com o novo siacutembolo inicial Srsquo A partir de Grsquo construiacutemos C a coleccedilatildeo canocircnica de conj de itens para Grsquo junto com a funccedilatildeo GOTO

Para construir as entradas ACTION e GOTO da tabela de anaacutelise usando o algoritmo a seguir eacute preciso que conheccedilamos FOLLOW(A) para cada natildeo-terminal A de uma gramaacutetica

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 55: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

55 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2 Se ACTION[Sm ai]=reduce Ararrβ entatildeo o analisador sintaacutetico executa um movimento de reduzir (reduce move) resultando na configuraccedilatildeo (s0s1 sm-rs aiai+1an $)

onde r eacute o comprimento de β e s = GOTO[sm-r A]

Aqui o analisador sintaacutetico incialmente desempilhou os r siacutembolos de estado da pilha expondo o estado sm-r

O analisador sintaacutetico entatildeo empilhou s a entrada para GOTO[sm-r A] na pilha O siacutembolo corrente da entrada natildeo eacute alterado em um movimento de reduzir

56 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2

Para os LR que construiremos Xm-r+1Xm a sequencia de siacutembolos da gramaacutetica correspondendo aos estados retirados da pilha sempre iratildeo casar com β o lado direito da produccedilatildeo sendo reduzida

A saiacuteda de um analisador LR eacute gerada apoacutes um movimento de reduzir executando a accedilatildeo semacircntica associada agrave produccedilatildeo que estaacute sendo reduzida

No momento vamos considerar que a saiacuteda consiste soacute na impressatildeo da produccedilatildeo de reduccedilatildeo

57 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

3 Se ACTION[sm ai] = accept a anaacutelise estaacute concluiacuteda

4 Se ACTION[sm ai] = error o analisador sintaacutetico descobriu um erro e ativa uma rotina para recuperaccedilatildeo de erro

Todos os analisadores sintaacuteticos LR se comportam dessa maneira

A uacutenica diferenccedila entre eles diz respeito a informaccedilatildeo contida nos campos ACTION e GOTO da tabela de anaacutelise

O algoritmo de anaacutelise LR eacute resumido nos proacuteximos slides

58 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

Entrada Uma cadeia de entrada w e uma tabela de anaacutelise com funccedilotildees ACTION e GOTO para uma gramaacutetica G

Saiacuteda Se w estaacute em L(G) os passos os passos de uma reduccedilatildeo de uma anaacutelise ascendente para w

Caso contraacuterio uma indicaccedilatildeo de erro

Meacutetodo Inicialmente o analisador sintaacutetico possui w$ no buffer de entrada e s0 em sua pilha onde s0 representa o estado inicial

O analisador sintaacutetico entatildeo executa o algoritmo

59 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

[PSEUDO] seja a o primeiro siacutembolo de w$ while (1) Seja s o estado no topo da pilha if (ACTION[s a] = shift t) empilha t na pilha seja a o proacuteximo siacutembolo da entrada else if (ACTION[s a] = reduce Ararr β) desempilha siacutembolos |β| da pilha faccedila o estado t agora ser o topo da pilha empilhe GOTO[t A] na pilha imprima a produccedilatildeo Ararr β else if (ACTION[s a] = accept) pare a anaacutelise terminou

else chame uma rotina de recuperaccedilatildeo de erros

60 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR ndash Exemplo

A tabela do proacuteximo slide monstra as funccedilotildees ACTION e GOTO de uma tabela de anaacutelise LR para a gramaacutetica de expressatildeo estudada nesta aula e repetida aqui com produccedilotildees numeradas

Os coacutedigos para as accedilotildees satildeo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

(1) E rarr E + T

(2) E rarr T

(3) T rarr T F

(4) T rarr F

(5) F rarr ( E )

(6) F rarr id

1 Si significa avanccedila na entrada e empilha o estado i na pilha

2 Rj significa reduce segundo a produccedilatildeo de nuacutemero j

3 Acc significa accept

4 Entrada em branco significa error

61 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Estado ACTION

id + ( ) $

0 s5 s4

1 S6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4

5 r6 r6 r6 r6

6 s5 s4

7 s5 s4

8 r6 s11

9 s1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

GOTO

E T F

1 2 3

8 2 3

9 3

10

O valor de GOTO(s a) para o

terminal a estaacute em ACTION da

tabela de anaacutelise conectado agrave

accedilatildeo de transferecircncia sob a

entrada a e o estado s

O GOTO fornece o GOTO[s a]

para os natildeo-terminais A

Ok

Mas como eu consigo os dados

desta tabela

62 Geovane Griesang

A sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

FOLLOW(E) = FOLLOW(Ersquo) = ) $

FOLLOW(T) = FOLLOW(Trsquo) = + ) $

FOLLOW(F) = + ) $

63 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Construindo tabelas de anaacutelise SLR

Esse meacutetodo eacute o mais simples dos LRs Vamos nos referir a tabela de anaacutelise construiacuteda por este meacutetodo como uma tabela SLR e o analisador LR usando uma tabela SLR como um analisador sintaacutetico SLR

O meacutetodo SLR comeccedila com os itens LR(0) e autocircmatos LR(0) ou seja dada uma gramaacutetica G estendemos G para produzir Grsquo com o novo siacutembolo inicial Srsquo A partir de Grsquo construiacutemos C a coleccedilatildeo canocircnica de conj de itens para Grsquo junto com a funccedilatildeo GOTO

Para construir as entradas ACTION e GOTO da tabela de anaacutelise usando o algoritmo a seguir eacute preciso que conheccedilamos FOLLOW(A) para cada natildeo-terminal A de uma gramaacutetica

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 56: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

56 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

2

Para os LR que construiremos Xm-r+1Xm a sequencia de siacutembolos da gramaacutetica correspondendo aos estados retirados da pilha sempre iratildeo casar com β o lado direito da produccedilatildeo sendo reduzida

A saiacuteda de um analisador LR eacute gerada apoacutes um movimento de reduzir executando a accedilatildeo semacircntica associada agrave produccedilatildeo que estaacute sendo reduzida

No momento vamos considerar que a saiacuteda consiste soacute na impressatildeo da produccedilatildeo de reduccedilatildeo

57 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

3 Se ACTION[sm ai] = accept a anaacutelise estaacute concluiacuteda

4 Se ACTION[sm ai] = error o analisador sintaacutetico descobriu um erro e ativa uma rotina para recuperaccedilatildeo de erro

Todos os analisadores sintaacuteticos LR se comportam dessa maneira

A uacutenica diferenccedila entre eles diz respeito a informaccedilatildeo contida nos campos ACTION e GOTO da tabela de anaacutelise

O algoritmo de anaacutelise LR eacute resumido nos proacuteximos slides

58 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

Entrada Uma cadeia de entrada w e uma tabela de anaacutelise com funccedilotildees ACTION e GOTO para uma gramaacutetica G

Saiacuteda Se w estaacute em L(G) os passos os passos de uma reduccedilatildeo de uma anaacutelise ascendente para w

Caso contraacuterio uma indicaccedilatildeo de erro

Meacutetodo Inicialmente o analisador sintaacutetico possui w$ no buffer de entrada e s0 em sua pilha onde s0 representa o estado inicial

O analisador sintaacutetico entatildeo executa o algoritmo

59 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

[PSEUDO] seja a o primeiro siacutembolo de w$ while (1) Seja s o estado no topo da pilha if (ACTION[s a] = shift t) empilha t na pilha seja a o proacuteximo siacutembolo da entrada else if (ACTION[s a] = reduce Ararr β) desempilha siacutembolos |β| da pilha faccedila o estado t agora ser o topo da pilha empilhe GOTO[t A] na pilha imprima a produccedilatildeo Ararr β else if (ACTION[s a] = accept) pare a anaacutelise terminou

else chame uma rotina de recuperaccedilatildeo de erros

60 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR ndash Exemplo

A tabela do proacuteximo slide monstra as funccedilotildees ACTION e GOTO de uma tabela de anaacutelise LR para a gramaacutetica de expressatildeo estudada nesta aula e repetida aqui com produccedilotildees numeradas

Os coacutedigos para as accedilotildees satildeo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

(1) E rarr E + T

(2) E rarr T

(3) T rarr T F

(4) T rarr F

(5) F rarr ( E )

(6) F rarr id

1 Si significa avanccedila na entrada e empilha o estado i na pilha

2 Rj significa reduce segundo a produccedilatildeo de nuacutemero j

3 Acc significa accept

4 Entrada em branco significa error

61 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Estado ACTION

id + ( ) $

0 s5 s4

1 S6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4

5 r6 r6 r6 r6

6 s5 s4

7 s5 s4

8 r6 s11

9 s1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

GOTO

E T F

1 2 3

8 2 3

9 3

10

O valor de GOTO(s a) para o

terminal a estaacute em ACTION da

tabela de anaacutelise conectado agrave

accedilatildeo de transferecircncia sob a

entrada a e o estado s

O GOTO fornece o GOTO[s a]

para os natildeo-terminais A

Ok

Mas como eu consigo os dados

desta tabela

62 Geovane Griesang

A sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

FOLLOW(E) = FOLLOW(Ersquo) = ) $

FOLLOW(T) = FOLLOW(Trsquo) = + ) $

FOLLOW(F) = + ) $

63 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Construindo tabelas de anaacutelise SLR

Esse meacutetodo eacute o mais simples dos LRs Vamos nos referir a tabela de anaacutelise construiacuteda por este meacutetodo como uma tabela SLR e o analisador LR usando uma tabela SLR como um analisador sintaacutetico SLR

O meacutetodo SLR comeccedila com os itens LR(0) e autocircmatos LR(0) ou seja dada uma gramaacutetica G estendemos G para produzir Grsquo com o novo siacutembolo inicial Srsquo A partir de Grsquo construiacutemos C a coleccedilatildeo canocircnica de conj de itens para Grsquo junto com a funccedilatildeo GOTO

Para construir as entradas ACTION e GOTO da tabela de anaacutelise usando o algoritmo a seguir eacute preciso que conheccedilamos FOLLOW(A) para cada natildeo-terminal A de uma gramaacutetica

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 57: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

57 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR

3 Se ACTION[sm ai] = accept a anaacutelise estaacute concluiacuteda

4 Se ACTION[sm ai] = error o analisador sintaacutetico descobriu um erro e ativa uma rotina para recuperaccedilatildeo de erro

Todos os analisadores sintaacuteticos LR se comportam dessa maneira

A uacutenica diferenccedila entre eles diz respeito a informaccedilatildeo contida nos campos ACTION e GOTO da tabela de anaacutelise

O algoritmo de anaacutelise LR eacute resumido nos proacuteximos slides

58 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

Entrada Uma cadeia de entrada w e uma tabela de anaacutelise com funccedilotildees ACTION e GOTO para uma gramaacutetica G

Saiacuteda Se w estaacute em L(G) os passos os passos de uma reduccedilatildeo de uma anaacutelise ascendente para w

Caso contraacuterio uma indicaccedilatildeo de erro

Meacutetodo Inicialmente o analisador sintaacutetico possui w$ no buffer de entrada e s0 em sua pilha onde s0 representa o estado inicial

O analisador sintaacutetico entatildeo executa o algoritmo

59 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

[PSEUDO] seja a o primeiro siacutembolo de w$ while (1) Seja s o estado no topo da pilha if (ACTION[s a] = shift t) empilha t na pilha seja a o proacuteximo siacutembolo da entrada else if (ACTION[s a] = reduce Ararr β) desempilha siacutembolos |β| da pilha faccedila o estado t agora ser o topo da pilha empilhe GOTO[t A] na pilha imprima a produccedilatildeo Ararr β else if (ACTION[s a] = accept) pare a anaacutelise terminou

else chame uma rotina de recuperaccedilatildeo de erros

60 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR ndash Exemplo

A tabela do proacuteximo slide monstra as funccedilotildees ACTION e GOTO de uma tabela de anaacutelise LR para a gramaacutetica de expressatildeo estudada nesta aula e repetida aqui com produccedilotildees numeradas

Os coacutedigos para as accedilotildees satildeo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

(1) E rarr E + T

(2) E rarr T

(3) T rarr T F

(4) T rarr F

(5) F rarr ( E )

(6) F rarr id

1 Si significa avanccedila na entrada e empilha o estado i na pilha

2 Rj significa reduce segundo a produccedilatildeo de nuacutemero j

3 Acc significa accept

4 Entrada em branco significa error

61 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Estado ACTION

id + ( ) $

0 s5 s4

1 S6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4

5 r6 r6 r6 r6

6 s5 s4

7 s5 s4

8 r6 s11

9 s1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

GOTO

E T F

1 2 3

8 2 3

9 3

10

O valor de GOTO(s a) para o

terminal a estaacute em ACTION da

tabela de anaacutelise conectado agrave

accedilatildeo de transferecircncia sob a

entrada a e o estado s

O GOTO fornece o GOTO[s a]

para os natildeo-terminais A

Ok

Mas como eu consigo os dados

desta tabela

62 Geovane Griesang

A sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

FOLLOW(E) = FOLLOW(Ersquo) = ) $

FOLLOW(T) = FOLLOW(Trsquo) = + ) $

FOLLOW(F) = + ) $

63 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Construindo tabelas de anaacutelise SLR

Esse meacutetodo eacute o mais simples dos LRs Vamos nos referir a tabela de anaacutelise construiacuteda por este meacutetodo como uma tabela SLR e o analisador LR usando uma tabela SLR como um analisador sintaacutetico SLR

O meacutetodo SLR comeccedila com os itens LR(0) e autocircmatos LR(0) ou seja dada uma gramaacutetica G estendemos G para produzir Grsquo com o novo siacutembolo inicial Srsquo A partir de Grsquo construiacutemos C a coleccedilatildeo canocircnica de conj de itens para Grsquo junto com a funccedilatildeo GOTO

Para construir as entradas ACTION e GOTO da tabela de anaacutelise usando o algoritmo a seguir eacute preciso que conheccedilamos FOLLOW(A) para cada natildeo-terminal A de uma gramaacutetica

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 58: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

58 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

Entrada Uma cadeia de entrada w e uma tabela de anaacutelise com funccedilotildees ACTION e GOTO para uma gramaacutetica G

Saiacuteda Se w estaacute em L(G) os passos os passos de uma reduccedilatildeo de uma anaacutelise ascendente para w

Caso contraacuterio uma indicaccedilatildeo de erro

Meacutetodo Inicialmente o analisador sintaacutetico possui w$ no buffer de entrada e s0 em sua pilha onde s0 representa o estado inicial

O analisador sintaacutetico entatildeo executa o algoritmo

59 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

[PSEUDO] seja a o primeiro siacutembolo de w$ while (1) Seja s o estado no topo da pilha if (ACTION[s a] = shift t) empilha t na pilha seja a o proacuteximo siacutembolo da entrada else if (ACTION[s a] = reduce Ararr β) desempilha siacutembolos |β| da pilha faccedila o estado t agora ser o topo da pilha empilhe GOTO[t A] na pilha imprima a produccedilatildeo Ararr β else if (ACTION[s a] = accept) pare a anaacutelise terminou

else chame uma rotina de recuperaccedilatildeo de erros

60 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR ndash Exemplo

A tabela do proacuteximo slide monstra as funccedilotildees ACTION e GOTO de uma tabela de anaacutelise LR para a gramaacutetica de expressatildeo estudada nesta aula e repetida aqui com produccedilotildees numeradas

Os coacutedigos para as accedilotildees satildeo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

(1) E rarr E + T

(2) E rarr T

(3) T rarr T F

(4) T rarr F

(5) F rarr ( E )

(6) F rarr id

1 Si significa avanccedila na entrada e empilha o estado i na pilha

2 Rj significa reduce segundo a produccedilatildeo de nuacutemero j

3 Acc significa accept

4 Entrada em branco significa error

61 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Estado ACTION

id + ( ) $

0 s5 s4

1 S6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4

5 r6 r6 r6 r6

6 s5 s4

7 s5 s4

8 r6 s11

9 s1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

GOTO

E T F

1 2 3

8 2 3

9 3

10

O valor de GOTO(s a) para o

terminal a estaacute em ACTION da

tabela de anaacutelise conectado agrave

accedilatildeo de transferecircncia sob a

entrada a e o estado s

O GOTO fornece o GOTO[s a]

para os natildeo-terminais A

Ok

Mas como eu consigo os dados

desta tabela

62 Geovane Griesang

A sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

FOLLOW(E) = FOLLOW(Ersquo) = ) $

FOLLOW(T) = FOLLOW(Trsquo) = + ) $

FOLLOW(F) = + ) $

63 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Construindo tabelas de anaacutelise SLR

Esse meacutetodo eacute o mais simples dos LRs Vamos nos referir a tabela de anaacutelise construiacuteda por este meacutetodo como uma tabela SLR e o analisador LR usando uma tabela SLR como um analisador sintaacutetico SLR

O meacutetodo SLR comeccedila com os itens LR(0) e autocircmatos LR(0) ou seja dada uma gramaacutetica G estendemos G para produzir Grsquo com o novo siacutembolo inicial Srsquo A partir de Grsquo construiacutemos C a coleccedilatildeo canocircnica de conj de itens para Grsquo junto com a funccedilatildeo GOTO

Para construir as entradas ACTION e GOTO da tabela de anaacutelise usando o algoritmo a seguir eacute preciso que conheccedilamos FOLLOW(A) para cada natildeo-terminal A de uma gramaacutetica

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 59: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

59 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR - Algoritmo

[PSEUDO] seja a o primeiro siacutembolo de w$ while (1) Seja s o estado no topo da pilha if (ACTION[s a] = shift t) empilha t na pilha seja a o proacuteximo siacutembolo da entrada else if (ACTION[s a] = reduce Ararr β) desempilha siacutembolos |β| da pilha faccedila o estado t agora ser o topo da pilha empilhe GOTO[t A] na pilha imprima a produccedilatildeo Ararr β else if (ACTION[s a] = accept) pare a anaacutelise terminou

else chame uma rotina de recuperaccedilatildeo de erros

60 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR ndash Exemplo

A tabela do proacuteximo slide monstra as funccedilotildees ACTION e GOTO de uma tabela de anaacutelise LR para a gramaacutetica de expressatildeo estudada nesta aula e repetida aqui com produccedilotildees numeradas

Os coacutedigos para as accedilotildees satildeo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

(1) E rarr E + T

(2) E rarr T

(3) T rarr T F

(4) T rarr F

(5) F rarr ( E )

(6) F rarr id

1 Si significa avanccedila na entrada e empilha o estado i na pilha

2 Rj significa reduce segundo a produccedilatildeo de nuacutemero j

3 Acc significa accept

4 Entrada em branco significa error

61 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Estado ACTION

id + ( ) $

0 s5 s4

1 S6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4

5 r6 r6 r6 r6

6 s5 s4

7 s5 s4

8 r6 s11

9 s1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

GOTO

E T F

1 2 3

8 2 3

9 3

10

O valor de GOTO(s a) para o

terminal a estaacute em ACTION da

tabela de anaacutelise conectado agrave

accedilatildeo de transferecircncia sob a

entrada a e o estado s

O GOTO fornece o GOTO[s a]

para os natildeo-terminais A

Ok

Mas como eu consigo os dados

desta tabela

62 Geovane Griesang

A sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

FOLLOW(E) = FOLLOW(Ersquo) = ) $

FOLLOW(T) = FOLLOW(Trsquo) = + ) $

FOLLOW(F) = + ) $

63 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Construindo tabelas de anaacutelise SLR

Esse meacutetodo eacute o mais simples dos LRs Vamos nos referir a tabela de anaacutelise construiacuteda por este meacutetodo como uma tabela SLR e o analisador LR usando uma tabela SLR como um analisador sintaacutetico SLR

O meacutetodo SLR comeccedila com os itens LR(0) e autocircmatos LR(0) ou seja dada uma gramaacutetica G estendemos G para produzir Grsquo com o novo siacutembolo inicial Srsquo A partir de Grsquo construiacutemos C a coleccedilatildeo canocircnica de conj de itens para Grsquo junto com a funccedilatildeo GOTO

Para construir as entradas ACTION e GOTO da tabela de anaacutelise usando o algoritmo a seguir eacute preciso que conheccedilamos FOLLOW(A) para cada natildeo-terminal A de uma gramaacutetica

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 60: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

60 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Comportamento do analisador LR ndash Exemplo

A tabela do proacuteximo slide monstra as funccedilotildees ACTION e GOTO de uma tabela de anaacutelise LR para a gramaacutetica de expressatildeo estudada nesta aula e repetida aqui com produccedilotildees numeradas

Os coacutedigos para as accedilotildees satildeo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

(1) E rarr E + T

(2) E rarr T

(3) T rarr T F

(4) T rarr F

(5) F rarr ( E )

(6) F rarr id

1 Si significa avanccedila na entrada e empilha o estado i na pilha

2 Rj significa reduce segundo a produccedilatildeo de nuacutemero j

3 Acc significa accept

4 Entrada em branco significa error

61 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Estado ACTION

id + ( ) $

0 s5 s4

1 S6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4

5 r6 r6 r6 r6

6 s5 s4

7 s5 s4

8 r6 s11

9 s1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

GOTO

E T F

1 2 3

8 2 3

9 3

10

O valor de GOTO(s a) para o

terminal a estaacute em ACTION da

tabela de anaacutelise conectado agrave

accedilatildeo de transferecircncia sob a

entrada a e o estado s

O GOTO fornece o GOTO[s a]

para os natildeo-terminais A

Ok

Mas como eu consigo os dados

desta tabela

62 Geovane Griesang

A sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

FOLLOW(E) = FOLLOW(Ersquo) = ) $

FOLLOW(T) = FOLLOW(Trsquo) = + ) $

FOLLOW(F) = + ) $

63 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Construindo tabelas de anaacutelise SLR

Esse meacutetodo eacute o mais simples dos LRs Vamos nos referir a tabela de anaacutelise construiacuteda por este meacutetodo como uma tabela SLR e o analisador LR usando uma tabela SLR como um analisador sintaacutetico SLR

O meacutetodo SLR comeccedila com os itens LR(0) e autocircmatos LR(0) ou seja dada uma gramaacutetica G estendemos G para produzir Grsquo com o novo siacutembolo inicial Srsquo A partir de Grsquo construiacutemos C a coleccedilatildeo canocircnica de conj de itens para Grsquo junto com a funccedilatildeo GOTO

Para construir as entradas ACTION e GOTO da tabela de anaacutelise usando o algoritmo a seguir eacute preciso que conheccedilamos FOLLOW(A) para cada natildeo-terminal A de uma gramaacutetica

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 61: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

61 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Estado ACTION

id + ( ) $

0 s5 s4

1 S6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4

5 r6 r6 r6 r6

6 s5 s4

7 s5 s4

8 r6 s11

9 s1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

GOTO

E T F

1 2 3

8 2 3

9 3

10

O valor de GOTO(s a) para o

terminal a estaacute em ACTION da

tabela de anaacutelise conectado agrave

accedilatildeo de transferecircncia sob a

entrada a e o estado s

O GOTO fornece o GOTO[s a]

para os natildeo-terminais A

Ok

Mas como eu consigo os dados

desta tabela

62 Geovane Griesang

A sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

FOLLOW(E) = FOLLOW(Ersquo) = ) $

FOLLOW(T) = FOLLOW(Trsquo) = + ) $

FOLLOW(F) = + ) $

63 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Construindo tabelas de anaacutelise SLR

Esse meacutetodo eacute o mais simples dos LRs Vamos nos referir a tabela de anaacutelise construiacuteda por este meacutetodo como uma tabela SLR e o analisador LR usando uma tabela SLR como um analisador sintaacutetico SLR

O meacutetodo SLR comeccedila com os itens LR(0) e autocircmatos LR(0) ou seja dada uma gramaacutetica G estendemos G para produzir Grsquo com o novo siacutembolo inicial Srsquo A partir de Grsquo construiacutemos C a coleccedilatildeo canocircnica de conj de itens para Grsquo junto com a funccedilatildeo GOTO

Para construir as entradas ACTION e GOTO da tabela de anaacutelise usando o algoritmo a seguir eacute preciso que conheccedilamos FOLLOW(A) para cada natildeo-terminal A de uma gramaacutetica

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 62: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

62 Geovane Griesang

A sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

FOLLOW(E) = FOLLOW(Ersquo) = ) $

FOLLOW(T) = FOLLOW(Trsquo) = + ) $

FOLLOW(F) = + ) $

63 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Construindo tabelas de anaacutelise SLR

Esse meacutetodo eacute o mais simples dos LRs Vamos nos referir a tabela de anaacutelise construiacuteda por este meacutetodo como uma tabela SLR e o analisador LR usando uma tabela SLR como um analisador sintaacutetico SLR

O meacutetodo SLR comeccedila com os itens LR(0) e autocircmatos LR(0) ou seja dada uma gramaacutetica G estendemos G para produzir Grsquo com o novo siacutembolo inicial Srsquo A partir de Grsquo construiacutemos C a coleccedilatildeo canocircnica de conj de itens para Grsquo junto com a funccedilatildeo GOTO

Para construir as entradas ACTION e GOTO da tabela de anaacutelise usando o algoritmo a seguir eacute preciso que conheccedilamos FOLLOW(A) para cada natildeo-terminal A de uma gramaacutetica

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 63: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

63 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Construindo tabelas de anaacutelise SLR

Esse meacutetodo eacute o mais simples dos LRs Vamos nos referir a tabela de anaacutelise construiacuteda por este meacutetodo como uma tabela SLR e o analisador LR usando uma tabela SLR como um analisador sintaacutetico SLR

O meacutetodo SLR comeccedila com os itens LR(0) e autocircmatos LR(0) ou seja dada uma gramaacutetica G estendemos G para produzir Grsquo com o novo siacutembolo inicial Srsquo A partir de Grsquo construiacutemos C a coleccedilatildeo canocircnica de conj de itens para Grsquo junto com a funccedilatildeo GOTO

Para construir as entradas ACTION e GOTO da tabela de anaacutelise usando o algoritmo a seguir eacute preciso que conheccedilamos FOLLOW(A) para cada natildeo-terminal A de uma gramaacutetica

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 64: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

64 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Movimentos de um

analisador LR p a

entrada id id + id

A coluna Siacutembolos

mostra a sequencia

de siacutembolos de

uma gramaacutetica que

correspondem aos

estados contidos na

pilha

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 65: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

65 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 66: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

66 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

Ex Na linha (1) o

analisador SLR estaacute

no estado 0 o estado

inicial tem siacutembolos

da gramaacutetica e com

id o primeiro siacutembolo

da entrada

A accedilatildeo na linha 0

(estado) e na coluna

id do campo ACTION

eacute s5 significando

avance empilhando o

estado 5

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 67: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

67 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

(3) 0 3 $ F id + id $ reduz segundo Trarr F

(4) 0 2 $ T id + id $ empilha 7 e avanccedila

(5) 0 2 7 $ T id + id $ empilha 5 e avanccedila

(6) 0 2 7 5 $ T id + id $ reduz segundo F rarr id

(7) 0 2 7 5 10 $ T F + id $ reduz segundo T rarr T F

(8) 0 2 $ T + id $ reduz segundo E rarr T

(9) 0 1 $ E + id $ empilha 6 e avanccedila

(10) 0 1 6 $ E + id $ empilha 5 e avanccedila

(11) 0 1 6 5 $ E + id $ reduz segundo F rarr id

(12) 0 1 6 3 $ E + F $ reduz segundo Trarr F

(13) 0 1 6 9 $ E + T $ reduz segundo E rarr E + T

(14) 0 1 $ E $ aceitar

Entatildeo torna-se o

siacutembolo de entrada

corrente e a accedilatildeo do

estado 5 sob a

entrada eacute reduzir

segundo a produccedilatildeo

F rarr id

Foi isso que ocorreu

na linha (2) siacutembolo

do estado 5 foi posto

na pilha depois id foi

removido da entrada

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 68: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

68 Geovane Griesang

Anaacutelise sintaacutetica Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

Temos a situaccedilatildeo da

linha (3)

cada um dos mov

restantes pode ser

determinado de

modo semelhante

Um siacutembolo estado eacute

desempilhado

Linha Pilha Siacutembolos Entrada Accedilatildeo

(1) 0 $ id id + id $ empilha 5 e avanccedila

(2) 0 5 $ id id + id $ reduz segundo F rarr id

0 $ F id + id $

Linha Pilha Siacutembolos Entrada Accedilatildeo

(3) 0 3 $ F id + id $ reduz segundo Trarr F

O estado 0 eacute entatildeo

exposto

Estado ACTION

id + ( ) $

0 s5 s4

GOTO

E T F

1 2 3

Como a transiccedilatildeo do

estado 0 sob F eacute 3 o

estado 3 eacute colocado

na pilha

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 69: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

69 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

Entrada uma gramaacutetica estendida Grsquo

Saiacuteda as funccedilotildees ACTION e GOTO da tabela de anaacutelise SLR para Grsquo

Meacutetodo

1 Construa C = I0 I1 In a coleccedilatildeo de conj de itens LR(0) p Grsquo

2 O estado i eacute construiacutedo a partir de Ii As accedilotildees sintaacuteticas para i satildeo determinadas da seguinte forma

a) Se o item [A rarr αaβ] estaacute em Ii e GOTO(Ii a) = Ij entatildeo defina ACTION[i a] como ldquoshift jrdquo Aqui a deve ser um terminal

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 70: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

70 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

2

b) Se o item [A rarr α] estaacute em Ii entatildeo defina ACTION[i a] como Ararrα para todo a em FOLLOW(A) Aqui A pode natildeo ser Srsquo o siacutembolo inicial da gramaacutetica

c) Se o item [Srsquo rarr S] estiver em Ii entatildeo defina ACTION[i $] como ldquoacceptrdquo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 71: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

71 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

3 As transaccedilotildees goto para o estado i satildeo construiacutedas para todos os natildeo-terminais A usando a regra se GOTO(IiA)=Ij entatildeo GOTO[i A]=j

4 Todas as entradas natildeo definidas pelas regras (2) e (3) caracterizam ldquoerrorrdquo

5 O estado inicial do analisador eacute aquele construiacutedo a partir do conj de itens contendo [Srsquo rarr S]

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 72: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

72 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR

A tabela de anaacutelise consistindo as funccedilotildees ACTION e GOTO geradas pelo algoritmo anterior eacute chamada de tabela SLR(1) para G

Um analisador LR usando esta tabela eacute chamado de analisador sintaacutetico SLR(1) para G e uma gramaacutetica tendo uma tabela de anaacutelise SLR(1) eacute considerada SLR(1)

Usualmente omitimos o ldquo(1)rdquo depois de ldquoSLRrdquo pois natildeo lidaremos aqui com analisadores com mais de um siacutembolo de loockhead

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 73: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

73 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Vamos construir a tabela SLR para a gramaacutetica estendida de expressatildeo A coleccedilatildeo canocircnica de conj de itens LR(0) para a gramaacutetica estudada

Primeiro considere o conj de itens I0

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 74: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

74 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

O item Frarr(E) daacute origem a entrada ACTION[0 (] = shift 4 e o

item Frarrid para a entrada ACTION[0 id] = shift 5

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

(

I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I5

F rarr id

id

Estado ACTION

id + ( ) $

0 s5 s4

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 75: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

75 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Os demais itens I0 natildeo produzem entradas na parte ACTION referente ao estado 0

Agora considere I1

O primeiro gera ACTION[1 $] = accept e o segundo gera ACTION[1 +] = shift 6

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I1

Ersquo rarr E

E rarr E + T

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 76: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

76 Geovane Griesang

Anaacutelise sintaacutetica I0

Ersquo rarr E

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

I2

E rarr T

T rarr T F

T

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I3

T rarr F

F

I4

F rarr ( E )

E rarr E + T

E rarr T

T rarr T F

T rarr F

F rarr ( E )

F rarr id (

I5

F rarr id

id

I1

Ersquo rarr E

E rarr E + T

E I6

E rarr E + T

T rarr T F

T rarr F

F rarr ( E )

F rarr id

+

I7

T rarr T F

F rarr ( E )

F rarr id

I8

E rarr ( E )

E rarr E + T E

I9

E rarr E + T

E rarr T F

T

I10

T rarr T F

F

I11

F rarr ( E )

) T

(

id

F (

id

(

id

+

F

Aceitar $

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 77: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

77 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Agora considere I2

Com o FOLLOW(E) = $ + ) o primeiro item faz que ACTION[2 $] = ACTION[2 +] = ACTION[2 )] = reduce segundo a produccedilatildeo E rarr T

O segundo item gera ACTION[2 ] = shift 7

Continuando esse processo obtemos a tabela ACTION e GOTO

Ersquo rarr E

E rarr E + T | T

T rarr T F | F

F rarr ( E ) | id

I2

E rarr T

T rarr T F

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 78: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

78 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Toda gramaacutetica SLR(1) eacute natildeo-ambiacutegua mas existem muitas gramaacuteticas natildeo-ambiacuteguas que natildeo satildeo SLR(1)

Considere as seguintes produccedilotildees

Pense em L e R como significando valor l e valor r respectivamente e como um operador indicando ldquoconteuacutedo derdquo

S rarr L = R | R

L rarr R | id

R rarr L

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 79: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

79 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

A coleccedilatildeo LR canocircnica de conj de itens LR(0) para a gramaacutetica estudada

I0 Srsquo rarr S

S rarr L = R

S rarr R

L rarr R

L rarr id

R rarr L

I1 Srsquo rarr S

I2 S rarr L = R

R rarr L

I3 S rarr R

I4 L rarr R

R rarr L

L rarr R

L rarr id

I5 L rarr id

I6 S rarr L = R

R rarr L

L rarr R

L rarr id

I7 L rarr R

I8 R rarr L

I9 S rarr L = R

S rarr L = R | R

L rarr R | id

R rarr L

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 80: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

80 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

Anaacutelise LR ndash Algoritmo para construccedilatildeo de uma tabela SLR - Exemplo

Considere o conj de itens I2

O primeiro item deste conjunto faz com que ACTION[2 =] seja ldquoshift 6rdquo

Como FOLLOW(R) conteacutem = (para ver porquecirc considere a derivaccedilatildeo

S rArr L = R rArr lowast R = R) o segundo item define ACTION[2=] como ldquoreduce segundo a produccedilatildeo R rarr Lrdquo

Com existe uma accedilatildeo de reduzir e transferir para o estado 2 e a entrada ldquo=rdquo em ACTION[2 =] o estado 2 caracteriza um conflito shiftreduce sob o siacutembolo de entrada =

I2 S rarr L = R

R rarr L

S rarr L = R | R

L rarr R | id

R rarr L

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 81: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

81 Geovane Griesang

Anaacutelise sintaacutetica

Anaacutelise ascendente

A gramaacutetica anterior natildeo eacute ambiacutegua Esse conflito aparece porque o meacutetodo para construccedilatildeo de analisadores SLR natildeo eacute suficientemente poderoso para lembrar o contexto a esquerda a fim de decidir que accedilatildeo o reconhecedor deve tomar quando = aparece na entrada tendo visto uma cadeia redutiacutevel para L

Os meacutetodos LR canocircnico e o LALR conseguem reconhecer a gramaacutetica em questatildeo e teratildeo sucesso com uma gama maior de gramaacuteticas Poreacutem observe que existem gramaacuteticas natildeo ambiacuteguas para os quais todos os meacutetodos de construccedilatildeo de analisadores sintaacuteticos LR produziratildeo tabelas de accedilatildeo de anaacutelise de conflitos

Felizmente essas gramaacuteticas geralmente podem ser evitadas em aplicaccedilotildees de linguagens de programaccedilatildeo

S rarr L = R | R

L rarr R | id

R rarr L

Proacutexima aula

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica

Page 82: COMPILADORES - geovanegriesang.files.wordpress.com · COMPILADORES Análise sintática Parte 05 Prof. Geovane Griesang geovanegriesang@unisc.br Universidade de Santa Cruz do Sul –

COMPILADORES

Obrigado

Prof Geovane Griesang

geovanegriesanguniscbr

Universidade de Santa Cruz do Sul ndash UNISC

Departamento de informaacutetica