Análise Sintática - Continuação

Slides:



Advertisements
Apresentações semelhantes
Linguagens Livre-de-contexto
Advertisements

FAPE - Curso de Ciência da Computação
FAPE - Curso de Ciência da Computação
Software Básico Silvio Fernandes
5.5 – Análise Bottom-Up Tentativa de construir uma árvore sintática para a sentença analisada, começando das folhas, indo em direção à raiz (pós-ordem.
III – Análise sintáctica
I - Noções dum compilador
Prof. Yandre Maldonado e Gomes da Costa
LFA - Ambiguidade - Equivalência de gramáticas - Hierarquia de Chomsky
TEORIA DA COMPUTAÇÃO Parte II  Linguagens Livres de Contexto
Teoria da Computação FIC– Ciência da Computação
Deyvisson, Rafael M.P., Renato, Robson C.F., Rodolfo
Análise Sintática Ascendente ­
Análise Léxica (Parte 2)
Introdução a Algoritmos Seqüenciais
Forma Normal de Chomsky
Introdução à Compilação Prof. Leandro Magno Slides adaptados a partir do material cedido pelos professores Heloise Manica Paris Teixeira, Yandre M. G.
Prof. Heloise Manica Paris Teixeira
Profa. Heloise Manica Paris Teixeira
Análise Sintática - Continuação
Linguagens Livres de Contexto
Linguagens Livre de Contexto
esquerda p/ direita,read only
Análise Dada uma cadeia de terminais w, queremos saber se wL(G) ou não. Se for o caso, poderemos querer achar uma derivação de w. Um algoritmo que pode.
Identificando Linguagens Não Regulares
Curso Sistemas de Informação Disciplina: Arquitetura de Software
Análise Sintática Ascendente
Relações em uma Gramática
Autômatos Finitos Determinísticos
Construção de Compiladores
Construção de Compiladores
Construção de Compiladores
Alfabetos, Palavras e Linguagens
Prof. Luiz A M Palazzo Pelotas, fevereiro de 2011
Exercícios Linguagens Formais.
Prof. Bruno Moreno Aula 4 – 11/03/2011
Análise léxica e sintática
Determinar o tipo de gramática
Compiladores, Aula Nº 9 João M. P. Cardoso
Lemas (Sudkamp)  .
Aula 18 Regra de LHospital. Introdução Determine caso exista o limite a seguir: Solução:
PRODUTOS NOTÁVEIS.
Gramáticas Livres de Contexto
Compiladores, Aula Nº 10 João M. P. Cardoso
Teoria da Computação Aula 1 Prof. Fabiano Sabha.
Expressões Regulares e Gramáticas
Capítulo II Gramáticas e Linguagens
Aula 14 1 Análise Sintáctica Compiladores, Aula Nº 14 João M. P. Cardoso.
Analise sintática aula-07-analise-sintática.pdf.
Esquemas L-atribuídos
Análise Sintática LR Prof. Alexandre Monteiro
Aula 12 1 Análise Sintáctica Compiladores, Aula Nº 12 João M. P. Cardoso.
CES-41 COMPILADORES Aulas Práticas Capítulo II A Ferramenta Yacc.
Aula 18 1 Análise Sintáctica Compiladores, Aula Nº 18 João M. P. Cardoso.
Revisão Compiladores – AP2
Análise Sintática de Descida Recursiva
Compiladores Análise Sintática
COMPILADORES 04 Prof. Marcos.
Linguagens Formais - aula 02
Engenharia/Ciência da Computação
Sintaxe de uma Linguagem
tópicostópicos itens 01. Terminologia 02. Operações básicas 03. Representação de linguagens 04. Formalização de gramáticas 05. Processo de derivação 06.
Analisador sintático: Tipos de análises sintáticas
Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo.
Operações com conjuntos Informações importantes. Igualdade de conjuntos Dois conjuntos A e B são considerados iguais quando tem a mesma quantidade de.
Faculdade Pernambuca - FAPE Compiladores Abril/2007 Compiladores Abril/2007.
Informática Teórica Engenharia da Computação. Teoria da Computação Contexto do que vamos começar a estudar As linguagens também podem ser definidas formalmente.
COMPILADORES 03 Prof. Marcos.
MA91A – Cálculo Diferencial e Integral I
Transcrição da apresentação:

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

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))

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

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  Ba, e  =B1 ... Bm *ε, então acrescente a ao Seguidor(B) Se há uma regra A  BC, 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

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 }

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

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

P: E  TE’ E’  +TE’ | ε T  FT’ T’  *FT’ | ε F  (E) | id Se há uma regra A  BC, 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 }

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

P: E  TE’ E’  +TE’ | ε T  FT’ T’  *FT’ | ε F  (E) | id Se há uma regra A  BC, 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 }

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 }

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)= { $ }

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  BC, e  =B1 ... Bm *ε, então acrescente Primeiro(C), exceto ε, a Seguidor(B)

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 }