• Nenhum resultado encontrado

Estas defini¸c˜oes permitam calcular a tabela de transi¸c˜ao, logo a fun¸c˜ao rhs e assim completar a escrita dum analisador descendente (aquiLL(1)).

Mas para de tal ´e preciso determinar algoritmicamente os conjuntos subjacentes a estas trˆes defini¸c˜oes. Vamos ver que se calculam como pontos fixos.

Princ´ıpio da t´ecnica de procura de ponto fixo: Proceder por etapas. Cada etapa recebe o resultado da etapa anterior (excepto a primeira). Assim o objectivo de cada etapa ´e refinar este resultado e fornecˆe-la a etapa seguinte. ´E assim preciso fornecer um valor inicial ao processo: a etapa 0.

Visto deste modo o resultado pretendido ´e gradualmente obtido e o processo para quando a sucess˜ao de etapa n˜ao produz mais nenhuma novidade. Dizemos que este resultado ´e o ponto fixo do processo de procura que termina assim neste ponto.

Introdu¸ao Reconhecimento por Aut´omatos com Pilha Analise descendente CFGparaLL(1)

O Conceito Gram´aticasLL(k)

Gram´aticas e Analisadores LL(1)

Null

Qualquer que seja a palavraα, seαcont´em um terminal ent˜ao necessariamenteNull(α) =false.

Logo as ´unicas palavras de (N∪T)que podem potencialmente derivar s˜ao palavras deN.

Assim, o primeiro passo ´e determinar que n˜ao-terminais (elementos de de N) derivam a palavra vazia.

Genericamente, a ideia subjacente ´e: X (∈N) deriva a palavra vaziase e s´o se existe uma produ¸c˜aoX ::=ouX ::=X1X2. . .Xntal que X1. . .Xnderivam todos eles a palavra vazia. Vamos de seguida precisar esta ideia e definir um conjunto de equa¸c˜oes para os n˜ao-terminais deN.

Introdu¸ao Reconhecimento por Aut´omatos com Pilha Analise descendente CFGparaLL(1)

O Conceito Gram´aticasLL(k)

Gram´aticas e Analisadores LL(1)

Null

Para um n˜ao-terminalX deN, sejamβ1. . . βno conjunto de todas as palavras de (N∪T)tais queX ::=βi, (1≤i ≤n) seja uma produ¸c˜ao.

Ent˜aoNull(X) =Null(β1)∨Null(β2)∨. . .∨Null(βn).

Vamos agora debru¸car-nos sobre o valor individual dosNull(βi):

Casoβi =. Null() =true Casoβi =X1X2. . .Xn.

Null(X1X2. . .Xn) =Null(X1)∧. . .∧Null(Xn).

Casoβi ∈((N∪T)−N). Null(βi) =false

Introdu¸ao Reconhecimento por Aut´omatos com Pilha Analise descendente CFGparaLL(1)

O Conceito Gram´aticasLL(k)

Gram´aticas e Analisadores LL(1)

Null

Como as produ¸c˜oes (logo, as equa¸c˜oes) podem ser recursivas temos de proceder por itera¸c˜ao. Vamos construir uma tabelaTNULLonde as linhas s˜ao os n˜ao-terminais da gram´atica e as colunas as itera¸c˜oes do algoritmo.

Assim,TNULL(X,i) representa o valor deNull(X) na etapai do processo de c´alculo.

Para come¸car, determinar para cada n˜ao terminalX a equa¸c˜aoNull que lhe corresponde.

Introdu¸ao Reconhecimento por Aut´omatos com Pilha Analise descendente CFGparaLL(1)

O Conceito Gram´aticasLL(k)

Gram´aticas e Analisadores LL(1)

Null

O processo de procura de ponto fixo define-se da seguinte forma:

Etapa 0. Todos os n˜ao-terminais s˜ao marcados como n˜ao gerando(ou seja ∀X ∈N,TNULL(X,0) =false)

Etapai+ 1.

