21
Processamento de Linguagens I LESI + LMCC (3 o ano) 4 o FichaPr´atica Ano Lectivo de 05/06 1 Objectivos Este ficha pr´atica cont´ em exerc´ ıcios para serem resolvidos nas aulas te´orico-pr´ aticas com vista a sedimentar os conhecimentos relativos a An´alisedeGram´aticaparaconstru¸c˜ ao de Tabelas de Parsing LL (Top-Down ); verifica¸ ao da Condi¸c˜ ao LL(1). An´alisedeGram´aticaparaconstru¸c˜ ao de Tabelas de Parsing LR (Bottom-Up ); verifica¸ ao da Condi¸c˜ ao LR(0)/SLR(1). 2 Enunciados No contexto do desenvolvimento de Compiladores, ou mais genericamente de Processadores de Linguagens, a primeira tarefa a realizar ´ e a cria¸c˜ ao de uma GIC que especifique a linguagem que se quer processar, visto que todo o desenvolvimento vai assentar sobre a dita gram´atica. Em particular, o reconhecedor sint´ actico (parser) ´ e constru´ ıdo a partir de uma algoritmo iterativo gen´ erico, muito eficiente e independente da gram´atica, que ´ e guiado por uma tabela de decis˜ ao, a qual ´ e espec´ ıfica de cada linguagem e se cria sistematicamente a partir da GIC concreta. Nessascondi¸c˜ oes, prop˜oe-se para esta aula a constru¸c˜ ao da tabela LL(1) e da tabela LR(0), ou SLR(1), a partir da gram´atica indicada em cada exerc´ ıcio, a verifica¸ ao das condi¸c˜ oes de recon- hecimento para cada uma das estrat´ egias (TD ou BU) e a eventual transforma¸c˜ ao da GIC. 2.1 Gram´ atica simples Considere a seguinte gram´atica independente de contexto G 1 =(T,N,S,P ) com T = {a, b, c}, N = {S, A} e, P = { p 1 : S ABc , p 2 : | B , p 3 : A Aa , p 4 : | a , p 5 : B b } Como provar que, por exemplo, abbc ∈L G 1 ? Prova-se que uma frase pertence `a linguagem de uma dada gram´atica se for poss´ ıvel encontrar uma sequˆ encia de deriva¸c˜ ao para essa dada frase ou se for poss´ ıvel construir uma ´arvore de parsing. Utilizando uma sequˆ encia de deriva¸ ao LL (cuja re-escrita se faz sempre `a esquerda) temos: 1

Processamento de Linguagens Iprh/pl105f04resDCC.pdfProcessamento de Linguagens I LESI + LMCC (3o ano) 4o Ficha Pr´atica Ano Lectivo de 05/06 1 Objectivos Este ficha pr´atica cont´em

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Processamento de Linguagens Iprh/pl105f04resDCC.pdfProcessamento de Linguagens I LESI + LMCC (3o ano) 4o Ficha Pr´atica Ano Lectivo de 05/06 1 Objectivos Este ficha pr´atica cont´em

Processamento de Linguagens I

LESI + LMCC (3o ano)

4o Ficha Pratica

Ano Lectivo de 05/06

1 Objectivos

Este ficha pratica contem exercıcios para serem resolvidos nas aulas teorico-praticas com vista asedimentar os conhecimentos relativos a

• Analise de Gramatica para construcao de Tabelas de Parsing LL (Top-Down); verificacao daCondicao LL(1).

• Analise de Gramatica para construcao de Tabelas de Parsing LR (Bottom-Up); verificacao daCondicao LR(0)/SLR(1).

2 Enunciados

No contexto do desenvolvimento de Compiladores, ou mais genericamente de Processadores deLinguagens, a primeira tarefa a realizar e a criacao de uma GIC que especifique a linguagem quese quer processar, visto que todo o desenvolvimento vai assentar sobre a dita gramatica.Em particular, o reconhecedor sintactico (parser) e construıdo a partir de uma algoritmoiterativo generico, muito eficiente e independente da gramatica, que e guiado por uma tabelade decisao, a qual e especıfica de cada linguagem e se cria sistematicamente a partir da GICconcreta.Nessas condicoes, propoe-se para esta aula a construcao da tabela LL(1) e da tabela LR(0), ouSLR(1), a partir da gramatica indicada em cada exercıcio, a verificacao das condicoes de recon-hecimento para cada uma das estrategias (TD ou BU) e a eventual transformacao da GIC.

2.1 Gramatica simples

Considere a seguinte gramatica independente de contexto G1 = (T,N, S, P ) com T = {a, b, c},N = {S, A} e,P = { p1 : S → A B c

, p2 : | B, p3 : A → A a, p4 : | a, p5 : B → b}

Como provar que, por exemplo, abbc ∈ LG1?Prova-se que uma frase pertence a linguagem de uma dada gramatica se for possıvel encontrar umasequencia de derivacao para essa dada frase ou se for possıvel construir uma arvore de parsing.Utilizando uma sequencia de derivacao LL (cuja re-escrita se faz sempre a esquerda) temos:

1

Page 2: Processamento de Linguagens Iprh/pl105f04resDCC.pdfProcessamento de Linguagens I LESI + LMCC (3o ano) 4o Ficha Pr´atica Ano Lectivo de 05/06 1 Objectivos Este ficha pr´atica cont´em

S#1⇒ ABc

#1⇒ AaBc#1⇒ aaBc

#1⇒ aabc

Utilizando uma sequencia de derivacao LR (cuja re-escrita se faz sempre a direita) temos:

S#1⇒ ABc

#1⇒ Abc#1⇒ Aabc

#1⇒ aabc

Utilizando um reconhecedor Bottom-up, a arvore de derivacao de uma frase f e construıdacomecando pelas folhas (bottom) e subindo pela raiz S.

