A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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

Apresentações semelhantes


Apresentação em tema: "Análise Sintática - Continuação Prof. Heloise Manica Paris Teixeira Slides cedidos pela Prof. Valéria Feltrin (DIN-UEM) Parte 2."— Transcrição da apresentação:

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

2 Coletando informações sobre uma gramática Dada uma gramática GLC, podem-se identificar certas informações necessárias para a construção de compiladores –Decisão de qual regra aplicar Para um não-terminal A, queremos saber: –Se A gera a cadeia vazia ε (visto em aula anterior) –Quais são os terminais que iniciam as cadeias geradas por A Conjunto Primeiro(A) (ou first(A)) –Quais são os terminais que seguem A Conjunto Seguidor(A) (ou follow(A))

3 Seguidor (ou follow) Conjunto de terminais que seguem um símbolo da gramática, ou seja, que aparecem imediatamente à direita deste símbolo –a 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 derivação a for o símbolo imediatamente a direita de A

4 Regras para determinar o conjunto Seguidor 1.Inicialmente, para todos os não terminais A da gramática G, todos os conjuntos Seguidor(A) estão vazios, excetuando-se Seguidor(S)= { $ } 2.Se há uma regra A Ba, então acrescente a ao Seguidor(B) 3.Se há uma regra A B a, e =B 1... B m *ε, então acrescente a ao Seguidor(B) 4.Se há uma regra A B C, e =B 1... B m *ε, então acrescente Primeiro(C), exceto ε, a Seguidor(B) 5.Se há uma regra A B, e =B 1... B m *ε, então acrescente Seguidor(A) a Seguidor(B) 6.Aplique as regras 2-5 enquanto houver modificação em algum dos conjuntos

5 Seguidor: Exemplo P:E TE E +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 não terminal A, examine todas as produções em que A aparece do lado direito, segundo as regras para o cálculo 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 }

6 P:E TE E +TE | ε T FT T *FT | ε F ( E ) | id onde Vn = {E,T,F,E',T'}, Vt = { (, ), id, +, * }, S=E seguidor(E) = { $, ) } regras 1 e 2 1.Inicialmente, para todos os não terminais A da gramática G, todos os conjuntos Seguidor(A) estão vazios, excetuando-se Seguidor(S)= { $ } 2.Se há uma regra A Ba, então acrescente a ao Seguidor(B)

7 P:E T E E +TE | ε T FT T *FT | ε F (E) | id onde Vn = {E,T,F,E',T'}, Vt = { (, ), id, +, * }, S=E seguidor(E) = { $, ) } regras 1 e 2 seguidor(E') = seguidor(E) = { ), $ } regra 5 Regra 5: Se há uma regra A B, e =B 1... B m *ε, então acrescente Seguidor(A) a Seguidor(B)

8 P:E T E E + T E | ε T FT T *FT | ε F (E) | id onde Vn = {E,T,F,E',T'}, Vt = { (, ), id, +, * }, S=E seguidor(E) = { ), $ } regras 1 e 2 seguidor(E') = seguidor(E) = { ), $ } regra 5 seguidor(T) = primeiro(E) U seguidor(E) = { +, ), $ } regras 4 e 5 First (E) = { (, id } First (E) = { +, ε } First (T) = { *, ε } First (T) = { (, id } First (F) = { (, id } 4.Se há uma regra A B C, e =B 1... B m *ε, então acrescente Primeiro(C), exceto ε, a Seguidor(B) 5.Se há uma regra E T, e =B 1... B m *ε, então acrescente Seguidor(E) a Seguidor(T)

9 P:E TE E +TE | ε T F T T * F T | ε F (E) | id onde Vn = {E,T,F,E',T'}, Vt = { (, ), id, +, * }, S=E seguidor(E) = { ), $ } regras 1 e 2 seguidor(E') = seguidor(E) = { ), $ } regra 5 seguidor(T) = primeiro(E) U seguidor(E) U seguidor(E) = { +, ), $ } regras 4 e 5 seguidor(T) = seguidor(T) = { +, ), $ } regra 5 Regra 5: Se há uma regra A B, e =B 1... B m *ε, então acrescente Seguidor(A) a Seguidor(B)

10 P:E TE E +TE | ε T F T T * F T | ε F (E) | id onde Vn = {E,T,F,E',T'}, Vt = { (, ), id, +, * }, S=E seguidor(E) = { ), $ } regras 1 e 2 seguidor(E') = seguidor(E) = { ), $ } regra 5 seguidor(T) = primeiro(E) U seguidor(E) U seguidor(E) = { +, ), $ } regras 4 e 5 seguidor(T) = seguidor(T) = { +, ), $ } regra 5 seguidor(F) = primeiro(T') U seguidor(T) U seguidor(T) = {*, +, ), $ } regras 4 e 5 First (E) = { (, id } First (E) = { +, ε } First (T) = { *, ε } First (T) = { (, id } First (F) = { (, id } 4.Se há uma regra A B C, e =B 1... B m *ε, então acrescente Primeiro(C), exceto ε, a Seguidor(B) 5.Se há uma regra A B, e =B 1... B m *ε, então acrescente Seguidor(A) a Seguidor(B)

11 Seguidor:Exercício Encontre os conjuntos Seguidor para a gramática abaixo: P ABCD A aA | ε B Bb | ε C AB | c D d onde Vn = {P, A, B, C, D}, Vt = { a, b, c, d }, S=P F(P) = { a, b, c, d} F(A) = { a, ε } F(B) = { b, ε } F(C) = { a, b, c, ε} F(D) = { d }

12 Seguidor:Exercício P ABCD A aA | ε B Bb | ε C AB | c D d onde Vn = {P, A, B, C, D}, Vt = { a, b, c, d }, S=P S(P) = {$} regra 1 P(P) = { a, b, c, d} P(A) = { a, ε } P(B) = { b, ε } P(C) = { a, b, c, ε} P(D) = { d } 1.Inicialmente, para todos os não terminais A da gramática G, todos os conjuntos Seguidor(A) estão vazios, excetuando-se Seguidor(S)= { $ }

13 Seguidor:Exercício P ABCD A aA | ε B Bb | ε C AB | c D d onde Vn = {P, A, B, C, D}, Vt = { a, b, c, d }, S=P S(P) = {$} regra 1 S(A) = P(B) U P(C) U P(D) = {a, b, c, d} regra 4 P(P) = { a, b, c, d} P(A) = { a, ε } P(B) = { b, ε } P(C) = { a, b, c, ε} P(D) = { d } 4.Se há uma regra A B C, e =B 1... B m *ε, então acrescente Primeiro(C), exceto ε, a Seguidor(B)

14 Seguidor:Exercício P ABCD A aA | ε B Bb | ε C AB | c D d onde Vn = {P, A, B, C, D}, Vt = { a, b, c, d }, S=P S(P) = {$} regra 1 S(A) = P(B) U P(C) U P(D) = {a, b, c, d} regra 4 S(B) = {b} U P(C) U P(D) U S(C) = {a, b, c, d} regras 2 e 4 S(C) = {d} regra 4 S(D) = {$} regra 5 P(P) = { a, b, c, d} P(A) = { a, ε } P(B) = { b, ε } P(C) = { a, b, c, ε} P(D) = { d }


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

Apresentações semelhantes


Anúncios Google