Verificamos se existem n˜ao-terminaisX com produ¸c˜aoX ::=

que ainda n˜ao foram marcadas como gerandona etapai anterior. Neste casoTNULL(X,i+ 1) =true.

Se existir regras da formaX ::=X1X2. . .Xn tais queX1. . .Xn

s˜ao marcados como derivandona etapai, ou seja

∀j∈N,1≤j≤n,TNULL(Xj,i) =true , ent˜ao marcamosX como derivando a palavra vaziaTNULL(X,i+ 1) =true.

Este processo acaba quando encontramos um ponto fixo, ou seja quando pela primeira vez repetimos uma coluna. O valor desta coluna (que ´e o ponto fixo procurado) representa o valor final deNull.

Introdu¸ao Reconhecimento por Aut´omatos com Pilha Analise descendente CFGparaLL(1)

O Conceito Gram´aticasLL(k)

Gram´aticas e Analisadores LL(1)

Exemplo

As regras 3 e 6 derivam explicitamente a palavra vazia

As regras 1 e 4 derivam potencialmente a palavra vazia. Mas veremos j´a com a tabelaTNULLque nunca derivar˜aodevido ao facto deF e deT n˜ao derivarem.

Introdu¸ao Reconhecimento por Aut´omatos com Pilha Analise descendente CFGparaLL(1)

O Conceito Gram´aticasLL(k)

Gram´aticas e Analisadores LL(1)

Exemplo

1 E ::=T E0 2 E0::= +T E0 3 E0::=

4 T ::=F T0 5 T0::=∗F T0 6 T0::=

7 F ::=id 8 F ::= (E )

Null(E) =Null(T E0) =Null(T)Null(E0)

Null(E0) =Null(+T E0)Null() =falsetrue=true Null(T) =Null(F T0) =Null(F)Null(T0)

Null(T0) =Null(∗F T0)Null() =falsetrue=true Null(F) =Null(id)Null( (E ) ) =falsefalse=false

Introdu¸ao Reconhecimento por Aut´omatos com Pilha Analise descendente CFGparaLL(1)

O Conceito Gram´aticasLL(k)

Gram´aticas e Analisadores LL(1)

Exemplo

1 E ::=T E0 2 E0::= +T E0 3 E0::=

4 T ::=F T0 5 T0::=∗F T0 6 T0::=

7 F ::=id 8 F ::= (E )

Como funciona o processo iterativo? Por exemplo: calcular Null(E) =Null(T)Null(E0) na etapai+ 1

Olhar para os valores deNull(T) e deNull(E0) na etapai, digamosaeb.

Ent˜ao na etapai+ 1,Null(E) =ab

Introdu¸ao Reconhecimento por Aut´omatos com Pilha Analise descendente CFGparaLL(1)

O Conceito Gram´aticasLL(k)

Gram´aticas e Analisadores LL(1)

Exemplo

E0 false true true

T false Null(F)∧Null(T0) =false false

T0 false true true

F false false false

FIM

Introdu¸ao Reconhecimento por Aut´omatos com Pilha Analise descendente CFGparaLL(1)

O Conceito Gram´aticasLL(k)

Gram´aticas e Analisadores LL(1)

Exemplo

Na etapa 1C ´e marcado como verdade com base no passo 1 (devido a produ¸c˜ao 7). Na etapa 2,B´e marcado comotrue com base no passo 2 (devido a produ¸c˜ao 5). Na etapa 3,A´e marcado comotrue com base no passo 2 (devido a produ¸c˜ao 3). etc...

Introdu¸ao Reconhecimento por Aut´omatos com Pilha Analise descendente CFGparaLL(1)

O Conceito Gram´aticasLL(k)

Gram´aticas e Analisadores LL(1)

Prim

Sejaαuma palavra de (N∪T). Ent˜aoαtem a forma seguinte α = m1X1m2X2. . .mnXnmn+1(osmis s˜ao palavras deTe osXj

n˜ao-terminais)