f#1⇒ S

Assim, informalmente, o reconhecimento da frase aabc faz-se da seguinte forma:

aabc p4

Aabc p3

Abc p5

ABc p1

S

Note-se que a sequencia de derivacao conseguida utilizando um reconhecedor bottom-up e igual asequencia de derivacao LR apresentada anteriormente.No entanto, esta sequencia apesar de provar que a frase aabc pertence a linguagem, nao mostracomo e que o algoritmo bottom-up funciona. Uma versao simplificada desse algortimo e apresen-tado a seguir utilizando uma tabel de tres entradas: stack, frase de entrada e a accao a executar.As accoes pode ser de dois tipos: desloca (que remove um sımbolo da frase para a stack) e reduz(na qual uma regra de producao e utilizada).

Stack f accaoaabc descola

a abc reduz p/p4

A abc deslocaAa bc reduz p/p3

A bc deslocaAb c reduz p/p5

AB c deslocaABc reduz p/p1

S aceite

Ainda assim, no exemplo acima representado nada nos e dito qual a escolha das accoes que temosque executar, e quando se faz a accao reduz qual a producao escolhida.Para tal, vai-se introduzir o algortimo SLR ou LR(0).Uma gramatica diz-se SLR ou LR(0) se e so se for possıvel construir para ela um reconhecedorSLR.Para tal, e necessario construir duas tabelas: uma tabela de transicao de estados e uma tabela deaccoes.Tabela de transicao de estados:

δ = array[δ × (T ∪N)] de Q ∪ {erro}

Tabela de accoes:

TA = array[Q,T ] de P ∪ {desloca, ok, erro}

2

Page 3: Processamento de Linguagens Iprh/pl105f04resDCC.pdfProcessamento de Linguagens I LESI + LMCC (3o ano) 4o Ficha Pr´atica Ano Lectivo de 05/06 1 Objectivos Este ficha pr´atica cont´em

construida segundo as seguintes regras que serao explicadas mais a frente:

A → δ . a β ∈ Ii ⇒ ta[i, a] = desloca

A → α . ∈ Ii ⇒ ∀a ∈ Follow(A), ta[i, a] = A → α

S → S . $ ∈ Ii ⇒ ta[i, a] = ok

Comeca-se por um passo de preparacao em que se verifica se a gramatica inclui o sımbolo de fim-de-ficheiro $. Como nao exemplo dado, tal nao acontece, a gramatica vai ser extendida atraves daadicao de um novo sımbolo nao-terminal:G = (T,N, S, P ), com T = {a, b, c, $}, N = {S′, S, A} e,P = { p0 : S′ → S $

, p1 : S → A B c, p2 : | B, p3 : A → A a, p4 : | a, p5 : B → b}

O primeiro passo para a construcao das tabelas SLR e a definicao de um automato finito naodeterminista a partir da gramatica.

1) S’ -> .S$

2) S -> .ABc

@

3) S -> .B@

7) S’ -> S.$

S

4) A -> .Aa@

5) A -> .a@

8) S -> A.Bc

A

6) B -> .b@

11) S -> B.

B

@@

12) A -> A.aA

14) A -> a.a

15) B -> b.b

@

9) S -> AB.cB

10) S -> ABc.c

13) A -> Aa.a

Figura 1: NDFA da gramatica independente do contexto.

Cada estado do automato representa uma producao e o sımbolo que ja foi processado. O resultadodesse automato pode ser visualizado na Figura 1.Por exemplo o estado do automato 1)S′ → . S $, representa o axioma da gramatica no qualnenhum estado foi processado. Este estado e o estado inicial do automato. Processando o sımboloS, vai-se para o estado 7, representado por 7)S′ → S . $. Note-se que o ponto indica que o sımboloS foi processado. As transicoes por ε representadas pelo sımbolo @ existem quando a seguir deum ponto aparece um sımbolo nao-terminal, e fazem-se para todas as producoes desse sımbolocolocando um ponto antes dos sımbolos do lado direito.Depois de construıdo o NDFA que representa a gramatica, e necessario converte-lo para DFA.Calculando as transicoes dos sımbolos tem-se:

3

Page 4: Processamento de Linguagens Iprh/pl105f04resDCC.pdfProcessamento de Linguagens I LESI + LMCC (3o ano) 4o Ficha Pr´atica Ano Lectivo de 05/06 1 Objectivos Este ficha pr´atica cont´em

I0 = ε− closure(1) = {1, 2, 3, 4, 5, 6}I1 = δ(I0, S) = {7}I2 = δ(I0, a) = {14}I3 = δ(I0, b) = {15}I4 = δ(I0, A) = {6, 8, 12}I5 = δ(I0, B) = {11}I6 = δ(I4, a) = {13}I7 = δ(I4, B) = {9}I8 = δ(I4, b) = {15}I9 = δ(I7, c) = {10}

O que permite definir a seguinte tabela de conversao:

estados S A B a b c{1,2,3,4,5,6} {7} {6,8,12} {11} {14} {15}

{7}{6,8,12} {9} {13} {15}{11}{14}{15}{9} {10}{13}{10}

O automato finito determinista equivalente pode ser visualizado na Figura 2.

I0) S’ -> .S$ S -> .ABc

S -> .B A -> .Aa

A -> .a B -> .b

I1) S’ -> S.$S

I2) S -> A.Bc A -> A.a

B -> .b

A

I3) S -> B.

B

I4) A -> a.

a

I5) B -> b.b

b

I6) S -> AB.c

B

I7) A -> Aa.

a I8) S -> ABc.c

Figura 2: DFA equivalente da gramatica independente do contexto.

Atraves deste automato, utilizando as regras para calculo da tabela de accoes obtem-se o ladoesquerdo da tabela apresentada a seguir. Da funcao δ desse automato, deriva-se o lado direito databela.

