Professional Documents
Culture Documents
A.S.D. Preditivos
por tabela uso de uma pilha P para armazenar a parte da forma sentencial esquerda ainda no analisada (fcil de automatizar). So eficientes, pois gerenciam a pilha de ativao explicitamente.
com
procedimentos recursivos (fcil de implementar manualmente; produz cdigo mais legvel que facilita a manuteno)
X Y Z Pilha
Programa genrico
sada
terminais
Procedimento ASD_dirigido_por_tabela P[1]S; i1; terminofalse; simboloanalex(S); repita XP[i]; se X terminal ento se X=simbolo ento desempilha [simboloanalex(S); ii-1; pilha vazia se i=0 ento termino=true] seno ERRO seno se tabela[X,simbolo] ento [P[i]Xn; P[i+1]Xn-1; ... P[i+n-1]X1; ii+n-1] seno ERRO troca o topo pela produo, at termino empilha inversamente e se simbolo $ ento ERRO avana o topo seno ACEITAR
Para cada terminal a First () coloque A -> na entrada M[A, ] Se First () coloque A -> para M[A,b] para cada b Follow (A) Se First () e $ Follow (A) coloque A -> para M[A,$]
FOLLOW
1. 2.
2.
3.
Se x terminal ento First(X) = {X} Se X -> produo ento coloque no First(x) Se X no terminal e X -> Y1Y2 ...Yn produo adicione First(Yi) para First(X) se os precedentes Yjs contm em seus First
3.
Follow(S) contm $ Para A -> B tudo em First() exceto vai para Follow(B) Para A -> B ou A -> B onde First() contm , Follow(B) contm tudo que est no Follow (A)
1. Construo da Tabela de Anlise (com regra 1) para uma gramtica sem S 1AS | 2 BA A 3 aB | 4 C B 5 bA | 6 d C7c
Seja a gramtica S AS | BA A aB | C B bA | d Cc 1 A 2 B 3 a 4 C 5 b 6 d 7 c S A B A
First S A B C a, c, b, d a, c b, d c
Tabela de Anlise T NT a b c S 1 2 1 A 3 4 B 5 C 7
d 2 6
Anlise de abcdad
i 1 2 3 2 3 2 2 2 1 2 2 1 2 1 1 P S SA SBa SB SAb SA SC Sc S AB Ad A Ba B d X S A a B b A C c S B d A a B d cadeia abcdad abcdad abcdad bcdad bcdad cdad cdad cdad dad dad dad ad ad d d $ Regra escolhida SAS AaB --BbA --AC Cc --SBA Bd --AaB --Bd ---
S if E then S S | a S else S | Eb
S if E then S S | a S 3else S | 4 E 5b
Tabela de Anlise
NT T
if 1
then else
a 2
topo da pilha
S E
3/4 5
Problema na tabela: ambigidade na aplicao das regras para o else soluo: exclui-se uma das regras
e adota-se a regra informal de associar o else com o if mais prximo
Tabela de Anlise
NT T
if 1
then else
a 2
S S E
3 5
excluiu-se a regra 4
Anlise da sentena
Outro exemplo
S-> a | [L] L -> S ; L | S Reescrita S-> a | [L] L -> SX X -> ; L |