O calculo dePrim(α) baseia-se sobre a natureza dem1.

1 sem16=ent˜aoPrim(m1X1. . .Xnmn+1) ={a}ondea´e o primeiro caracter dem1.

2 sem1=ent˜ao

Introdu¸ao Reconhecimento por Aut´omatos com Pilha Analise descendente CFGparaLL(1)

O Conceito Gram´aticasLL(k)

Gram´aticas e Analisadores LL(1)

Prim

Para calcular o conjuntoPrimvamos igualmente proceder por itera¸c˜ao sobre uma tabela at´e encontrar um ponto fixo.

Determinar para cada n˜ao terminalX a equa¸c˜aoPrimque lhe corresponde.

O processo vai construir uma tabelaTPRIM em que as linhas s˜ao n˜ao terminais e as colunas as etapas do processo.

Aplicar o algoritmo de procura de ponto fixo seguinte:

Etapa 0. Todos os n˜ao terminais tem como conjunto de primeiros caracteres o conjunto vazio.

Etapai+ 1: Actualizamos os conjuntos com base nas equa¸c˜oes e os conjuntos obtidos na etapai anterior.

Introdu¸ao Reconhecimento por Aut´omatos com Pilha Analise descendente CFGparaLL(1)

O Conceito Gram´aticasLL(k)

Gram´aticas e Analisadores LL(1)

Exemplo

1 E ::=T E0 2 E0::= +T E0 3 E0::=

4 T ::=F T0 5 T0::=∗F T0 6 T0::=

7 F ::=id 8 F ::= (E )

Prim(E) =Prim(T E0) =Prim(T), (porqueNull(T) =false) Prim(E0) =Prim(+T E0)Prim() ={+}

Prim(T) =Prim(F T0) =Prim(F), (porqueNull(F) =false) Prim(T0) =Prim(∗F T0)Prim() ={∗}

Prim(F) =Prim(id)Prim( (E) ) ={id, (}

Introdu¸ao Reconhecimento por Aut´omatos com Pilha Analise descendente CFGparaLL(1)

O Conceito Gram´aticasLL(k)

Gram´aticas e Analisadores LL(1)

Exemplo

Introdu¸ao Reconhecimento por Aut´omatos com Pilha Analise descendente CFGparaLL(1)

O Conceito Gram´aticasLL(k)

Gram´aticas e Analisadores LL(1)

Seg

Para o calculo deSeg(X),X ∈N, vamos ter em conta o s´ımbolo terminal]que far´a sempre parte do conjuntoSeg do s´ımbolo inicialS(ou seja]∈Seg(S)).

Temos: Seg(X) = (S

Y::=αXβ(Prim(β)))∪(S

Y::=αXβNull(β)Seg(Y)) O primeiro passo da procura dos conjuntosSeg ´e estabelecer para cada n˜ao-terminal a equa¸c˜ao a qual o seu conjuntoSeg obedece.

Mais uma vez vamos proceder por itera¸c˜ao sobre uma tabelaTSEG at´e chegar a um ponto fixo.

Etapa 0: todos os s´ımbolos deNtem por conjunto Seg o conjunto vazio excepto o s´ımbolo inicialS. Seg(S) ={]}

Etapai+ 1: Actualizamos os diferentes conjuntosSeg de acordo com os conjuntos calculados na etapai.

Introdu¸ao Reconhecimento por Aut´omatos com Pilha Analise descendente CFGparaLL(1)

O Conceito Gram´aticasLL(k)

Gram´aticas e Analisadores LL(1)

Exemplo

Introdu¸ao Reconhecimento por Aut´omatos com Pilha Analise descendente CFGparaLL(1)

O Conceito Gram´aticasLL(k)

Gram´aticas e Analisadores LL(1)

Exemplo

Introdu¸ao Reconhecimento por Aut´omatos com Pilha Analise descendente CFGparaLL(1)

O Conceito Gram´aticasLL(k)

Gram´aticas e Analisadores LL(1)

Documentos relacionados