a b c $ S’ S A B0 shift4 shift5 1 2 31 ok2 shift7 shift5 63 p2

4 p4

5 p5 p5

6 shift87 p3 p3

8 p1

Agora tendo a tabela de accoes e de estados o algoritmo de aceitacao bottom-up torna-se umpouco mais simples. Provando que aabc ∈ LG1 tem-se:

4

Page 5: Processamento de Linguagens Iprh/pl105f04resDCC.pdfProcessamento de Linguagens I LESI + LMCC (3o ano) 4o Ficha Pr´atica Ano Lectivo de 05/06 1 Objectivos Este ficha pr´atica cont´em

Stack de parsing Entrada Accoes0 aabc$ TA(0, a) = desloca0a abc$ δ(0, a) = 40a4 abc$ TA(4, a) = p4 = A → a, |a| = 1, retira 1× 2 sımbolos, acrescenta A0A abc$ δ(0, A) = 20A2 abc$ TA(2, a) = desloca0A2a bc$ δ(2, a) = 70A2a7 bc$ TA(7, b) = p3 = A → A a, |Aa| = 2, retira 2× 2 sımbolos, acrescenta A0A bc$ δ(0, A) = 20A2 bc$ TA(2, b) = desloca0A2b c$ δ(2, b) = 50A2b5 c$ TA(5, c) = p5 = B → b, |b| = 1, retira 1× 2 sımbolos, acrescenta B0A2B c$ δ(2, B) = 60A2B6 c$ TA(6, c) = desloca0A2B6c $ δ(6, c) = 80A2B6c8 $ TA(8, $) = p1 = S → A B c, |ABc| = 3, retira 3× 2 sımbolos, acrescenta S0S $ δ(0, S) = 10S1 $ TA(1, $) = OK!!!

5

Page 6: Processamento de Linguagens Iprh/pl105f04resDCC.pdfProcessamento de Linguagens I LESI + LMCC (3o ano) 4o Ficha Pr´atica Ano Lectivo de 05/06 1 Objectivos Este ficha pr´atica cont´em

2.2 Horto de Braga

Determinado horto desta cidade faz propostas de fornecimento de plantas (arvores e arbustos) paraconstruir, ou reconstruir, jardins exteriores, publicos ou particulares. Nesse contexto pretende-se desenvolver um processador de linguagens para implementar diversas operacoes associadas agestao corrente do Horto.Analise atentamente a seguinte gramatica independente de contexto, que esta simplificada porrazoes obvias. O Sımbolo Inicial e Flores e os Sımbolos Terminais sao escritos em minusculas(pseudo-terminais), ou em maiuscula (palavras-reservadas), ou entre apostrofes (sinais de pon-tuacao). A string nula e denotada por & e o caracter $ representa o fim-de-ficheiro (do texto deentrada).

p1: Flores --> FsExt FsIntp2: FsExt --> FEXTERIOR Fsp3: FsInt --> &p4: | FINTERIORp5: Fs --> Flor MaisFsp6: MaisFs --> &p7: | "," Fsp8: Flor --> Cod NomVulgar Precop9: NomVulgar--> strp10: Preco --> nump11: Cod --> pal

Calcule entao as Tabelas aLL e LR acima pedidas.

Resolucao – 1.parte

Comecemos por construir a Tabela de Decisao LL(1), o que nos leva a calcular os lookahead decada uma das producoes em P1.Para isso consideraremos que sao anulaveis apenas os sımbolos FsInt e MaisFs.

• p1

lookahead(Flores → FsExt FsInt) = First(FsExt)= First(FEXTERIOR)= {FEXTERIOR}

• p2

lookahead(FsExt → FEXTERIOR Fs) = First(FEXTERIOR)= {FEXTERIOR}

• p3

1Recorde as formulas de calculo no documento com as definicoes formais em anexo.

6

Page 7: Processamento de Linguagens Iprh/pl105f04resDCC.pdfProcessamento de Linguagens I LESI + LMCC (3o ano) 4o Ficha Pr´atica Ano Lectivo de 05/06 1 Objectivos Este ficha pr´atica cont´em

lookahead(FsInt → ε) = First(ε)⋃

Follow(FsInt)

= ∅⋃

Follow(FsInt)

= First(ε)⋃

Follow(Flores)

= {$}

• p4

lookahead(FsInt → FINTERIOR) = First(FINTERIOR)= {FINTERIOR}

• p5

lookahead(Fs → FlorMaisFs) = First(Flor)= First(Cod)= {pal}

• p6

lookahead(MaisFs → ε) = First(ε)⋃

Follow(MaisFs)

= ∅⋃

Follow(Fs)

= Follow(FsExt)⋃

Follow(MaisFs)

= First(FsInt)⋃

Follow(Flores)

= {FINTERIOR, $}

• p7

lookahead(MaisFs → ”,”Fs) = First(”, ”)= {”, ”}

• p8

lookahead(Flor → Cod NomVulgar Preco) = First(Cod)= {pal}

7

Page 8: Processamento de Linguagens Iprh/pl105f04resDCC.pdfProcessamento de Linguagens I LESI + LMCC (3o ano) 4o Ficha Pr´atica Ano Lectivo de 05/06 1 Objectivos Este ficha pr´atica cont´em

• p9

lookahead(NomV ulgar → str) = First(str)= {str}

• p10

lookahead(Cod → pal) = First(pal)= {pal}

• p11

lookahead(Preco → num) = First(num)= {num}

A partir dos resultados obtidos no calculo dos lookahead, podemos passar, entao, a construcao databela LL(1), seguindo sistematicamente o algoritmo recordado no dcumento anexo.Obtem-se, assim, a tabela seguinte:

FEXTERIOR FINTERIOR ”,” str pal num $Flores p1FsExt p2FsInt p4 p3Fs p5

