5.5.4 – Métodos para a construção da 5.5.4 – Métodos para a construção da tabela de análise LRtabela de análise LR
Tabela de análise LR = Tabela de análise LR =
Tabela de ações Tabela de ações Tabela de Tabela de transiçõestransições
Gramáticas LR(k) Gramáticas LR(k) ou simplesmente ou simplesmente LRLR permitem a construção dessas tabelaspermitem a construção dessas tabelas
YaccYacc usa essas tabelas usa essas tabelas
Gramáticas ambíguas Gramáticas ambíguas não são não são LRLR, mas em , mas em YaccYacc há dispositivos para resolver há dispositivos para resolver ambiguidadesambiguidades
NNuma uma gramática LRgramática LR, os analisadores por , os analisadores por deslocamento e redução têm a capacidade de deslocamento e redução têm a capacidade de reconhecer asas no topo da pilhareconhecer asas no topo da pilha
Na realidade, eles utilizam um Na realidade, eles utilizam um autômato autômato determinístico reconhecedor de prefixos determinístico reconhecedor de prefixos viáveisviáveis na pilha na pilha
Nesses analisadores, Nesses analisadores, nãonão é necessário é necessário percorrer a pilhapercorrer a pilha para saber quando uma para saber quando uma asaasa aparece aparece no topono topo::
O O estadoestado no topo da pilha no topo da pilha contémcontém toda a toda a informaçãoinformação necessária necessária
São conhecidos São conhecidos três métodostrês métodos para a para a construção de uma construção de uma tabela de análise LRtabela de análise LR::
Método SLRMétodo SLR ( (simplesimple LR): aplica-se a um LR): aplica-se a um menor número de gramáticas; é o de mais menor número de gramáticas; é o de mais fácil implementaçãofácil implementação
Método CLRMétodo CLR ( (canonicalcanonical LR): mais LR): mais poderoso e de mais difícil implementaçãopoderoso e de mais difícil implementação
Método LALRMétodo LALR ( (look-aheadlook-ahead LR): LR): intermediário em potência e dificuldade de intermediário em potência e dificuldade de implementaçãoimplementação
Métodos SLRMétodos SLR ( (simplesimple LR), LR), CLRCLR ( (canonicalcanonical LR) e LR) e LALRLALR ( (look-aheadlook-ahead LR): LR):
O O segundo segundo e o e o terceiro métodoterceiro método usam os usam os mesmos princípios do mesmos princípios do primeiroprimeiro e acrescentam e acrescentam a esse informações sobre os a esse informações sobre os átomos átomos seguintesseguintes do que está em análise do que está em análise
O O terceiro métodoterceiro método é uma é uma simplificaçãosimplificação do do segundo, diminuindo muito a segundo, diminuindo muito a memóriamemória gasta gasta no processono processo
É o É o mais usadomais usado na prática na prática YaccYacc usa o método usa o método LALRLALR
Métodos SLRMétodos SLR ( (simplesimple LR), LR), CLRCLR ( (canonicalcanonical LR) e LR) e LALRLALR ( (look-aheadlook-ahead LR): LR):
Nesta disciplinaNesta disciplina será apresentado somente o será apresentado somente o método SLRmétodo SLR
Os outros dois usam os Os outros dois usam os princípios básicosprincípios básicos desse primeirodesse primeiro
Fundamental é a concepção do Fundamental é a concepção do autômato autômato finito determinísticofinito determinístico, reconhecedor de , reconhecedor de prefixos viáveisprefixos viáveis, para o controle da , para o controle da pilhapilha do do analisadoranalisador
5.5.5 – Autômato finito não-5.5.5 – Autômato finito não-determinístico LRdeterminístico LR
Origem do autômato finitoOrigem do autômato finito determinístico determinístico ((AFDAFD): ):
Autômato finito Autômato finito não-determinísticonão-determinístico ((AFNDAFND) reconhecedor de ) reconhecedor de prefixos viáveisprefixos viáveis
O O AFNDAFND é transformado num é transformado num AFD AFD equivalenteequivalente
Seja então a Seja então a concepção de um AFNDconcepção de um AFND reconhecedor de reconhecedor de prefixos viáveisprefixos viáveis de uma de uma gramáticagramática
Os Os estadosestados de um de um AFNDAFND são chamados são chamados itensitens de produções de produções
Item de produçãoItem de produção de uma gramática é a de uma gramática é a mesma mesma produçãoprodução contendo um contendo um pontoponto ( (‘.’‘.’) em ) em alguma posição do lado direitoalguma posição do lado direito
A produção A produção AAXYZXYZ tem 4 itens, a saber: tem 4 itens, a saber:
AA. XYZ . XYZ ,, A AX . YZ X . YZ ,,
AAXY . Z XY . Z ee A AXYZ .XYZ .
A produção vazia A produção vazia AAεε tem 1 item : tem 1 item : AA . .
Interpretação de um item:Interpretação de um item:
Seja o item Seja o item A A αα..ββ
É um É um estadoestado do AFND no qual já foi vista na do AFND no qual já foi vista na entrada uma sub-sentença derivada de entrada uma sub-sentença derivada de α α e se e se espera encontrar a seguir outra derivada deespera encontrar a seguir outra derivada de β β
O O AFND AFND de uma gramática trabalha com a de uma gramática trabalha com a mesma mesma aumentadaaumentada de um novo símbolo inicial de um novo símbolo inicial S’S’ e uma nova produção, e uma nova produção, S’S’SS
Exemplo:Exemplo: gramática de expressões aumentada e gramática de expressões aumentada e seus 20 itensseus 20 itens
Um Um itemitem pode ser representado por um pode ser representado por um par de par de inteirosinteiros: :
O primeiro sendo o O primeiro sendo o número da produçãonúmero da produção e o e o segundo a segundo a posição do pontoposição do ponto
Num Num AFNDAFND, há , há dois tiposdois tipos de transições: de transições:
De qualquer estado do tipo De qualquer estado do tipo A A .X.X para para outro estado do tipo outro estado do tipo A A X.X., cuja condição , cuja condição para transição é o símbolo para transição é o símbolo XX ( (X X {N {N }}))
De qualquer estado do tipo De qualquer estado do tipo A A .B.B para para outro estado do tipo outro estado do tipo B B . ., cuja condição para , cuja condição para transição é o símbolo transição é o símbolo εε (vazio) (vazio)
A .X A X.
A .B B .
X
ε
O 2º tipo caracteriza o não-determinismo
p/ e4
+E
e1: E’ .E inicial
Ee8: E’ E.
e2: E
.E+T e9: E E.
+T e15: E
E+.T
T e18: E
E+T.
e3: E .T T
e10: E T.
e4: T .T*F T e11: T
T.*F e16: T
T*.F
F e19: T
T*F.
*
e5: T .F F
e12: T F.
e6: F .(E) (
e13: F (.E) e17: F (E.) )
e20: F (E). E
e7: F .id id
e14: F id.
p/ e5
p/ e6
p/ e7
p/ e2
p/ e3
AFND da gramática anterior
Todos os estados são finais
e1: E’ .E inicial
Ee8: E’ E.
e2: E
.E+T
E e9: E E.
+T e15: E
E+.T
T e18: E
E+T.
+
e3: E .T T
e10: E T.
e4: T .T*F T e11: T
T.*F e16: T
T*.F
F e19: T
T*F.
*
e5: T .F F
e12: T F.
e6: F .(E) (
e13: F (.E) e17: F (E.) )
e20: F (E). E
e7: F .id id
e14: F id.
p/ e4
p/ e5
p/ e6
p/ e7
p/ e2
p/ e3
Na impossibilidade de transição, o percurso sobre o prefixo é paralisado
O prefixo a ser analisado é o conteúdo da pilha
e1: E’ .E inicial
Ee8: E’ E.
e2: E
.E+T
E e9: E E.
+T e15: E
E+.T
T e18: E
E+T.
+
e3: E .T T
e10: E T.
e4: T .T*F T e11: T
T.*F e16: T
T*.F
F e19: T
T*F.
*
e5: T .F F
e12: T F.
e6: F .(E) (
e13: F (.E) e17: F (E.) )
e20: F (E). E
e7: F .id id
e14: F id.
p/ e4
p/ e5
p/ e6
p/ e7
p/ e2
p/ e3
Seja a análise do prefixo E + ( T * id
E + ( T * id
e1: E’ .E inicial
Ee8: E’ E.
e2: E
.E+T
E e9: E E.
+T e15: E
E+.T
T e18: E
E+T.
+
e3: E .T T
e10: E T.
e4: T .T*F T e11: T
T.*F e16: T
T*.F
F e19: T
T*F.
*
e5: T .F F
e12: T F.
e6: F .(E) (
e13: F (.E) e17: F (E.) )
e20: F (E). E
e7: F .id id
e14: F id.
p/ e4
p/ e5
p/ e6
p/ e7
p/ e2
p/ e3
E + ( T * idE + ( T * id
e1: E’ .E inicial
Ee8: E’ E.
e2: E
.E+T
E e9: E E.
+T e15: E
E+.T
T e18: E
E+T.
+
e3: E .T T
e10: E T.
e4: T .T*F T e11: T
T.*F e16: T
T*.F
F e19: T
T*F.
*
e5: T .F F
e12: T F.
e6: F .(E) (
e13: F (.E) e17: F (E.) )
e20: F (E). E
e7: F .id id
e14: F id.
p/ e4
p/ e5
p/ e6
p/ e7
p/ e2
p/ e3
E + ( T * idE + ( T * id
e1: E’ .E inicial
Ee8: E’ E.
e2: E
.E+T
E e9: E E.
+T e15: E
E+.T
T e18: E
E+T.
+
e3: E .T T
e10: E T.
e4: T .T*F T e11: T
T.*F e16: T
T*.F
F e19: T
T*F.
*
e5: T .F F
e12: T F.
e6: F .(E) (
e13: F (.E) e17: F (E.) )
e20: F (E). E
e7: F .id id
e14: F id.
p/ e4
p/ e5
p/ e6
p/ e7
p/ e2
p/ e3
E + ( T * idE + ( T * id
e1: E’ .E inicial
Ee8: E’ E.
e2: E
.E+T
E e9: E E.
+T e15: E
E+.T
T e18: E
E+T.
+
e3: E .T T
e10: E T.
e4: T .T*F T e11: T
T.*F e16: T
T*.F
F e19: T
T*F.
*
e5: T .F F
e12: T F.
e6: F .(E) (
e13: F (.E) e17: F (E.) )
e20: F (E). E
e7: F .id id
e14: F id.
p/ e4
p/ e5
p/ e6
p/ e7
p/ e2
p/ e3
E + ( T * idE + ( T * id
e1: E’ .E inicial
Ee8: E’ E.
e2: E
.E+T
E e9: E E.
+T e15: E
E+.T
T e18: E
E+T.
+
e3: E .T T
e10: E T.
e4: T .T*F T e11: T
T.*F e16: T
T*.F
F e19: T
T*F.
*
e5: T .F F
e12: T F.
e6: F .(E) (
e13: F (.E) e17: F (E.) )
e20: F (E). E
e7: F .id id
e14: F id.
p/ e4
p/ e5
p/ e6
p/ e7
p/ e2
p/ e3
E + ( T * idE + ( T * id
e1: E’ .E inicial
Ee8: E’ E.
e2: E
.E+T
E e9: E E.
+T e15: E
E+.T
T e18: E
E+T.
+
e3: E .T T
e10: E T.
e4: T .T*F T e11: T
T.*F e16: T
T*.F
F e19: T
T*F.
*
e5: T .F F
e12: T F.
e6: F .(E) (
e13: F (.E) e17: F (E.) )
e20: F (E). E
e7: F .id id
e14: F id.
p/ e4
p/ e5
p/ e6
p/ e7
p/ e2
p/ e3
E + ( T * idE + ( T * id
e1: E’ .E inicial
Ee8: E’ E.
e2: E
.E+T
E e9: E E.
+T e15: E
E+.T
T e18: E
E+T.
+
e3: E .T T
e10: E T.
e4: T .T*F T e11: T
T.*F e16: T
T*.F
F e19: T
T*F.
*
e5: T .F F
e12: T F.
e6: F .(E) (
e13: F (.E) e17: F (E.) )
e20: F (E). E
e7: F .id id
e14: F id.
p/ e4
p/ e5
p/ e6
p/ e7
p/ e2
p/ e3
E + ( T * idE + ( T * id - Prefixo viável
E + ( T * id - Prefixo viável
O prefixo E + ( T * id ) é inviável
No No exemplo anteriorexemplo anterior, analisou-se apenas um , analisou-se apenas um prefixoprefixo
No No exemplo a seguir exemplo a seguir será analisada uma será analisada uma sentençasentença e também os e também os prefixosprefixos necessários para essa análise necessários para essa análise
Exemplo: Exemplo: Seja a Seja a gramáticagramática do exemplo inicial do exemplo inicial aumentadaaumentada
SS’ ’ S S S S a A B e A a A B e A A b c | b B A b c | b B d d
E a análise da sentença E a análise da sentença abbcdeabbcde
Relembrando sua redução:Relembrando sua redução:
a a bb b c d e b c d e a a A b c A b c d e d e a A a A dd e e a A B e a A B e SS
A
a eB
cb
A
d
b
SS’.S inicial S’S.
S.aABe
Sa.ABe
SaA.Be
SaAB.e
SaABe.
A.Abc AA.bc AAb.c AAbc.
A.b Ab.
B.d Bd.
abbcdeabbcde
Pilha Entrada
O AFNDInício da análise
S’.S inicial
SS’S.
S.aABe
a Sa.ABe
SaA.B
e B SaAB.
e SaABe
.
A.Abc A
AA.bc AAb.c AAbc.
A.b Ab.
B.d Bd.
A e
b c
b
d
abbcdeabbcde
Pilha Entrada
a é prefixo viávelOs 2 estados não são finais de produção
Ação: Deslocar a
Início da análise
Obs.: só se pode reduzir, caso pelo menos um dos estados seja final de produção
S’.S inicial
SS’S.
S.aABe
a Sa.ABe
a
SaA.Be
B SaAB.e
SaABe.
A.Abc A
AA.bc AAb.c AAbc.
A.b Ab.
B.d Bd.
A e
b c
b
d
bbcdebbcde
Pilha Entrada
S’.S inicial
SS’S.
S.aABe
a Sa.ABe
a
SaA.Be
B SaAB.e
SaABe.
A.Abc A
AA.bc AAb.c AAbc.
A.b Ab.
B.d Bd.
A e
b c
b
d
bbcdebbcde
Pilha Entrada
ab é prefixo viávelOs 3 estados não são finais de produção
Ação: Deslocar b
S’.S inicial
SS’S.
S.aABe
a Sa.ABe
ab
SaA.Be
B SaAB.e
SaABe.
A.Abc A
AA.bc AAb.c AAbc.
A.b Ab.
B.d Bd.
A e
b c
b
d
bcdebcde
Pilha Entrada
S’.S inicial
SS’S.
S.aABe
a Sa.ABe
ab
SaA.Be
B SaAB.e
SaABe.
A.Abc A
AA.bc AAb.c AAbc.
A.b Ab.
B.d Bd.
A e
b c
b
d
bcdebcde
Pilha Entrada
abb não é prefixo viável: não deslocar bO estado é final de produção;b Seguinte (A) (b na entrada)
Ação: Reduzir b para A
Se b Seguinte (A), não reduziria;
Nesse caso haveria erro
S’.S inicial
SS’S.
S.aABe
a Sa.ABe
aA
SaA.Be
B SaAB.e
SaABe.
A.Abc A
AA.bc AAb.c AAbc.
A.b Ab.
B.d Bd.
A e
b c
b
d
bcdebcde
Pilha Entrada
S’.S inicial
SS’S.
S.aABe
a Sa.ABe
aA
SaA.Be
B SaAB.e
SaABe.
A.Abc A
AA.bc AAb.c AAbc.
A.b Ab.
B.d Bd.
A e
b c
b
d
bcdebcde
Pilha Entrada
aA é prefixo viávelaAb é prefixo viávelOs 3 estados não são finais de produção
Ação: Deslocar b
S’.S inicial
SS’S.
S.aABe
a Sa.ABe
aAb
SaA.Be
B SaAB.e
SaABe.
A.Abc A
AA.bc AAb.c AAbc.
A.b Ab.
B.d Bd.
A e
b c
b
d
cdecde
Pilha Entrada
S’.S inicial
SS’S.
S.aABe
a Sa.ABe
aAb
SaA.Be
B SaAB.e
SaABe.
A.Abc A
AA.bc AAb.c AAbc.
A.b Ab.
B.d Bd.
A e
b c
b
d
cdecde
Pilha Entrada
aAbc é prefixo viávelO estado não é final de produção
Ação: Deslocar c
b é lado direito de produção, mas não há redução pois o estado não é final de produção; só no item (Ab.) isso poderia acontecer
S’.S inicial
SS’S.
S.aABe
a Sa.ABe
aAbc
SaA.Be
B SaAB.e
SaABe.
A.Abc A
AA.bc AAb.c AAbc.
A.b Ab.
B.d Bd.
A e
b c
b
d
dede
Pilha Entrada
S’.S inicial
SS’S.
S.aABe
a Sa.ABe
aAbc
SaA.Be
B SaAB.e
SaABe.
A.Abc A
AA.bc AAb.c AAbc.
A.b Ab.
B.d Bd.
A e
b c
b
d
dede
Pilha Entrada
aAbcd não é prefixo viávelO estado é final de produçãod Seguinte (A) (d na entrada)
Ação: Reduzir Abc para A
S’.S inicial
SS’S.
S.aABe
a Sa.ABe
aA
SaA.Be
B SaAB.e
SaABe.
A.Abc A
AA.bc AAb.c AAbc.
A.b Ab.
B.d Bd.
A e
b c
b
d
dede
Pilha Entrada
S’.S inicial
SS’S.
S.aABe
a Sa.ABe
aA
SaA.Be
B SaAB.e
SaABe.
A.Abc A
AA.bc AAb.c AAbc.
A.b Ab.
B.d Bd.
A e
b c
b
d
dede
Pilha Entrada
aA é prefixo viávelaAd é prefixo viávelOs 3 estados não são finais de produção
Ação: Deslocar d
S’.S inicial
SS’S.
S.aABe
a Sa.ABe
aAd
SaA.Be
B SaAB.e
SaABe.
A.Abc A
AA.bc AAb.c AAbc.
A.b Ab.
B.d Bd.
A e
b c
b
d
ee
Pilha Entrada
S’.S inicial
SS’S.
S.aABe
a Sa.ABe
aAd
SaA.Be
B SaAB.e
SaABe.
A.Abc A
AA.bc AAb.c AAbc.
A.b Ab.
B.d Bd.
A e
b c
b
d
ee
Pilha Entrada
aAde não é prefixo viávelO estado é final de produçãoe Seguinte (B) (e na entrada)
Ação: Reduzir d para B
S’.S inicial
SS’S.
S.aABe
a Sa.ABe
aAB
SaA.Be
B SaAB.e
SaABe.
A.Abc A
AA.bc AAb.c AAbc.
A.b Ab.
B.d Bd.
A e
b c
b
d
ee
Pilha Entrada
S’.S inicial
SS’S.
S.aABe
a Sa.ABe
aAB
SaA.Be
B SaAB.e
SaABe.
A.Abc A
AA.bc AAb.c AAbc.
A.b Ab.
B.d Bd.
A e
b c
b
d
ee
Pilha Entrada
aAB é prefixo viávelaABe é prefixo viávelO estado não é final de produção
Ação: Deslocar e
S’.S inicial
SS’S.
S.aABe
a Sa.ABe
aABe
SaA.Be
B SaAB.e
SaABe.
A.Abc A
AA.bc AAb.c AAbc.
A.b Ab.
B.d Bd.
A e
b c
b
d
Pilha Entrada
S’.S inicial
SS’S.
S.aABe
a Sa.ABe
aABe
SaA.Be
B SaAB.e
SaABe.
A.Abc A
AA.bc AAb.c AAbc.
A.b Ab.
B.d Bd.
A e
b c
b
d
Pilha Entrada
Acabou a entradaO estado é final de produção
Ação: Reduzir aABe para S
S’.S inicial
SS’S.
S.aABe
a Sa.ABe
S
SaA.Be
B SaAB.e
SaABe.
A.Abc A
AA.bc AAb.c AAbc.
A.b Ab.
B.d Bd.
A e
b c
b
d
Pilha Entrada
S’.S inicial
SS’S.
S.aABe
a Sa.ABe
S
SaA.Be
B SaAB.e
SaABe.
A.Abc A
AA.bc AAb.c AAbc.
A.b Ab.
B.d Bd.
A e
b c
b
d
Pilha Entrada
S é prefixo viávelO estado é final da produção inicialA entrada está vazia
Ação: Aceitar a sentença
Se a entrada não estivesse vazia: erro
Observações:Observações:
Se não chegar ao final de alguma produção e o Se não chegar ao final de alguma produção e o deslocamento for inviável: deslocamento for inviável: erro na sentençaerro na sentença
Se deslocamento for viável, tendo chegado ao Se deslocamento for viável, tendo chegado ao final de alguma produção final de alguma produção AA, mas , mas entrada entrada Seguinte(A)Seguinte(A): : deslocadesloca
Se deslocamento for inviável, tendo chegado ao Se deslocamento for inviável, tendo chegado ao final de alguma produção final de alguma produção AA, mas , mas entrada entrada Seguinte(A)Seguinte(A): : erro na sentençaerro na sentença
Se deslocamento for viável, tendo chegado ao Se deslocamento for viável, tendo chegado ao final de alguma produção final de alguma produção AA e e entrada entrada Seguinte(A)Seguinte(A): : conflito shift-reduceconflito shift-reduce
Se deslocamento for inviável, tendo chegado ao Se deslocamento for inviável, tendo chegado ao final de duas produções e final de duas produções e entrada entrada Seguinte(Ambos lados esquerdos)Seguinte(Ambos lados esquerdos): : conflito conflito reduce-reducereduce-reduce
Diferenças entre o método SLRDiferenças entre o método SLR e os métodos e os métodos CLRCLR e e LALRLALR::
A principal diferença está em A principal diferença está em conflitosconflitos que que aparecem no primeiro método e são aparecem no primeiro método e são resolvidosresolvidos nos outros doisnos outros dois
Exemplo:Exemplo: seja uma gramática não-ambígua e a seja uma gramática não-ambígua e a seguinte situação na seguinte situação na Pilha Pilha Entrada Entrada
Seja por hipótese o deslocamento de Seja por hipótese o deslocamento de a a viável, a viável, a existência da produção existência da produção AAα e α e aa Seguinte(A) Seguinte(A)
O método O método SLRSLR visto notificará conflito visto notificará conflito shift-shift-reducereduce
β α a _ _ _ _a _ _ _ _Pilha Entrada
Os métodos Os métodos CLRCLR e e LALRLALR exploram as duas exploram as duas alternativas desse conflitoalternativas desse conflito
Na alternativa de redução, Na alternativa de redução, Pilha Pilha Entrada Entrada fica:fica:
Há casos em que Há casos em que βA βA não contém asa enão contém asa e βAa βAa não é não é viável, ou seja, não pode reduzir nem deslocarviável, ou seja, não pode reduzir nem deslocar
Então a hipótese da redução de Então a hipótese da redução de para para AA pode pode ser descartada e o ser descartada e o conflitoconflito detectado pelo detectado pelo método método SLRSLR não é real não é real
β α a _ _ _ _a _ _ _ _Pilha Entrada
β A a _ _ _ _a _ _ _ _Pilha Entrada
Conclui-se que os estados do Conclui-se que os estados do AFNDAFND do método do método SLRSLR não têm informações do contexto mais à não têm informações do contexto mais à esquerda (esquerda (), afim de decidir por um ), afim de decidir por um shiftshift diante de um diante de um reducereduce falso falso
Há Há gramáticas não-ambíguasgramáticas não-ambíguas para as quais, para as quais, qualquerqualquer método LR gera tabelas de ações método LR gera tabelas de ações contendo contendo conflitosconflitos
Felizmente, tais gramáticas podem geralmente Felizmente, tais gramáticas podem geralmente ser ser evitadasevitadas para aplicações em para aplicações em linguagens linguagens de programaçãode programação
5.5.6 – Autômato finito determinístico 5.5.6 – Autômato finito determinístico LRLR
O percurso em um O percurso em um AFNDAFND consome consome muito muito tempotempo; melhor é ; melhor é transformátransformá-lo em um -lo em um AFDAFD
Seja agora a Seja agora a transformaçãotransformação de um de um AFNDAFND num num AFDAFD equivalente equivalente
Cada Cada estadoestado do do AFDAFD é representado por um é representado por um conjunto de itensconjunto de itens das produções da gramática das produções da gramática
Um Um itemitem pode estar em pode estar em mais de ummais de um desses desses conjuntosconjuntos
e1 inicial
e8
e2 e9 e1
5 e18
e3 e1
0
e4 e11 e16 e19
e5 e12
e6 e13 e17 e20
e7 e1
4
E
E T+
T
T F*
F
()E
id
p/ e4
p/ e5
p/ e6
p/ e7
p/ e2
p/ e3
Exemplo: transformação do AFND da gramática de expressões anterior num AFD
Itens acessados por e1
e1 inicial
Ee8
e2 E e9 e1
5
T e18 +
e3 T e1
0
e4 T e11 e16 F e19 *
e5 F
e12
e6
(e13 e17 ) e20 E
e7 id e1
4
p/ e4
p/ e5
p/ e6
p/ e7
p/ e2
p/ e3
Itens acessados por e1
e1 e2
e3 e4 e5 e6 e7
I0 - inicial
e1 inicial
Ee8
e2 E e9 e1
5
T e18 +
e3 T e1
0
e4 T e11 e16 F e19 *
e5 F
e12
e6
(e13 e17 ) e20 E
e7 id e1
4
p/ e4
p/ e5
p/ e6
p/ e7
p/ e2
p/ e3
Transições de I0 por E
e1 e2
e3 e4 e5 e6 e7
I0 - inicial
e1 inicial
Ee8
e2 E e9 e1
5
T e18 +
e3 T e1
0
e4 T e11 e16 F e19 *
e5 F
e12
e6
(e13 e17 ) e20 E
e7 id e1
4
p/ e4
p/ e5
p/ e6
p/ e7
p/ e2
p/ e3
e1 e2
e3 e4 e5 e6 e7
I0 - inicial
Transições de I0 por E
e8
e9
I1
E
e1 inicial
Ee8
e2 E e9 e1
5
T e18 +
e3 T e1
0
e4 T e11 e16 F e19 *
e5 F
e12
e6
(e13 e17 ) e20 E
e7 id e1
4
p/ e4
p/ e5
p/ e6
p/ e7
p/ e2
p/ e3
e1 e2
e3 e4 e5 e6 e7
I0 - inicial e
8
e9
I1
E
Transições de I0 por T
T
e1 inicial
Ee8
e2 E e9 e1
5
T e18 +
e3 T
e10
e4 T e11 e16 F e19 *
e5 F
e12
e6
(e13 e17 ) e20 E
e7 id e1
4
p/ e4
p/ e5
p/ e6
p/ e7
p/ e2
p/ e3
e1 e2
e3 e4 e5 e6 e7
I0 - inicial
Transições de I0 por T
e8
e9
I1
e1
0
e1
1
I2
E
T
e1 inicial
Ee8
e2 E e9 e1
5
T e18 +
e3 T
e10
e4 T e11 e16 F e19 *
e5 F
e12
e6
(e13 e17 ) e20 E
e7 id e1
4
p/ e4
p/ e5
p/ e6
p/ e7
p/ e2
p/ e3
e1 e2
e3 e4 e5 e6 e7
I0 - inicial e
8
e9
I1
e1
0
e1
1
I2
E
Transições de I0 por F e id
F
id
e1 inicial
Ee8
e2 E e9 e1
5
T e18 +
e3 T e1
0
e4 T e11 e16 F e19 *
e5 F
e12
e6
(e13 e17 ) e20 E
e7 id e14
p/ e4
p/ e5
p/ e6
p/ e7
p/ e2
p/ e3
e1 e2
e3 e4 e5 e6 e7
I0 - inicial
Transições de I0 por F e id
e8
e9
I1
e1
0
e1
1
I2
E
T
e1
2
e1
4
I3
I5
F
id
e1 inicial
Ee8
e2 E e9 e1
5
T e18 +
e3 T e1
0
e4 T e11 e16 F e19 *
e5 F
e12
e6
(e13 e17 ) e20 E
e7 id e14
p/ e4
p/ e5
p/ e6
p/ e7
p/ e2
p/ e3
e1 e2
e3 e4 e5 e6 e7
I0 - inicial e
8
e9
I1
e1
0
e1
1
I2
E
T
e1
2
e1
4
I3
I5
Transições de I0 por (
(
e1 inicial
Ee8
e2 E e9 e1
5
T e18 +
e3 T e1
0
e4 T e11 e16 F e19 *
e5 F
e12
e6
(e13 e17 ) e20 E
e7 id e1
4
p/ e4
p/ e5
p/ e6
p/ e7
p/ e2
p/ e3
e1 e2
e3 e4 e5 e6 e7
I0 - inicial
Transições de I0 por (
e8
e9
I1
e1
0
e1
1
I2
E
T
e1
2
e1
4
I3
I5
e13 e2
e3 e4 e5 e6 e7
I4
F
id
(
e1 inicial
Ee8
e2 E e9 e1
5
T e18 +
e3 T e1
0
e4 T e11 e16 F e19 *
e5 F
e12
e6
(e13 e17 ) e20 E
e7 id e1
4
p/ e4
p/ e5
p/ e6
p/ e7
p/ e2
p/ e3
e1 e2
e3 e4 e5 e6 e7
I0 - inicial e
8
e9
I1
e1
0
e1
1
I2
E
T
e1
2
e1
4
I3
I5
e13 e2
e3 e4 e5 e6 e7
I4
F
idTransições de I1 por +
+
e1 inicial
Ee8
e2 E e9 e1
5
T e18 +
e3 T e1
0
e4 T e11 e16 F e19 *
e5 F
e12
e6
(e13 e17 ) e20 E
e7 id e1
4
p/ e4
p/ e5
p/ e6
p/ e7
p/ e2
p/ e3
e1 e2
e3 e4 e5 e6 e7
I0 - inicial
Transições de I1 por +
e8
e9
I1
e1
0
e1
1
I2
E
T
e1
2
e1
4
I3
I5
e13 e2
e3 e4 e5 e6 e7
I4
e15
e4 e5 e6 e7
I6
F
id
(
+
e1 inicial
Ee8
e2 E e9 e1
5
T e18 +
e3 T e1
0
e4 T e11 e16 F e19 *
e5 F
e12
e6
(e13 e17 ) e20 E
e7 id e1
4
p/ e4
p/ e5
p/ e6
p/ e7
p/ e2
p/ e3
e1 e2
e3 e4 e5 e6 e7
I0 - inicial e
8
e9
I1
e1
0
e1
1
I2
E
T
e1
2
e1
4
I3
I5
e13 e2
e3 e4 e5 e6 e7
I4
e15
e4 e5 e6 e7
I6
F
id
(
Transições de I2 por *
*
e1 inicial
Ee8
e2 E
e9e1
5
T e18 +
e3 T
e10
e4 T e11 e16 F e19 *
e5 F
e12
e6
(e13 e17 ) e20 E
e7 id e1
4
p/ e4
p/ e5
p/ e6
p/ e7
p/ e2
p/ e3
e1 e2
e3 e4 e5 e6 e7
I0 - inicial
Transições de I2 por *
e8
e9
I1
e1
0
e1
1
I2
E
T
e1
2
e1
4
I3
I5
e13 e2
e3 e4 e5 e6 e7
I4
e15
e4 e5 e6 e7
I6
F
id
(
+
e16
e6 e7
I7
*
e1 inicial
Ee8
e2 E
e9e1
5
T e18 +
e3 T
e10
e4 T e11 e16 F e19 *
e5 F
e12
e6
(e13 e17 ) e20 E
e7 id e1
4
p/ e4
p/ e5
p/ e6
p/ e7
p/ e2
p/ e3
e1 e2
e3 e4 e5 e6 e7
I0 - inicial e
8
e9
I1
e1
0
e1
1
I2
E
T
e1
2
e1
4
I3
I5
e13 e2
e3 e4 e5 e6 e7
I4
e15
e4 e5 e6 e7
I6
F
id
(
+
e16
e6 e7
I7
Transições de I4 por E
e1 inicial
Ee8
e2 E
e9e1
5
T e18 +
e3 T e1
0
e4 T e11 e16 F e19 *
e5 F
e12
e6
(e13 e17 ) e20 E
e7 id e1
4
p/ e4
p/ e5
p/ e6
p/ e7
p/ e2
p/ e3
e1 e2
e3 e4 e5 e6 e7
I0 - inicial
Transições de I4 por E
e8
e9
I1
e1
0
e1
1
I2
E
T
e1
2
e1
4
I3
I5
e13 e2
e3 e4 e5 e6 e7
I4
e15
e4 e5 e6 e7
I6
F
id
(
+
e16
e6 e7
I7
*
e9
e1
7
I8
E
e1 inicial
Ee8
e2 E
e9e1
5
T e18 +
e3 T e1
0
e4 T e11 e16 F e19 *
e5 F
e12
e6
(e13 e17 ) e20 E
e7 id e1
4
p/ e4
p/ e5
p/ e6
p/ e7
p/ e2
p/ e3
e1 e2
e3 e4 e5 e6 e7
I0 - inicial e
8
e9
I1
e1
0
e1
1
I2
E
T
e1
2
e1
4
I3
I5
e13 e2
e3 e4 e5 e6 e7
I4
e15
e4 e5 e6 e7
I6
F
id
(
+
e16
e6 e7
I7
*
e9
e1
7
I8
E
Transições de I4 por T
e1 inicial
Ee8
e2 E
e9e1
5
T e18 +
e3 T
e10
e4 T e11 e16 F e19 *
e5 F
e12
e6
(e13 e17 ) e20 E
e7 id e1
4
p/ e4
p/ e5
p/ e6
p/ e7
p/ e2
p/ e3
e1 e2
e3 e4 e5 e6 e7
I0 - inicial
Transições de I4 por T
e8
e9
I1
e1
0
e1
1
I2
E
T
e1
2
e1
4
I3
I5
e13 e2
e3 e4 e5 e6 e7
I4
e15
e4 e5 e6 e7
I6
F
id
(
+
e16
e6 e7
I7
*
e9
e1
7
I8
E
T
e1 inicial
Ee8
e2 E
e9e1
5
T e18 +
e3 T
e10
e4 T e11 e16 F e19 *
e5 F
e12
e6
(e13 e17 ) e20 E
e7 id e1
4
p/ e4
p/ e5
p/ e6
p/ e7
p/ e2
p/ e3
e1 e2
e3 e4 e5 e6 e7
I0 - inicial e
8
e9
I1
e1
0
e1
1
I2
E
T
e1
2
e1
4
I3
I5
e13 e2
e3 e4 e5 e6 e7
I4
e15
e4 e5 e6 e7
I6
F
id
(
+
e16
e6 e7
I7
*
e9
e1
7
I8
E
T
Transições de I4 por F e id
F
id
e1 inicial
Ee8
e2 E
e9e1
5
T e18 +
e3 T e1
0
e4 T e11 e16 F e19 *
e5 F
e12
e6
(e13 e17 ) e20 E
e7 id e1
4
p/ e4
p/ e5
p/ e6
p/ e7
p/ e2
p/ e3
e1 e2
e3 e4 e5 e6 e7
I0 - inicial
Transições de I4 por F e id
e8
e9
I1
e1
0
e1
1
I2
E
T
e1
2
e1
4
I3
I5
e13 e2
e3 e4 e5 e6 e7
I4
e15
e4 e5 e6 e7
I6
F
id
(
+
e16
e6 e7
I7
*
e9
e1
7
I8
E
T
F
id
e1 inicial
Ee8
e2 E
e9e1
5
T e18 +
e3 T e1
0
e4 T e11 e16 F e19 *
e5 F
e12
e6
(e13 e17 ) e20 E
e7 id e1
4
p/ e4
p/ e5
p/ e6
p/ e7
p/ e2
p/ e3
e1 e2
e3 e4 e5 e6 e7
I0 - inicial e
8
e9
I1
e1
0
e1
1
I2
E
T
e1
2
e1
4
I3
I5
e13 e2
e3 e4 e5 e6 e7
I4
e15
e4 e5 e6 e7
I6
F
id
(
+
e16
e6 e7
I7
*
e9
e1
7
I8
E
T
Transições de I4 por (
e1 inicial
Ee8
e2 E
e9e1
5
T e18 +
e3 T e1
0
e4 T e11 e16 F e19 *
e5 F
e12
e6
(e13 e17 ) e20 E
e7 id e1
4
p/ e4
p/ e5
p/ e6
p/ e7
p/ e2
p/ e3
e1 e2
e3 e4 e5 e6 e7
I0 - inicial
Transições de I4 por (
e8
e9
I1
e1
0
e1
1
I2
E
T
e1
2
e1
4
I3
I5
e13 e2
e3 e4 e5 e6 e7
I4
e15
e4 e5 e6 e7
I6
F
id
(
+
e16
e6 e7
I7
*
e9
e1
7
I8
E
(
F
id
TF
e1 inicial
Ee8
e2 E
e9e1
5
T e18 +
e3 T e1
0
e4 T e11 e16 F e19 *
e5 F
e12
e6
(e13 e17 ) e20 E
e7 id e1
4
p/ e4
p/ e5
p/ e6
p/ e7
p/ e2
p/ e3
e1 e2
e3 e4 e5 e6 e7
I0 - inicial e
8
e9
I1
e1
0
e1
1
I2
E
T
e1
2
e1
4
I3
I5
e13 e2
e3 e4 e5 e6 e7
I4
e15
e4 e5 e6 e7
I6
F
id
(
+
e16
e6 e7
I7
*
e9
e1
7
I8
E
(
F
id
TF
Transições de I6 por T
T
e1 inicial
Ee8
e2 E
e9 e15 T e18 +
e3 T e1
0
e4 T e11 e16 F e19 *
e5 F
e12
e6
(e13 e17 ) e20 E
e7 id e1
4
p/ e4
p/ e5
p/ e6
p/ e7
p/ e2
p/ e3
e1 e2
e3 e4 e5 e6 e7
I0 - inicial
Transições de I6 por T
e8
e9
I1
e1
0
e1
1
I2
E
T
e1
2
e1
4
I3
I5
e13 e2
e3 e4 e5 e6 e7
I4
e15
e4 e5 e6 e7
I6
F
id
(
+
e16
e6 e7
I7
*
e9
e1
7
I8
E
(
e1
1
e1
8
I9
F
id
TF
T
e1 inicial
Ee8
e2 E
e9 e15 T e18 +
e3 T e1
0
e4 T e11 e16 F e19 *
e5 F
e12
e6
(e13 e17 ) e20 E
e7 id e1
4
p/ e4
p/ e5
p/ e6
p/ e7
p/ e2
p/ e3
e1 e2
e3 e4 e5 e6 e7
I0 - inicial e
8
e9
I1
e1
0
e1
1
I2
E
T
e1
2
e1
4
I3
I5
e13 e2
e3 e4 e5 e6 e7
I4
e15
e4 e5 e6 e7
I6
F
id
(
+
e16
e6 e7
I7
*
e9
e1
7
I8
E
(
e1
1
e1
8
I9
F
id
TF
Transições de I6 por F e id
e1 inicial
Ee8
e2 E
e9 e15 T e18 +
e3 T e1
0
e4 T e11 e16 F e19 *
e5 F
e12
e6
(e13 e17 ) e20 E
e7 id e14
p/ e4
p/ e5
p/ e6
p/ e7
p/ e2
p/ e3
e1 e2
e3 e4 e5 e6 e7
I0 - inicial
Transições de I6 por F e id
e8
e9
I1
e1
0
e1
1
I2
E
T
e1
2
e1
4
I3
I5
e13 e2
e3 e4 e5 e6 e7
I4
e15
e4 e5 e6 e7
I6
F
id
(
+
e16
e6 e7
I7
*
e9
e1
7
I8
E
(
e1
1
e1
8
I9 T
F
id
F
id
TF
e1 inicial
Ee8
e2 E
e9 e15 T e18 +
e3 T e1
0
e4 T e11 e16 F e19 *
e5 F
e12
e6
(e13 e17 ) e20 E
e7 id e14
p/ e4
p/ e5
p/ e6
p/ e7
p/ e2
p/ e3
e1 e2
e3 e4 e5 e6 e7
I0 - inicial e
8
e9
I1
e1
0
e1
1
I2
E
T
e1
2
e1
4
I3
I5
e13 e2
e3 e4 e5 e6 e7
I4
e15
e4 e5 e6 e7
I6
F
id
(
+
e16
e6 e7
I7
*
e9
e1
7
I8
E
(
e1
1
e1
8
I9 T
F
id
F
id
TF
Transições de I6 por (
e1 inicial
Ee8
e2 E
e9 e15 T e18 +
e3 T e1
0
e4 T e11 e16 F e19 *
e5 F
e12
e6
(e13 e17 ) e20 E
e7 id e1
4
p/ e4
p/ e5
p/ e6
p/ e7
p/ e2
p/ e3
e1 e2
e3 e4 e5 e6 e7
I0 - inicial
Transições de I6 por (
e8
e9
I1
e1
0
e1
1
I2
E
T
e1
2
e1
4
I3
I5
e13 e2
e3 e4 e5 e6 e7
I4
e15
e4 e5 e6 e7
I6
F
id
(
+
e16
e6 e7
I7
*
e9
e1
7
I8
E
(
e1
1
e1
8
I9 T
F
id
(F
id
TF
e1 inicial
Ee8
e2 E
e9 e15 T e18 +
e3 T e1
0
e4 T e11 e16 F e19 *
e5 F
e12
e6
(e13 e17 ) e20 E
e7 id e1
4
p/ e4
p/ e5
p/ e6
p/ e7
p/ e2
p/ e3
e1 e2
e3 e4 e5 e6 e7
I0 - inicial e
8
e9
I1
e1
0
e1
1
I2
E
T
e1
2
e1
4
I3
I5
e13 e2
e3 e4 e5 e6 e7
I4
e15
e4 e5 e6 e7
I6
F
id
(
+
e16
e6 e7
I7
*
e9
e1
7
I8
E
(
e1
1
e1
8
I9 T
F
id
(F
id
TF
Transições de I7 por F e id
e1 inicial
Ee8
e2 E
e9e1
5
T e18 +
e3 T e1
0
e4 T e11 e16 F e19 *
e5 F
e12
e6
(e13 e17 ) e20 E
e7 id e14
p/ e4
p/ e5
p/ e6
p/ e7
p/ e2
p/ e3
e1 e2
e3 e4 e5 e6 e7
I0 - inicial
Transições de I7 por F e id
e8
e9
I1
e1
0
e1
1
I2
E
T
e1
2
e1
4
I3
I5
e13 e2
e3 e4 e5 e6 e7
I4
e15
e4 e5 e6 e7
I6
F
id
(
+
e16
e6 e7
I7
*
e9
e1
7
I8
E
(
e1
1
e1
8
I9 T
F
id
(
e1
9
I1
0
F
id
TF
F
e1 inicial
Ee8
e2 E
e9e1
5
T e18 +
e3 T e1
0
e4 T e11 e16 F e19 *
e5 F
e12
e6
(e13 e17 ) e20 E
e7 id e14
p/ e4
p/ e5
p/ e6
p/ e7
p/ e2
p/ e3
e1 e2
e3 e4 e5 e6 e7
I0 - inicial e
8
e9
I1
e1
0
e1
1
I2
E
T
e1
2
e1
4
I3
I5
e13 e2
e3 e4 e5 e6 e7
I4
e15
e4 e5 e6 e7
I6
F
id
(
+
e16
e6 e7
I7
*
e9
e1
7
I8
E
(
e1
1
e1
8
I9 T
F
id
(
e1
9
I1
0
F
id
TF
F
Transições de I7 por (
e1 inicial
Ee8
e2 E
e9e1
5
T e18 +
e3 T e1
0
e4 T e11 e16 F e19 *
e5 F
e12
e6
(e13 e17 ) e20 E
e7 id e1
4
p/ e4
p/ e5
p/ e6
p/ e7
p/ e2
p/ e3
e1 e2
e3 e4 e5 e6 e7
I0 - inicial
Transições de I7 por (
e8
e9
I1
e1
0
e1
1
I2
E
T
e1
2
e1
4
I3
I5
e13 e2
e3 e4 e5 e6 e7
I4
e15
e4 e5 e6 e7
I6
F
id
(
+
e16
e6 e7
I7
*
e9
e1
7
I8
E
(
e1
1
e1
8
I9 T
F
id
(
e1
9
I1
0
(F
id
TF
F
e1 inicial
Ee8
e2 E
e9e1
5
T e18 +
e3 T e1
0
e4 T e11 e16 F e19 *
e5 F
e12
e6
(e13 e17 ) e20 E
e7 id e1
4
p/ e4
p/ e5
p/ e6
p/ e7
p/ e2
p/ e3
e1 e2
e3 e4 e5 e6 e7
I0 - inicial e
8
e9
I1
e1
0
e1
1
I2
E
T
e1
2
e1
4
I3
I5
e13 e2
e3 e4 e5 e6 e7
I4
e15
e4 e5 e6 e7
I6
F
id
(
+
e16
e6 e7
I7
*
e9
e1
7
I8
E
(
e1
1
e1
8
I9 T
F
id
(
e1
9
I1
0
(F
id
TF
F
Transições de I8 por )
e1 inicial
Ee8
e2 E
e9e1
5
T e18 +
e3 T e1
0
e4 T e11 e16 F e19 *
e5 F
e12
e6
(e13 e17 ) e20 E
e7 id e1
4
p/ e4
p/ e5
p/ e6
p/ e7
p/ e2
p/ e3
e1 e2
e3 e4 e5 e6 e7
I0 - inicial
Transições de I8 por )
e8
e9
I1
e1
0
e1
1
I2
E
T
e1
2
e1
4
I3
I5
e13 e2
e3 e4 e5 e6 e7
I4
e15
e4 e5 e6 e7
I6
F
id
(
+
e16
e6 e7
I7
*
e9
e1
7
I8
E
(
e1
1
e1
8
I9 T
F
id
(
e1
9
I1
0
(F
id
T
e2
0
I1
1 )
F
F
e1 inicial
Ee8
e2 E
e9e1
5
T e18 +
e3 T e1
0
e4 T e11 e16 F e19 *
e5 F
e12
e6
(e13 e17 ) e20 E
e7 id e1
4
p/ e4
p/ e5
p/ e6
p/ e7
p/ e2
p/ e3
e1 e2
e3 e4 e5 e6 e7
I0 - inicial e
8
e9
I1
e1
0
e1
1
I2
E
T
e1
2
e1
4
I3
I5
e13 e2
e3 e4 e5 e6 e7
I4
e15
e4 e5 e6 e7
I6
F
id
(
+
e16
e6 e7
I7
*
e9
e1
7
I8
E
(
e1
1
e1
8
I9 T
F
id
(
e1
9
I1
0
(F
id
T
e2
0
I1
1 )
F
F
Transições de I8 por +
e1 inicial
Ee8
e2 E
e9 e15 T e18 +
e3 T e1
0
e4 T e11 e16 F e19 *
e5 F
e12
e6
(e13 e17 ) e20 E
e7 id e1
4
p/ e4
p/ e5
p/ e6
p/ e7
p/ e2
p/ e3
e1 e2
e3 e4 e5 e6 e7
I0 - inicial
Transições de I8 por +
e8
e9
I1
e1
0
e1
1
I2
E
T
e1
2
e1
4
I3
I5
e13 e2
e3 e4 e5 e6 e7
I4
e15
e4 e5 e6 e7
I6
F
id
(
+
e16
e6 e7
I7
*
e9
e1
7
I8
E
(
e1
1
e1
8
I9 T
F
id
(
e1
9
I1
0
(F
id
T
e2
0
I1
1 )
+
F
F
e1 inicial
Ee8
e2 E
e9 e15 T e18 +
e3 T e1
0
e4 T e11 e16 F e19 *
e5 F
e12
e6
(e13 e17 ) e20 E
e7 id e1
4
p/ e4
p/ e5
p/ e6
p/ e7
p/ e2
p/ e3
e1 e2
e3 e4 e5 e6 e7
I0 - inicial e
8
e9
I1
e1
0
e1
1
I2
E
T
e1
2
e1
4
I3
I5
e13 e2
e3 e4 e5 e6 e7
I4
e15
e4 e5 e6 e7
I6
F
id
(
+
e16
e6 e7
I7
*
e9
e1
7
I8
E
(
e1
1
e1
8
I9 T
F
id
(
e1
9
I1
0
(F
id
T
e2
0
I1
1 )
+
F
F
Transições de I9 por *
e1 inicial
Ee8
e2 E
e9e1
5
T e18 +
e3 T e1
0
e4 T e11 e16 F e19 *
e5 F
e12
e6
(e13 e17 ) e20 E
e7 id e1
4
p/ e4
p/ e5
p/ e6
p/ e7
p/ e2
p/ e3
e1 e2
e3 e4 e5 e6 e7
I0 - inicial
Transições de I9 por *
e8
e9
I1
e1
0
e1
1
I2
E
T
e1
2
e1
4
I3
I5
e13 e2
e3 e4 e5 e6 e7
I4
e15
e4 e5 e6 e7
I6
F
id
(
+
e16
e6 e7
I7
*
e9
e1
7
I8
E
(
e1
1
e1
8
I9 T
F
id
(
e1
9
I1
0
(F
id
T
e2
0
I1
1 )
+
*
AFD completo
F
F
Algoritmos para transformar um Algoritmos para transformar um AFNDAFND em um em um AFD:AFD:
FechamentoFechamento, , GotoGoto e e EstadosAFDEstadosAFD
Algoritmo 5.9: Algoritmo 5.9: Cálculo do Cálculo do Fechamento (I)Fechamento (I), , sendo sendo II um conjunto de itens de uma gramática um conjunto de itens de uma gramática
Fechamento (I)Fechamento (I) é um conjunto de itens é um conjunto de itens constituídos a partir de constituídos a partir de II, usando as seguintes , usando as seguintes regrasregras: :
1.1.Inicialmente, acrescentar todo item Inicialmente, acrescentar todo item i i II ao ao Fechamento (I)Fechamento (I)
2.2.Se o item Se o item i i Fechamento (I) Fechamento (I) e, no AFND e, no AFND existe uma transição de existe uma transição de ii para um item para um item jj pela pela cadeia vazia cadeia vazia εε, acrescentar o item , acrescentar o item jj ao ao Fechamento (I)Fechamento (I), caso ainda aí não esteja, caso ainda aí não esteja
3.3.Aplicar a Aplicar a regra 2regra 2 até que nenhum item seja até que nenhum item seja mais acrescentado ao mais acrescentado ao Fechamento (I)Fechamento (I)
Algoritmo 5.10: Algoritmo 5.10: Cálculo do Cálculo do Goto (I, X)Goto (I, X), sendo , sendo II um conjunto de itens de uma gramática e um conjunto de itens de uma gramática e X X um um de seus terminais ou não-terminaisde seus terminais ou não-terminais
Goto (I, X)Goto (I, X) é o fechamento do conjunto de é o fechamento do conjunto de todos os itenstodos os itens
(A(AαX.αX.)) tais que tais que (A(Aα.Xα.X) ) I I
Exemplo: Exemplo: Dado o AFND abaixo, calcular Dado o AFND abaixo, calcular
I = I = Fechamento ( {a})Fechamento ( {a}) e J = e J = Goto (I, X)Goto (I, X)
X
a
r
d
b
t
c
e
p g
f
q
s
ε
εε
ε
ε
εX
X
ε
ε
I = Fechamento ( {a}) =
{ a,
Exemplo: Exemplo: Dado o AFND abaixo, calcular Dado o AFND abaixo, calcular
I = I = Fechamento ( {a})Fechamento ( {a}) e J = e J = Goto (I, X)Goto (I, X)
a
r
d
b
t
c
e
p g
f
q
s
ε
εε
ε
ε
ε
X
XX
ε
ε
I = Fechamento ( {a}) =
{ a, b, c, d
Exemplo: Exemplo: Dado o AFND abaixo, calcular Dado o AFND abaixo, calcular
I = I = Fechamento ( {a})Fechamento ( {a}) e J = e J = Goto (I, X)Goto (I, X)
a
r
d
b
t
c
e
p g
f
q
s
ε
εε
ε
ε
ε
X
XX
ε
ε
I = Fechamento ( {a}) =
{ a, b, c, d, e, f, g}
Exemplo: Exemplo: Dado o AFND abaixo, calcular Dado o AFND abaixo, calcular
I = I = Fechamento ( {a})Fechamento ( {a}) e J = e J = Goto (I, X)Goto (I, X)
a
r
d
b
t
c
e
p g
f
q
s
ε
εε
ε
ε
ε
X
XX
ε
ε
I = Fechamento ( {a}) =
{ a, b, c, d, e, f, g}
J = Goto (I, X) =
Goto ({ a, b, c, d, e, f, g}, X) =
Exemplo: Exemplo: Dado o AFND abaixo, calcular Dado o AFND abaixo, calcular
I = I = Fechamento ( {a})Fechamento ( {a}) e J = e J = Goto (I, X)Goto (I, X)
a
r
d
b
t
c
e
p g
f
q
s
ε
εε
ε
ε
ε
X
XX
ε
ε
I = Fechamento ( {a}) =
{ a, b, c, d, e, f, g}
J = Goto (I, X) =
Goto ({ a, b, c, d, e, f, g}, X) =
Fechamento ({r, p, q}) =
Exemplo: Exemplo: Dado o AFND abaixo, calcular Dado o AFND abaixo, calcular
I = I = Fechamento ( {a})Fechamento ( {a}) e J = e J = Goto (I, X)Goto (I, X)
a
r
d
b
t
c
e
p g
f
q
s
ε
εε
ε
ε
ε
X
XX
ε
ε
I = Fechamento ( {a}) =
{ a, b, c, d, e, f, g}
J = Goto (I, X) =
Goto ({ a, b, c, d, e, f, g}, X) =
Fechamento ({r, p, q}) =
{r, p, q
Exemplo: Exemplo: Dado o AFND abaixo, calcular Dado o AFND abaixo, calcular
I = I = Fechamento ( {a})Fechamento ( {a}) e J = e J = Goto (I, X)Goto (I, X)
a
r
d
b
t
c
e
p g
f
q
s
ε
εε
ε
ε
ε
X
XX
ε
ε
I = Fechamento ( {a}) =
{ a, b, c, d, e, f, g}
J = Goto (I, X) =
Goto ({ a, b, c, d, e, f, g}, X) =
Fechamento ({r, p, q}) =
{r, p, q, t, s}
Exemplo: Exemplo: Dado o AFND abaixo, calcular Dado o AFND abaixo, calcular
I = I = Fechamento ( {a})Fechamento ( {a}) e J = e J = Goto (I, X)Goto (I, X)
a
r
d
b
t
c
e
p g
f
q
s
ε
εε
ε
ε
ε
X
XX
ε
ε
a, b, c, d, e, f, g
r, p, q, t, s
I
J
X
Algoritmo 5.11: Algoritmo 5.11: Calculo do conjunto de estados Calculo do conjunto de estados do AFD para análise SLRdo AFD para análise SLR
EstadosAFD (G’) EstadosAFD (G’) é a coleção dos conjuntos dos é a coleção dos conjuntos dos itens da gramática aumentada itens da gramática aumentada G’G’
Cada conjunto de itens é um estado do AFDCada conjunto de itens é um estado do AFD
EstadosAFD ( gramática aumentada G’ ) {EstadosAFD ( gramática aumentada G’ ) {
C C { {Fechamento ( {S’Fechamento ( {S’.S}).S})} ;} ;
RepetirRepetir { {
ParaPara (cada conjunto (cada conjunto II CC e cada símbolo e cada símbolo XX de de
G’G’ tal que tal que Goto (I, X)Goto (I, X) { } e { } e Goto (I, X)Goto (I, X) CC) {) {
Acrescentar Acrescentar Goto (I, X)Goto (I, X) a a CC;;
}}
} } Até queAté que (nenhum conjunto seja acrescentado a (nenhum conjunto seja acrescentado a CC););
Retornar Retornar C;C;
}} No No AFDAFD, existe uma transição de , existe uma transição de IIii parapara I Ij j por por XX,,
com (com (IIii , I , Ijj C C) e () e (X X (N (N ))) se ) se Goto (IGoto (Iii, X) =, X) = IIjj
TodosTodos os estados do os estados do AFDAFD são são finaisfinais
5.5.7 – Tabela de analise SLR5.5.7 – Tabela de analise SLR
As tabelas de As tabelas de açõesações e de e de transiçõestransições de um de um analisador sintático LR são baseadas no analisador sintático LR são baseadas no AFDAFD reconhecedor de reconhecedor de prefixos viáveisprefixos viáveis
Algoritmo 5.12:Algoritmo 5.12: Construção de uma tabela SLR Construção de uma tabela SLR
Entrada:Entrada: Gramática aumentada Gramática aumentada G’G’
Saída:Saída: Tabelas Tabelas Ação [e, a] Ação [e, a] e e Goto [e, A]Goto [e, A] p/ G’ p/ G’
((a a e e A A N N))
1.1.Construir Construir C = { IC = { I00, I, I11, I, I22, . . . , I, . . . , Inn}}, a coleção , a coleção de conjuntos de itens de de conjuntos de itens de G’G’;;
e1 inicial
Ee8
e2 E
e9e1
5
T e18 +
e3 T e1
0
e4 T e11 e16 F e19 *
e5 F
e12
e6
(e13 e17 ) e20 E
e7 id e1
4
p/ e4
p/ e5
p/ e6
p/ e7
p/ e2
p/ e3
e1 e2
e3 e4 e5 e6 e7
I0 - inicial e
8
e9
I1
e1
0
e1
1
I2
E
T
e1
2
e1
4
I3
I5
e13 e2
e3 e4 e5 e6 e7
I4
e15
e4 e5 e6 e7
I6
F
id
(
+
e16
e6 e7
I7
*
e9
e1
7
I8
E
(
e1
1
e1
8
I9 T
F
id
(
e1
9
I1
0
(F
id
T
e2
0
I1
1 )
+
*
F
F
Algoritmo 5.12:Algoritmo 5.12: Construção de uma tabela SLR Construção de uma tabela SLR
2.2.O estado O estado ii corresponde a corresponde a IIii; as ações para o ; as ações para o estado estado ii são assim estabelecidas: são assim estabelecidas:
a) Sea) Se ( (Goto (IGoto (Iii, a) = I, a) = Ijj))
Ação [i, a] Ação [i, a] (deslocar, j); (deslocar, j);
b) Seb) Se ( ((A(A.) .) I Iii e e A A S’ S’))
ParaPara todo todo a a Seguinte (A) Seguinte (A)
Ação [i, a] Ação [i, a] (reduzir, A (reduzir, A););
c) Sec) Se ( ((S’(S’S.) S.) I Iii) Ação [i, $] ) Ação [i, $] (aceitar) (aceitar)
Algoritmo 5.12:Algoritmo 5.12: Construção de uma tabela SLR Construção de uma tabela SLR
3.3.Para todo estado Para todo estado ii e todo não terminal e todo não terminal AA
SeSe ( (Goto (IGoto (Iii, A) = I, A) = Ijj)) Goto [i, A] Goto [i, A] j j
4.4.Toda entrada não definida nos passos 2 e 3 são Toda entrada não definida nos passos 2 e 3 são erro’serro’s
5.5.O estado inicial é o que contém (S’O estado inicial é o que contém (S’.S).S)
F
E
T
id
(
+
*
E
(
T
F
id
(
(F
id
T
)
+
*
F
F
e1 e2
e3 e4 e5 e6 e7
I0 - inicial e
8
e9
I1
e1
0
e1
1
I2
e1
2
e1
4
I3
I5
e13 e2
e3 e4 e5 e6 e7
I4
e15
e4 e5 e6 e7
I6
e16
e6 e7
I7
e9
e1
7
I8
e1
1
e1
8
I9
e1
9
I1
0
e2
0
I1
1
Exemplo: Para a gramática G’ definida anteriormente:
1. Construir C = { I0, I1, I2, . . . , I11}, a coleção de conjuntos de itens de G’;
2.a) Se (Goto (Ii, a) = Ij) Ação [i, a] (deslocar, j);
id + * ( ) $
0 d 5 d 4
1 d 6
2 d 7
3
4 d 5 d 4
5
6 d 5 d 4
7 d 5 d 4
8 d 6 d 11
9 d 7
10
11
F
E
T
id
(
+
*
E
(
T
F
id
(
(F
id
T
)
+
*
F
F
e1 e2
e3 e4 e5 e6 e7
I0 - inicial e
8
e9
I1
e1
0
e1
1
I2
e1
2
e1
4
I3
I5
e13 e2
e3 e4 e5 e6 e7
I4
e15
e4 e5 e6 e7
I6
e16
e6 e7
I7
e9
e1
7
I8
e1
1
e1
8
I9
e1
9
I1
0
e2
0
I1
1
b) Se ((A.) Ii e A S’)Para todo a Seguinte (A)
Ação [i, a] (reduzir, A);
Número da
Produção
Item de final de Produção
Estado do AFD
- E’ E. 1
1 E E+T. 9
2 E T. 2
3 T T*F. 10
4 T F. 3
5 F (E). 11
6 F id. 5
Não-terminal
Seguinte
E + ) $
T + * ) $
F + * ) $
E’ $
id + * ( ) $
0 d 5 d 4
1 d 6
2 d 7
3
4 d 5 d 4
5
6 d 5 d 4
7 d 5 d 4
8 d 6 d 11
9 d 7
10
11
b) Se ((A.) Ii e A S’)Para todo a Seguinte (A)
Ação [i, a] (reduzir, A);id + * ( ) $
0 d 5 d 4
1 d 6
2 r 2 d 7 r 2 r 2
3 r 4 r 4 r 4 r 4
4 d 5 d 4
5 r 6 r 6 r 6 r 6
6 d 5 d 4
7 d 5 d 4
8 d 6 d 11
9 r 1 d 7 r 1 r 1
10 r 3 r 3 r 3 r 3
11 r 5 r 5 r 5 r 5
Número da
Produção
Item de final de Produção
Estado do AFD
- E’ E. 1
1 E E+T. 9
2 E T. 2
3 T T*F. 10
4 T F. 3
5 F (E). 11
6 F id. 5
Não-terminal
Seguinte
E + ) $
T + * ) $
F + * ) $
E’ $
c) Se ((S’S.) Ii) Ação [i, $] (aceitar)
id + * ( ) $
0 d 5 d 4
1 d 6
2 r 2 d 7 r 2 r 2
3 r 4 r 4 r 4 r 4
4 d 5 d 4
5 r 6 r 6 r 6 r 6
6 d 5 d 4
7 d 5 d 4
8 d 6 d 11
9 r 1 d 7 r 1 r 1
10 r 3 r 3 r 3 r 3
11 r 5 r 5 r 5 r 5
Número da
Produção
Item de final de Produção
Estado do AFD
- E’ E. 1
1 E E+T. 9
2 E T. 2
3 T T*F. 10
4 T F. 3
5 F (E). 11
6 F id. 5
Não-terminal
Seguinte
E + ) $
T + * ) $
F + * ) $
E’ $
c) Se ((S’S.) Ii) Ação [i, $] (aceitar)
id + * ( ) $
0 d 5 d 4
1 d 6 act
2 r 2 d 7 r 2 r 2
3 r 4 r 4 r 4 r 4
4 d 5 d 4
5 r 6 r 6 r 6 r 6
6 d 5 d 4
7 d 5 d 4
8 d 6 d 11
9 r 1 d 7 r 1 r 1
10 r 3 r 3 r 3 r 3
11 r 5 r 5 r 5 r 5
Número da
Produção
Item de final de Produção
Estado do AFD
- E’ E. 1
1 E E+T. 9
2 E T. 2
3 T T*F. 10
4 T F. 3
5 F (E). 11
6 F id. 5
Não-terminal
Seguinte
E + ) $
T + * ) $
F + * ) $
E’ $
3) Para todo estado i e todo não- terminal A: Se (Goto (Ii, A) = Ij)
Goto [i, A] jE T F
0 1 2 3
1
2
3
4 8 2 3
5
6 9 3
7 10
8
9
10
11
F
E
T
id
(
+
*
E
(
T
F
id
(
(F
id
T
)
+
*
F
F
e1 e2
e3 e4 e5 e6 e7
I0 - inicial e
8
e9
I1
e1
0
e1
1
I2
e1
2
e1
4
I3
I5
e13 e2
e3 e4 e5 e6 e7
I4
e15
e4 e5 e6 e7
I6
e16
e6 e7
I7
e9
e1
7
I8
e1
1
e1
8
I9
e1
9
I1
0
e2
0
I1
1
Tabelas de ações e transições: Tabelas de ações e transições:
Estado inicial: 0Estado inicial: 0 Posições vazias: Posições vazias: ErrosErros
id + * ( ) $
0 d 5 d 4
1 d 6 act
2 r 2 d 7 r 2 r 2
3 r 4 r 4 r 4 r 4
4 d 5 d 4
5 r 6 r 6 r 6 r 6
6 d 5 d 4
7 d 5 d 4
8 d 6 d 11
9 r 1 d 7 r 1 r 1
10 r 3 r 3 r 3 r 3
11 r 5 r 5 r 5 r 5
E T F
1 2 3
8 2 3
9 3
10
Se houver Se houver mais de uma ação para a mesma mais de uma ação para a mesma entradaentrada, a gramática , a gramática não é SLRnão é SLR; ela pode ser ; ela pode ser CLRCLR ou ou LALRLALR..
A linguagem A linguagem PascalPascal gera gera centenascentenas de estados de estados SLRSLR e e LALRLALR e e milharesmilhares de estados de estados CLRCLR; infactível à mão.; infactível à mão.
id + * ( ) $
0 d 5 d 4
1 d 6 act
2 r 2 d 7 r 2 r 2
3 r 4 r 4 r 4 r 4
4 d 5 d 4
5 r 6 r 6 r 6 r 6
6 d 5 d 4
7 d 5 d 4
8 d 6 d 11
9 r 1 d 7 r 1 r 1
10 r 3 r 3 r 3 r 3
11 r 5 r 5 r 5 r 5
E T F
1 2 3
8 2 3
9 3
10