Anda di halaman 1dari 3

Anlise Sinttica LR(0)

Algoritmo Autmato_LR(0) Dada uma gramtica G, com o smbolo inicial S, gera o autmato de controle
do sinttico LR(0). Tal mquina contm um conjunto de estados C={C0, C1, C2, ..., Cn}, onde C0 o estado
inicial.
1 Gera o smbolo inicial:
a Atribui o smbolo inicial ao ndice 0 e coloca o item [S.] no conjunto C0.
b Faz a operao de complemento neste item e em todo novo item gerado.
c Adiciona os itens criados no estado b ao conjunto do estado 0.
2 Gera os conjuntos de C:
Repete at o passo 4 at que no existam mais conjuntos de itens novos.
3 Realiza a operao de leitura em um item:
a Realiza a operao de leitura em um item (inicialmente, em C0). Cria um novo estado, Cj.
b Se o conjunto de itens j tiver sido definido, ignore-o. De qualquer maneira, obtenha um novo
conjunto de itens ou encerre.
4 Realiza o complemento no conjunto de itens do novo estado:
Aplique a operao de complemento no conjunto de itens do estado Cj.

Anlise Sinttica SLR(1)


Algoritmo SLR(1)_Constructor Dado o autmato finito de controle de um parser LR(0), representado por
uma coleo de conjuntos de itens C={C0, C1, C2, ..., Cn}, calcula as funes F e G do analisador sinttico
SLR(1).
1 Constri as funes:
Repete at o passo 3 para cada estado i do conjunto de estados.
2 Calcula as clulas da funo de ao (F)
a Se [A.x]Ci, onde xVT e h uma transio de Ci para Cj pelo smbolo x, ento
F(i,x)Shift.
b Se [A]Ci onde A a j-sima produo da gramtica, ento F(i,x) Reduz j para todo
xFOLLOW(A).
c Se [S.]Ci ento F(i,) Aceita
d Para todas as demais clulas, ERRO
3 Calcula as clulas da funo de transio (G)
a Se h uma transio do conjunto de itens Ci para Cj pelo smbolo do vocabulrio X, ento
G(i,X)j.

b Todas as clulas indefinidas so ERRO


Algoritmo Parser_SLR(, F, G, x). Dadas as tabelas de ao e de transio das funes F e G, uma
sequncia de tokens na entrada xe um conjunto de produes numeradas da gramtica, o procedimento d
como resultado a anlise sinttica da entrada ou indica a falha, se a entrada for invlida. As variveis so
utilizadas no procedimento:
PILHA : uma pilha que contm nmeros de estados
PROX_TOKEN: uma funo que retorna o prximo token da entrada
ATUAL: o smbolo sendo analisado
TOPV(PILHA): funo que retorna (mas no desempilha) o estado do topo da pilha
LHS: vetor que contm o lado esquerdo de CADA produo da gramtica, mesmo que para isso
existam smbolos repetidos
SIZE: vetor que contm o nmero de smbolos no lado direito de cada produo
T, J: variveis locais
1 Inicializa a pilha para o estado inicial
EMPILHA(0)
2 Obtm o prximo token da entrada
ATUAL PROX_TOKEN
3 Realiza a anlise, se possvel
Repita at o passo 4 indefinidamente
4 Toma a ao apropriada
Se F(TOPV(PILHA), ATUAL) = S
T G(TOPV(PILHA), ATUAL)
EMPILHA(T) (coloca o estado atual na pilha)
ATUAL PROX_TOKEN
Seno Se F(TOPV(PILHA), ATUAL) = Reduz k
Escreva (k) (indica na sada do programa a produo aplicada)
Repita para J=1, 2, ... , SIZE[k]
Desempilha()
TG(TOPV(PILHA), LHS(k))
EMPILHA(T)
Seno Se F(TOPV(PILHA), ATUAL) = A
Escreva (Programa vlido)
Encerra
Seno
Escreva (Programa invlido)
Encerra

Anlise Sinttica LR(1)


Algoritmo LR(1)_Constructor: Dados os conjuntos de itens para uma gramtica G do tipo LR(1), na forma
C = {C0, C1, C2, ..., Cm}

Onde C0 o conjunto de itens inicial e os estados


{0, 1, 2, ..., m}
onde cada estado j obtido do conjunto de itens Cj, o algoritmo calcula as funes F e G do
analisador:
1 Crias as funes para o analisador:
Repete at o passo 3 para cada iten i no conjunto de estados
2 Calcula as clulas da tabela F
(a) Se o item [A.u, v]Ci onde uVT {} e h uma transio do estado i para o estado j em u,
ento F(i,u) Shift
(b) Se o item [A., u]Ci, onde A a j-sima produo, ento F(i,u) Reduo j
(c) Se o item [G., ]Ci ento (F(i, ) Aceita
(d) Todas as clulas no preenchidas so erro
3 Calcula a funo G:
(a) Se h uma transio do estado i para o estado j pelo smbolo A, ento G(i,a) j
(b) Todas as outras entradas so erro

Anda mungkin juga menyukai