MaisFs p6 p7 p6Flor p8

NomVulgar p9Cod p10Preco p11

Podemos, finalmente, concluir que a gramatica e LL(1), uma vez que:

∀A→α1,A→α2 : lookahead(A → α1)⋂

lookahead(A → α2) = ∅

Esta conclusao, que se pode tirar de imediato apos o calculo dos lookahead, esta tambem patente natabela construida uma vez que esta nao apresenta nenhum conflito em alguma das suas entradas.

Resolucao – 2.parte

Para obter a tabelas de decisao BU, ACTION e GOTO, tem de se comecar por construir o automatode reconhecimento (DFA) LR(0), seguindo o metodo sistematico recordado no documento anexo.Comecando no estado 0 com o item

[S’ → •Flores $]

obtemos o a DFA com 16 estados, que se mostra na figura 3.A partir da funcao de transicao, δ, do automato LR(0) calculado, e possıvel derivar as tabelas dedecisao BU seguintes.

8

Page 9: Processamento de Linguagens Iprh/pl105f04resDCC.pdfProcessamento de Linguagens I LESI + LMCC (3o ano) 4o Ficha Pr´atica Ano Lectivo de 05/06 1 Objectivos Este ficha pr´atica cont´em

I0)

S’ -

> .F

lore

s $

Flo

res

-> .F

sExt

FsI

nt

FsE

xt -

> .F

EX

TE

RIO

R F

s

I1)

S’ -

> F

lore

s.$

Flor

es

I2)

Flor

es -

> F

sExt

.FsI

nt

FsIn

t ->

. F

sInt

->

.FIN

TE

RIO

R

FsE

xt

I5)

FsE

xt -

> F

EX

TE

RIO

R.F

s F

s ->

.Flo

r M

aisF

s F

lor

-> .C

od N

omV

ulga

r Pr

eco

Cod

->

.pal

FEX

TE

RIO

R

I3)

Flor

es -

> F

sExt

FsI

nt.

FsIn

t

I4)

FsIn

t ->

FIN

TE

RIO

R.

FIN

TE

RIO

R

I6)

FsE

xt -

> F

EX

TE

RIO

R F

s.

Fs

I7)

Fs -

> F

lor.

Mai

sFs

Mai

sFs

-> .

Mai

sFs

-> .

’,’

Fs

Flor

I11)

Flo

r ->

Cod

. N

omV

ulga

r Pr

eco

Nom

Vul

gar

-> .s

tr

Cod

I16)

Cod

->

pal

.

pal

I8)

Fs -

> F

lor

Mai

sFs.

Mai

sFs

I9)

Mai

sFs

-> ’

,’ .

Fs F

s ->

. Fl

or M

aisF

s F

lor

-> .

Cod

Nom

Vul

gar

Prec

o C

od -

> .p

al’,’

Flor

I10)

Mai

sFs

-> ’

,’ F

s.

FsC

odpa

l

I12)

Flo

r ->

Cod

Nom

Vul

gar

. Pre

co P

reco

->

.num

Nom

Vul

gar I1

5) N

omV

ulga

r ->

str

.

str

I13)

Flo

r ->

Cod

Nom

Vul

gar

Prec

o.

Prec

o

I14)

Pre

co -

> n

um.

num

Figura 3: DFA da gramatica independente do contexto ”Horto de Braga”.

9

Page 10: Processamento de Linguagens Iprh/pl105f04resDCC.pdfProcessamento de Linguagens I LESI + LMCC (3o ano) 4o Ficha Pr´atica Ano Lectivo de 05/06 1 Objectivos Este ficha pr´atica cont´em

Tabela ACTION:FEXTERIOR FINTERIOR ”,” str num pal $

0 s51 OK2 #3 #3/s4 #3 #3 #3 #3 #33 #1 #1 #1 #1 #1 #1 #14 #4 #4 #4 #4 #4 #4 #45 s166 #2 #2 #2 #2 #2 #2 #27 #6 #6 #6/s9 #6 #6 #6 #68 #5 #5 #5 #5 #5 #5 #59 s1610 #7 #7 #7 #7 #7 #711 s1512 s1413 #8 #8 #8 #8 #8 #8 #814 #10 #10 #10 #10 #10 #10 #1015 #9 #9 #9 #9 #9 #9 #916 #11 #11 #11 #11 #11 #11 #11

Tabela GOTO:Flores FsExt FsInt Fs MaisFs Flor NomVulgar Preco Cod

0 1 212 3345 6 7 1167 889 10 7 111011 1212 1313141516

Olhando para o DFA da figura 3, ou para a Tabela ACTION acima, e imediato concluir que agramatica em causa nao e LR(0), pois existem conflitos reducao/transiccao (shift/reduce) nosestados 2 e 7.Fazendo a reducao apenas nos sımbolos terminais que pertencem ao follow do sımbolo a es-querda(LHS) da producao pela qual se quer reduzir—estrategia SLR(1)—e recorrendo aos calculosque foram efectuados na 1a parte da resolucao, verifica-se que:

• no estado 2 so se reduz pelo sımbolo terminal ”$” (Follow(FsInt)) pelo que se elimina oconflito na coluna FINTERIOR

• no estado 7 so se reduz pelo sımbolos terminais {FINTERIOR, ”$”} (Follow(MaisFs))pelo que se elimina o conflito na coluna ”, ”

concluindo-se, portanto, que a gramatica em causa e SLR(1).

10

Page 11: Processamento de Linguagens Iprh/pl105f04resDCC.pdfProcessamento de Linguagens I LESI + LMCC (3o ano) 4o Ficha Pr´atica Ano Lectivo de 05/06 1 Objectivos Este ficha pr´atica cont´em

2.3 Documento anotado em XML

