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¸c˜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¸c˜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¸c˜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¸c˜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¸c˜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¸c˜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() =false∨true=true Null(T) =Null(F T0) =Null(F)∧Null(T0)
Null(T0) =Null(∗F T0)∨Null() =false∨true=true Null(F) =Null(id)∨Null( (E ) ) =false∨false=false
Introdu¸c˜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) =a∧b
Introdu¸c˜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¸c˜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¸c˜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 deT∗e 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¸c˜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¸c˜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¸c˜ao Reconhecimento por Aut´omatos com Pilha Analise descendente CFGparaLL(1)
O Conceito Gram´aticasLL(k)
Gram´aticas e Analisadores LL(1)
Exemplo
Introdu¸c˜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¸c˜ao Reconhecimento por Aut´omatos com Pilha Analise descendente CFGparaLL(1)
O Conceito Gram´aticasLL(k)
Gram´aticas e Analisadores LL(1)
Exemplo
Introdu¸c˜ao Reconhecimento por Aut´omatos com Pilha Analise descendente CFGparaLL(1)
O Conceito Gram´aticasLL(k)
Gram´aticas e Analisadores LL(1)
Exemplo
Introdu¸c˜ao Reconhecimento por Aut´omatos com Pilha Analise descendente CFGparaLL(1)
O Conceito Gram´aticasLL(k)
Gram´aticas e Analisadores LL(1)