compiladores - geovanegriesang.files.wordpress.com · compiladores análise sintática parte 05...
TRANSCRIPT
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
COMPILADORES
Obrigado
Prof Geovane Griesang
geovanegriesanguniscbr
Universidade de Santa Cruz do Sul ndash UNISC
Departamento de informaacutetica