Neste exercıcio retoma-se o problema 2.3 da Ficha de Pratica nu.o 2, em que se pedia paradesenvolver um processador para Documentos Anotados.Considere a seguinte gramatica independente de contexto como uma possıvel solucao para osrequisitos impostos nesse enunciado quanto ao conceito de Documento XML.

p1: DocXML --> MarcaAbr Conteudo MarcaFecp2: MarcaAbr --> "<" EleXML ">"p3: MarcaFec --> "<" "/" id ">"p4: EleXML --> id Atribsp5: Atribs --> &p6: Atribs --> Atribs id "=" strp7: Conteudo --> &p8: Conteudo --> Conteudo Componentep9: Componente--> pcdatap10: Componente--> DocXML

Admita que: o Sımbolo Inicial e DocXML; os Sımbolos Terminais sao escritos em minusculas(pseudo-terminais), ou em maiuscula (palavras-reservadas), ou entre aspas (sinais de pontuacao);a string nula e denotada por & e o caracter $ representa o fim-de-ficheiro (do texto de entrada).Calcule entao as Tabelas aLL e LR acima pedidas.

Resolucao – 1.parte

Comecemos por construir a Tabela de Decisao LL(1), o que nos leva a calcular os lookahead decada uma das producoes em P2.Para isso consideraremos que sao anulaveis apenas os sımbolos Atribs e Conteudo.

• p1

lookahead(DocXML → MarcaAbrConteudoMarcaFec) = First(MarcaAbr Conteudo MarcaFec)= First(MarcaAbr)= First(′<′ EleXML′ >′)= First(′<′)= {′<′}

• p2

lookahead(MarcaAbr →′<′ EleXML′ >′) = First(′<′ EleXML′ >′)= First(′<′)= {′<′}

• p3

2Recorde as formulas de calculo no documento com as definicoes formais em anexo.

11

Page 12: Processamento de Linguagens Iprh/pl105f04resDCC.pdfProcessamento de Linguagens I LESI + LMCC (3o ano) 4o Ficha Pr´atica Ano Lectivo de 05/06 1 Objectivos Este ficha pr´atica cont´em

lookahead(MarcaFec) →′<′ ′/′id′ >′) = First(′<′){′<′}

• p4

lookahead(EleXML → idAtribs) = First(idAtribs)= First(id)= {id}

• p5

lookahead(Atribs → ε) = First(ε)⋃

Follow(Atribs)

= (First(ε)⋃

Follow(EleXML))⋃

First(id ′ =′ str)

= First(′>′)⋃

First(id)

= {′>′, id}

• p6

lookahead(Atribs → Atribsid ′ =′ str) = First(Atribsid ′ =′ str)

= (First(ε)⋃

First(Atribsid′ =′ str))⋃

First(id ′ =′ str)

= (First(Atribs)⋃

First(id))⋃

First(id)

= {id}

• p7

lookahead(Conteudo → ε) = First(ε)⋃

Follow(Conteudo)

= First(MarcaFec)⋃

First(Componente)

= First(′<′ ′/′id′ >′)⋃

(First(DocXML)⋃

First(pcdata))

= First(′<′)⋃{pcdata}

⋃{′<′}

= {′<′, pcdata}

12

Page 13: Processamento de Linguagens Iprh/pl105f04resDCC.pdfProcessamento de Linguagens I LESI + LMCC (3o ano) 4o Ficha Pr´atica Ano Lectivo de 05/06 1 Objectivos Este ficha pr´atica cont´em

• p8

lookahead(Conteudo → . . .) = First(Conteudo Componente)

= (First(ε)⋃

First(Conteudo Componente))⋃

First(Componente)

= (First(Conteudo)⋃

First(Componente))⋃

(First(DocXML)⋃

First(pcdata))

= {′<′, pcdata}

• p9

lookahead(Componente → pcdata) = First(pcdata)= {pcdata}

• p10

lookahead(Componente → DocXML) = First(DocXML)= First(MarcaAbr Conteudo MarcaFec)= First(MarcaAbr)= First(′<′ EleXML′ >′)= First(′<′)= {′<′}

A partir dos resultados obtidos no calculo dos lookahead, podemos passar, entao, a construcao databela LL(1), seguindo sistematicamente o algoritmo recordado no dcumento anexo.Obtem-se, assim, a tabela seguinte:

< / > = id pcdata str $DocXML p1MarcaAbr p2MarcaFec p3EleXML p4Atribs p5 p5/p6

Conteudo p7/p8 p7/p8Componente p10 p9

Como podemos ver pelos resultados obtidos no calculo dos lookahead, a gramatica nao e LL(1),uma vez que:

• lookahead(p5)⋂

lookahead(p6) = {id}

• lookahead(p7)⋂

lookahead(p8) = {pcdata, ”<”}

13

Page 14: Processamento de Linguagens Iprh/pl105f04resDCC.pdfProcessamento de Linguagens I LESI + LMCC (3o ano) 4o Ficha Pr´atica Ano Lectivo de 05/06 1 Objectivos Este ficha pr´atica cont´em

Esta conclusao tambem esta patente na tabela LL(1) acima, onde se identifica 1 conflito na linharelativa ao sımbolo nao-terminal Atribs (coluna id) e 2 conflitos na linha Conteudo (colunas ′ <′

e pcdata).

Resolucao – 2.parte

Para obter a tabelas de decisao BU, ACTION e GOTO, tem de se comecar por construir o automatode reconhecimento (DFA) LR(0), seguindo o metodo sistematico recordado no documento anexo.Comecando no estado 0 com o item

[S’ → •DocXML ’$’]

obtemos o a DFA com 20 estados, que se mostra na figura 4.A partir da funcao de transicao, δ, do automato LR(0) calculado, e possıvel derivar as tabelas dedecisao BU cuja construcao nao e aqui incluida ficando ao cuidado do leitor.

