Upload
roberto-kotta
View
212
Download
0
Embed Size (px)
DESCRIPTION
nalise sintatica para estudo
Citation preview
Anlise Sinttica - ContinuaoProf. Heloise Manica Paris TeixeiraSlides cedidos pela Prof. Valria Feltrin (DIN-UEM)Parte 2
Coletando informaes sobre uma gramticaDada uma gramtica GLC, podem-se identificar certas informaes necessrias para a construo de compiladoresDeciso de qual regra aplicar
Para um no-terminal A, queremos saber:Se A gera a cadeia vazia (visto em aula anterior)Quais so os terminais que iniciam as cadeias geradas por A Conjunto Primeiro(A) (ou first(A))Quais so os terminais que seguem A Conjunto Seguidor(A) (ou follow(A))
Seguidor (ou follow)Conjunto de terminais que seguem um smbolo da gramtica, ou seja, que aparecem imediatamente direita deste smboloa est em Seguidor(A) se A * Aa, para cadeias e quaisquer
Em outras palavras:a est em Seguidor(A) se em algum ponto de uma derivao a for o smbolo imediatamente a direita de A
Regras para determinar o conjunto SeguidorInicialmente, para todos os no terminais A da gramtica G, todos os conjuntos Seguidor(A) esto vazios, excetuando-se Seguidor(S)= { $ }Se h uma regra A Ba, ento acrescente a ao Seguidor(B)Se h uma regra A Ba, e =B1 ... Bm *, ento acrescente a ao Seguidor(B)Se h uma regra A BC, e =B1 ... Bm *, ento acrescente Primeiro(C), exceto , a Seguidor(B)Se h uma regra A B, e =B1 ... Bm *, ento acrescente Seguidor(A) a Seguidor(B)Aplique as regras 2-5 enquanto houver modificao em algum dos conjuntos
Seguidor: ExemploP:E TEE +TE | T FT T *FT | F (E) | id
onde Vn = {E,T,F,E',T'}, Vt = { (, ), id, +, * }, S=E
Uma forma de proceder para cada no terminal A, examine todas as produes em que A aparece do lado direito, segundo as regras para o clculo do seguidor, e monte o conjunto seguidor(A).First (E) = Fistr(T) = First(F) = { ( , id }First (E) = { +, }First (T) = { *, }First (T) = { (, id }First (F) = { (, id }
P:E TEE +TE | T FT T *FT | F (E) | id
onde Vn = {E,T,F,E',T'}, Vt = { (, ), id, +, * }, S=E
seguidor(E) = { $ , ) } regras 1 e 2Inicialmente, para todos os no terminais A da gramtica G, todos os conjuntos Seguidor(A) esto vazios, excetuando-se Seguidor(S)= { $ }Se h uma regra A Ba, ento acrescente a ao Seguidor(B)
P:E TEE +TE | T FT T *FT | F (E) | id
onde Vn = {E,T,F,E',T'}, Vt = { (, ), id, +, * }, S=Eseguidor(E) = { $ , ) } regras 1 e 2seguidor(E') = seguidor(E) = { ), $ } regra 5Regra 5: Se h uma regra A B, e =B1 ... Bm *, ento acrescente Seguidor(A) a Seguidor(B)
P:E TEE +TE | T FT T *FT | F (E) | id
onde Vn = {E,T,F,E',T'}, Vt = { (, ), id, +, * }, S=E
seguidor(E) = { ), $ } regras 1 e 2seguidor(E') = seguidor(E) = { ), $ } regra 5seguidor(T) = primeiro(E) U seguidor(E) = { +, ), $ } regras 4 e 5First (E) = { ( , id }First (E) = { +, }First (T) = { *, }First (T) = { (, id }First (F) = { (, id }Se h uma regra A BC, e =B1 ... Bm *, ento acrescente Primeiro(C), exceto , a Seguidor(B)Se h uma regra E T, e =B1 ... Bm *, ento acrescente Seguidor(E) a Seguidor(T)
P:E TEE +TE | T FT T *FT | F (E) | id
onde Vn = {E,T,F,E',T'}, Vt = { (, ), id, +, * }, S=E
seguidor(E) = { ), $ } regras 1 e 2seguidor(E') = seguidor(E) = { ), $ }regra 5seguidor(T) = primeiro(E) U seguidor(E) U seguidor(E) = { +, ), $ } regras 4 e 5seguidor(T) = seguidor(T) = { +, ), $ }regra 5Regra 5: Se h uma regra A B, e =B1 ... Bm *, ento acrescente Seguidor(A) a Seguidor(B)
P:E TEE +TE | T FT T *FT | F (E) | id
onde Vn = {E,T,F,E',T'}, Vt = { (, ), id, +, * }, S=E
seguidor(E) = { ), $ } regras 1 e 2seguidor(E') = seguidor(E) = { ), $ }regra 5seguidor(T) = primeiro(E) U seguidor(E) U seguidor(E) = { +, ), $ } regras 4 e 5seguidor(T) = seguidor(T) = { +, ), $ }regra 5seguidor(F) = primeiro(T') U seguidor(T) U seguidor(T) = {*, +, ), $ } regras 4 e 5First (E) = { ( , id }First (E) = { +, }First (T) = { *, }First (T) = { (, id }First (F) = { (, id }Se h uma regra A BC, e =B1 ... Bm *, ento acrescente Primeiro(C), exceto , a Seguidor(B)Se h uma regra A B, e =B1 ... Bm *, ento acrescente Seguidor(A) a Seguidor(B)
Seguidor:ExerccioEncontre os conjuntos Seguidor para a gramtica abaixo:
P ABCDA aA | B Bb | C AB | cD d
onde Vn = {P, A, B, C, D}, Vt = { a, b, c, d }, S=PF(P) = { a, b, c, d}F(A) = { a, } F(B) = { b, } F(C) = { a, b, c, }F(D) = { d }
Seguidor:ExerccioP ABCDA aA | B Bb | C AB | cD donde Vn = {P, A, B, C, D}, Vt = { a, b, c, d }, S=P
S(P) = {$} regra 1P(P) = { a, b, c, d}P(A) = { a, } P(B) = { b, } P(C) = { a, b, c, }P(D) = { d }Inicialmente, para todos os no terminais A da gramtica G, todos os conjuntos Seguidor(A) esto vazios, excetuando-se Seguidor(S)= { $ }
Seguidor:ExerccioP ABCDA aA | B Bb | C AB | cD donde Vn = {P, A, B, C, D}, Vt = { a, b, c, d }, S=P
S(P) = {$} regra 1S(A) = P(B) U P(C) U P(D) = {a, b, c, d} regra 4P(P) = { a, b, c, d}P(A) = { a, } P(B) = { b, } P(C) = { a, b, c, }P(D) = { d }Se h uma regra A BC, e =B1 ... Bm *, ento acrescente Primeiro(C), exceto , a Seguidor(B)
Seguidor:ExerccioP ABCDA aA | B Bb | C AB | cD donde Vn = {P, A, B, C, D}, Vt = { a, b, c, d }, S=P
S(P) = {$} regra 1S(A) = P(B) U P(C) U P(D) = {a, b, c, d} regra 4S(B) = {b} U P(C) U P(D) U S(C) = {a, b, c, d} regras 2 e 4S(C) = {d} regra 4S(D) = {$} regra 5P(P) = { a, b, c, d}P(A) = { a, } P(B) = { b, } P(C) = { a, b, c, }P(D) = { d }