14
Análise Sintática - Continuação Prof. Heloise Manica Paris Teixeira Slides cedidos pela Prof. Valéria Feltrin (DIN-UEM) Parte 2

AnaliseSintatica_2(3Bim)

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 }