Olhando para o DFA da figura 4, e imediato concluir que a gramatica em causa nao e LR(0),pois existe um conflito reducao/transicao (shift/reduce) no estado 12 (reducao pela producao p4e transicao pelo sımbolo terminal id.Neste exemplo e importante observar que os estados 2 e 11 do automato LR(0) sao enganadores,pois apesar de conterem um item de reducao (pela producao p7 no estado 2, ou p5 no estado 11)nao ha conflitos reducao/transicao nesses estados visto que deles tambem nao ha transicoes porsımbolos terminais (so ha transicoes por um nao-terminal em cada caso, o que nao causa conflito).Fazendo a reducao apenas nos sımbolos terminais que pertencem ao follow do sımbolo a es-querda(LHS) da producao pela qual se quer reduzir—estrategia SLR(1)—e recorrendo aos calculosque foram efectuados na 1a parte da resolucao, verifica-se que:

• no estado 12 so se reduz pelo sımbolo terminal ′ >′ (Follow(ElemXML)) pelo que se eliminao conflito relativo ao terminal id

concluindo-se, portanto, que a gramatica em causa e SLR(1).

14

Page 15: Processamento de Linguagens Iprh/pl105f04resDCC.pdfProcessamento de Linguagens I LESI + LMCC (3o ano) 4o Ficha Pr´atica Ano Lectivo de 05/06 1 Objectivos Este ficha pr´atica cont´em

I0)

S’ -

> .D

ocX

ML

$ D

ocX

ML

->

.Mar

caA

br C

onte

udo

Mar

caFe

c M

arca

Abr

->

.’<

’ E

leX

ML

’>

I1)

S’ -

> D

ocX

ML

.$

Doc

XM

L

I2)

Doc

XM

L -

> M

Abr

. C

onte

udo

MFe

c C

onte

udo

-> .

Con

teud

o ->

.Con

teud

o C

ompo

nent

e

Mar

caA

br

I8)

Mar

caA

br -

> ’

<’

. Ele

XM

L ’

>’

Mar

caFe

c ->

’<

’ . ’

/’ id

’>

’E

leX

ML

->

.id

Atr

ibs

’<’

I3)

Doc

XM

L -

> M

Abr

Con

teud

o . M

Fec

Con

teud

o ->

Con

teud

o . C

ompo

nent

e C

ompo

nent

e ->

.pcd

ata

Com

pone

nte

-> .D

ocX

ML

Doc

XM

L -

> .M

Abr

Con

teud

o M

Fec

MA

br -

> .’

<’

Ele

XM

L ’

>’

MFe

c ->

. ’<

’ ’/

’ id

’>

Con

teud

oM

arca

Abr

I4)

Doc

XM

L -

> M

arca

Abr

Con

teud

o M

arca

Fec.

Mar

caFe

c

I5)

Con

teud

o ->

Con

teud

o C

ompo

nent

e.

Com

pone

nte

I6)

Com

pone

nte

-> p

cdat

a.

pcda

ta

I7)

Com

pone

nte

-> D

ocX

ML

.

Doc

XM

L’<

I9)

Mar

caA

br -

> ’

<’

Ele

XM

L .

’>’

Ele

XM

L

I11)

Ele

XM

L -

> id

. A

trib

s A

trib

s ->

. A

trib

s ->

.Atr

ibs

id ’

=’

str

id

I16)

Mar

caFe

c ->

’<

’ ’/

’ . i

d ’>

’/’

I10)

Mar

caA

br -

> ’

<’

Ele

XM

L ’

>’.

’>’

I12)

Ele

XM

L -

> id

Atr

ibs.

Atr

ibs

-> A

trib

s .id

’=

’ st

r

Atr

ibs

I13)

Atr

ibs

-> A

trib

s id

. ’=

’ st

r

id

I14)

Atr

ibs

-> A

trib

s id

’=

’ . s

tr

’=’

I15)

Atr

ibs

-> A

trib

s id

’=

’ st

r.

str

I17)

Mar

caFe

c ->

’<

’ ’/

’ id

. ’>

id

I18)

Mar

caFe

c ->

’<

’ ’/

’ id

’>

’.

’>’

Figura 4: DFA da gramatica independente do contexto ”Documento XML”.

15

Page 16: Processamento de Linguagens Iprh/pl105f04resDCC.pdfProcessamento de Linguagens I LESI + LMCC (3o ano) 4o Ficha Pr´atica Ano Lectivo de 05/06 1 Objectivos Este ficha pr´atica cont´em

2.4 Documentos sobre o Clero Catedralıcio

De modo a facilitar o trabalho de uma equipa de historiadores, que esta a levantar informacao, nosvarios arquivos do Paıs, sobre individualidades do Clero Catedralıcio portugues, definiu-se umalinguagem que permite processar automaticamente (no sentido de validar, normalizar e criar umabase de dados) as notas extraıdas de cada documento consultado.Mostra-se abaixo a respectiva gramatica independente de contexto, na qual: o Sımbolo Iniciale Documentos; os Sımbolos Terminais sao escritos em minusculas (pseudo-terminais), ou emmaiuscula (palavras-reservadas), ou entre aspas (sinais de pontuacao).

p1: Documentos -> Docp2: | Documentos Docp3: Doc -> "{" IdentDoc IdentClerigos Evento "}"p4: IdentDoc -> Arq CotaDoc DataRedaccao DataConsulta Redactor Tipop5: IdentClerigos -> Clerigop6: | IdentClerigos ";" Clerigop7: Clerigo -> Nome Apelido Diocese CategEcles Papelp8 ap13: Evento, Arq, Redactor, Nome, Apelido, Diocese -> strp14 ap16: CotaDoc, Tipo, Papel -> palp17: CategEcles -> BISPOp18: | CONEGOp19: | PRESBITEROp20: DataRedaccao -> datap21: DataConsulta -> data

