Carregar apresentação
A apresentação está carregando. Por favor, espere
1
Análise Sintática - Continuação
Prof. Heloise Manica Paris Teixeira Parte 2 Slides cedidos pela Prof. Valéria Feltrin (DIN-UEM)
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
Inicialmente, para todos os não terminais A da gramática G, todos os conjuntos Seguidor(A) estão vazios, excetuando-se Seguidor(S)= { $ } Se há uma regra A Ba, então acrescente a ao Seguidor(B) Se há uma regra A Ba, e =B1 ... Bm *ε, então acrescente a ao Seguidor(B) Se há uma regra A BC, e =B1 ... Bm *ε, então acrescente Primeiro(C), exceto ε, a Seguidor(B) Se há uma regra A B, e =B1 ... Bm *ε, então acrescente Seguidor(A) a Seguidor(B) Aplique as regras 2-5 enquanto houver modificação em algum dos conjuntos
5
Seguidor: Exemplo Uma forma de proceder é 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
seguidor(E) = { $ , ) } regras 1 e 2
Inicialmente, para todos os não terminais A da gramática G, todos os conjuntos Seguidor(A) estão vazios, excetuando-se Seguidor(S)= { $ } Se há uma regra A Ba, então acrescente a ao Seguidor(B) 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
7
onde Vn = {E,T,F,E',T'}, Vt = { (, ), id, +, * }, S=E
Regra 5: Se há uma regra A B, e =B1 ... Bm *ε, então acrescente Seguidor(A) a Seguidor(B) 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 seguidor(E') = seguidor(E) = { ), $ } regra 5
8
P: E TE’ E’ +TE’ | ε T FT’ T’ *FT’ | ε F (E) | id
Se há uma regra A BC, e =B1 ... Bm *ε, então acrescente Primeiro(C), exceto ε, a Seguidor(B) E T, e =B1 ... Bm *ε, então acrescente Seguidor(E) a Seguidor(T) 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 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 }
9
P: E TE’ E’ +TE’ | ε T FT’ T’ *FT’ | ε F (E) | id
Regra 5: Se há uma regra A B, e =B1 ... Bm *ε, então acrescente Seguidor(A) a Seguidor(B) 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 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
10
P: E TE’ E’ +TE’ | ε T FT’ T’ *FT’ | ε F (E) | id
Se há uma regra A BC, e =B1 ... Bm *ε, então acrescente Primeiro(C), exceto ε, a Seguidor(B) A B, e =B1 ... Bm *ε, então acrescente Seguidor(A) a Seguidor(B) 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 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 }
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 S(P) = {$} regra 1 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 } 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 onde Vn = {P, A, B, C, D}, Vt = { a, b, c, d }, S=P
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 } Se há uma regra A BC, e =B1 ... Bm *ε, então acrescente Primeiro(C), exceto ε, a Seguidor(B)
14
Seguidor:Exercício onde Vn = {P, A, B, C, D}, Vt = { a, b, c, d }, S=P
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 }
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.