Assumindo que o caracter $ representa o fim-de-ficheiro (do texto de entrada), calcule entao asTabelas aLL e LR acima pedidas.

Resolucao – 1.parte

Comecemos por construir a Tabela de Decisao LL(1), o que nos leva a calcular os lookahead decada uma das producoes em P3.Para isso note-se que nesta gramatica, e ao contrario dos exercıcios anteriores, nao ha sımbolosanulaveis.

• p1

lookahead(Documentos → Doc) = First(Doc)= First(”{”)= {”{”}

• p2

lookahead(Documentos → DocumentosDoc) = First(Documentos)

= First(Doc)⋃

First(Documentos)

3Recorde as formulas de calculo no documento com as definicoes formais em anexo.

16

Page 17: Processamento de Linguagens Iprh/pl105f04resDCC.pdfProcessamento de Linguagens I LESI + LMCC (3o ano) 4o Ficha Pr´atica Ano Lectivo de 05/06 1 Objectivos Este ficha pr´atica cont´em

= First(”{”)= {”{”}

• p3

lookahead(Doc → {IdentDoc IdentClerigos Evento}) = First(”{”)= {”{”}

• p4

lookahead(IdentDoc → Arq CotaDoc . . .) = First(Arq)= {str}

• p5

lookahead(IdentClerigos → Clerigo) = First(Clerigo)= First(Nome)= {str}

• p6

lookahead(IdentClerigos → IdentClerigos ”;”Clerigo) = First(IdentClerigos)

= First(Clerigo)⋃

First(IdentClerigos)

= First(Nome)= {str}

• p7

lookahead(Clerigo → Nome Apelido Diocese CategEcles Papel) = First(Nome)= {str}

• p8

lookahead(Evento → str) = {str}

17

Page 18: Processamento de Linguagens Iprh/pl105f04resDCC.pdfProcessamento de Linguagens I LESI + LMCC (3o ano) 4o Ficha Pr´atica Ano Lectivo de 05/06 1 Objectivos Este ficha pr´atica cont´em

• p9

lookahead(Arq → str) = {str}

• p10

lookahead(Redactor → str) = {str}

• p11

lookahead(Nome → str) = {str}

• p12

lookahead(Apelido → str) = {str}

• p13

lookahead(Diocese → str) = {str}

• p14

lookahead(CotaDoc → pal) = {pal}

• p15

lookahead(Tipo → str) = {pal}

• p16

lookahead(Papel → pal) = {pal}

• p17

lookahead(CategEcles → BISPO) = {BISPO}

18

Page 19: Processamento de Linguagens Iprh/pl105f04resDCC.pdfProcessamento de Linguagens I LESI + LMCC (3o ano) 4o Ficha Pr´atica Ano Lectivo de 05/06 1 Objectivos Este ficha pr´atica cont´em

• p18

lookahead(CategEcles → CONEGO) = {CONEGO}

• p19

lookahead(CategEcles → PRESBITERO) = {PREBISTERO}

• p20

lookahead(DataRedaccao → data) = {data}

• p21

lookahead(DataConsulta → data) = {data}

A partir dos resultados obtidos no calculo dos lookahead, podemos passar, entao, a construcao databela LL(1), seguindo sistematicamente o algoritmo recordado no dcumento anexo.Obtem-se, assim, a tabela seguinte:

{ } ; str pal data BISPO CONEGO PRESBITERO $Documentos p1/p2

Doc p3IdentDoc p4

IdentClerigos p5/p6Clerigo p7Evento p8

Arq p9Redactor p10

Nome p11Apelido p12Diocese p13CotaDoc p14

Tipo p15Papel p16

CategEcles p17 p18 p19DataRedaccao p20DataConsulta p21

Como podemos ver pelos resultados obtidos no calculo dos lookahead, a gramatica nao e LL(1),uma vez que:

• lookahead(p1)⋂

lookahead(p2) = { ”{”}

19

Page 20: Processamento de Linguagens Iprh/pl105f04resDCC.pdfProcessamento de Linguagens I LESI + LMCC (3o ano) 4o Ficha Pr´atica Ano Lectivo de 05/06 1 Objectivos Este ficha pr´atica cont´em

• lookahead(p5)⋂

lookahead(p6) = { str }

Esta conclusao tambem esta patente na tabela LL(1) acima, onde se identifica 1 conflito na linharelativa ao sımbolo nao-terminal Documentos (coluna ”{”) e 1 conflito na linha IdentClerigos(coluna str).

Resolucao – 2.parte

Para obter a tabelas de decisao BU, ACTION e GOTO, tem de se comecar por construir o automatode reconhecimento (DFA) LR(0), seguindo o metodo sistematico recordado no documento anexo.Comecando no estado 0 com o item

[Z → •Documentos ’$’]

obtemos o a DFA com 34 estados, que se mostra na figura 5.A partir da funcao de transicao, δ, do automato LR(0) calculado, e possıvel derivar as tabelas dedecisao BU cuja construcao aqui nao se inclui, ficando ao cuidado do leitor.

Olhando para o DFA da figura 5, e imediato concluir que a gramatica em causa e LR(0), poisnao existem conflitos, nem de reducao/transicao nem de reducao/reducao, em nenhum dos estadosdo automato.

20

Page 21: Processamento de Linguagens Iprh/pl105f04resDCC.pdfProcessamento de Linguagens I LESI + LMCC (3o ano) 4o Ficha Pr´atica Ano Lectivo de 05/06 1 Objectivos Este ficha pr´atica cont´em

I0)

Z -

> .D

ocum

ento

s $

Doc

umen

tos

-> .D

oc D

ocum

ento

s ->

.Doc

umen

tos

Doc

Doc

->

.’{’

Ide

ntD

oc I

dent

Cle

rigo

s E

vent

o ’}

I1)

Z -

> D

ocum

ento

s.$

Doc

umen

tos

-> D

ocum

ento

s.D

oc D

oc -

> .’

{’ I

dent

Doc

Ide

ntC

leri

gos

Eve

nto

’}’

Doc

umen

tos

I2)

Doc

umen

tos

-> D

oc.

Doc

I4)

Doc

->

’{’

. Id

entD

oc I

dent

Cle

rigo

s E

vent

o ’}

’ I

dent

Doc

->

.Arq

Cot

aDoc

Dat

aRed

acca

o D

ataC

onsu

lta R

edac

tor

Tip

o A

rq -

> .s

tr

’{’

I3)

Doc

umen

tos

-> D

ocum

ento

s D

oc.

Doc

’{’

I5)

Doc

->

’{’

Ide

ntD

oc .

Iden

tCle

rigo

s E

vent

o ’}

’ I

dent

Cle

rigo

s ->

.Cle

rigo

Ide

ntC

leri

gos

-> .I

dent

Cle

rigo

s ’;

’ C

leri

goC

leri

go -

> .N

ome

Ape

lido

Dio

cese

Cat

egE

cles

Pap

el N

ome

-> .s

tr

Iden

tDoc

I24)

Ide

ntD

oc -

> A

rq .

Cot

aDoc

Dat

aRed

acca

o D

ataC

onsu

lta R

edac

tor

Tip

o C

otaD

oc -

> .p

al

Arq

I35)

Arq

->

str

.

str

I6)

Doc

->

’{’

Ide

ntD

oc I

dent

Cle

rigo

s . E

vent

o ’}

’ I

dent

Cle

rigo

s ->

Ide

ntC

leri

gos

. ’;’

Cle

rigo

Eve

nto

-> .s

tr

Iden

tCle

rigo

s

I11)

Cle

rigo

->

Nom

e . A

pelid

o D

ioce

se C

ateg

Ecl

es P

apel

Ape

lido

-> .s

tr

Nom

e

I22)

Nom

e ->

str

.

str

I36)

Ide

ntC

leri

gos

-> C

leri

go.

Cle

rigo

I7)

Doc

->

’{’

Ide

ntD

oc I

dent

Cle

rigo

s E

vent

o . ’

}’

Eve

nto

I9)

Iden

tCle

rigo

s ->

Ide

ntC

leri

gos

’;’

. Cle

rigo

Cle

rigo

->

.Nom

e A

pelid

o D

ioce

se C

ateg

Ecl

es P

apel

Nom

e ->

.str

’;’

I23)

Eve

nto

-> s

tr.

str

I8)

Doc

->

’{’

Ide

ntD

oc I

dent

Cle

rigo

s E

vent

o ’}

’ .

’}’

I10)

Ide

ntC

leri

gos

-> I

dent

Cle

rigo

s C

leri

go.

Cle

rigo

Nom

est

r

I12)

Cle

rigo

->

Nom

e A

pelid

o . D

ioce

se C

ateg

Ecl

es P

apel

Dio

cese

->

.str

Ape

lido

I21)

Ape

lido

-> s

tr.

str

I13)

Cle

rigo

->

Nom

e A

pelid

o D

ioce

se .

Cat

egE

cles

Pap

el C

ateg

Ecl

es -

> .B

ISPO

Cat

egE

cles

->

.CO

NE

GO

Cat

egE

cles

->

.PR

ESB

ITE

RO

Dio

cese I2

0) D

ioce

se -

> s

tr.

str

I14)

Cle

rigo

->

Nom

e A

pelid

o D

ioce

se C

ateg

Ecl

es .

Pape

l P

apel

->

.pal

Cat

egE

cles

I17)

Cat

egE

cles

->

BIS

PO.B

ISPO

I18)

Cat

egE

cles

->

CO

NE

GO

.

CO

NE

GO

I19)

Cat

egE

cles

->

PR

ESB

ITE

RO

.

PRE

SBIT

ER

O

I15)

Cle

rigo

->

Nom

e A

pelid

o D

ioce

se C

ateg

Ecl

es P

apel

.

Pape

l

I16)

Pap

el -

> p

al.

pal

I25)

Ide

ntD

oc -

> A

rq C

otaD

oc .

Dat

aRed

acca

o D

ataC

onsu

lta R

edac

tor

Tip

o D

ataR

edac

cao

-> .d

ata

Cot

aDoc

I30)

Cot

aDoc

->

pal

.

pal

I26)

Ide

ntD

oc -

> A

rq C

otaD

oc D

ataR

edac

cao

.Dat

aCon

sulta

Red

acto

r T

ipo

Dat

aRed

acca

o ->

.dat

a

Dat

aRed

acca

o

I31)

Dat

aRed

acca

o ->

dat

a.data I2

7) I

dent

Doc

->

Arq

Cot

aDoc

Dat

aRed

acca

o D

ataC

onsu

lta .

Red

acto

r T

ipo

Red

acto

r ->

.str

Dat

aCon

sulta

I32)

Dat

aCon

sulta

->

dat

a.

data

I28)

Ide

ntD

oc -

> A

rq C

otaD

oc .

Dat

aRed

acca

o D

ataC

onsu

lta R

edac

tor

. Tip

o T

ipo

-> .p

al

Red

acto

r

I33)

Red

acto

r ->

str

.

str

I29)

Ide

ntD

oc -

> A

rq C

otaD

oc D

ataR

edac

cao

Dat

aCon

sulta

Red

acto

r T

ipo.

Tip

o

I34)

Tip

o ->

pal

.

pal

Figura 5: DFA da gramatica independente do contexto ”Clero Catedralıcio”.

21