Compiladores Aula 4. Celso Olivete Júnior.

Documentos relacionados
LFA Aula 09. Gramáticas e Linguagens Livres de Contexto 18/01/2016. Linguagens Formais e Autômatos. Celso Olivete Júnior.

Hierarquia de Chomsky Exemplos de gramáticas

Gramática. Gramática. Gramática

Linguagens Formais. Aula 01 - Conceitos Básicos. Prof. Othon Batista Mestre em Informática

Disciplina: LINGUAGENS FORMAIS, AUTÔMATOS E COMPUTABILIDADE Prof. Jefferson Morais

Linguagens Formais e Autômatos 02/2015. LFA Aula 02. introdução 28/09/2015. Celso Olivete Júnior.

Parsing Preditivo. Antes de ser abordado o Parsing Preditivo, será apresentado o Analisador Sintático Descendente Recursivo.

Definições Exemplos de gramáticas

Linguagens Formais e Autômatos P. Blauth Menezes

COMPILADORES. Análise sintática. Prof. Geovane Griesang Universidade de Santa Cruz do Sul UNISC Departamento de informática

Análise Sintática. Fabiano Baldo

Definições Hierarquia de Chomsky Exemplos de gramáticas

Análise Sintática II: Analisadores Descendentes Preditivos

Definições Hierarquia de Chomsky Exemplos de gramáticas

Como construir um compilador utilizando ferramentas Java

Gramáticas Livres de Contexto Parte 1

Conceitos Básicos. Vocabulário Cadeias Linguagens Expressões Regulares Problema X Linguagem

Linguagens Formais e Autômatos 02/2016. LFA Aula 01 24/10/2016. Celso Olivete Júnior.

Análise Sintática (Cap. 04) Análise Sintática Descendente

Construção de Compiladores

Plano da aula. Compiladores. Os erros típicos são sintáticos. Análise Sintática. Usando Gramáticas. Os erros típicos são sintáticos

Gramáticas e Linguagens independentes de contexto

LINGUAGENS FORMAIS Definições. Desenvolveram-se na História em função da necessidade dos grupos humanos que as empregavam

LINGUAGENS FORMAIS E AUTÔMATOS

Construção de Compiladores Aula 16 - Análise Sintática

Compiladores. Análise lexical. Plano da aula. Motivação para análise lexical. Vocabulário básico. Estrutura de um compilador

Alfabeto, Cadeias, Operações e Linguagens

Apostila 03 - Linguagens Livres de Contexto Exercícios

Análise Sintática Introdução

Gramáticas ( [HMU00], Cap. 5.1)

Linguagens Formais e Autômatos. Conceitos Básicos Prof. Anderson Belgamo

INE5317 Linguagens Formais e Compiladores AULA 9: Propriedades e Reconhecimento das Linguagens Livres do Contexto

Apostila 01 Fundamentação da Teoria da Computação e Linguagens Formais

Gramática regular. IBM1088 Linguagens Formais e Teoria da Computação. Evandro Eduardo Seron Ruiz Universidade de São Paulo

Conceitos Básicos. Vocabulário Cadeias Linguagens Problema

Capítulo 3: Gramáticas

Linguagens Regulares. Prof. Daniel Oliveira

Linguagens Livres de Contexto

Se o símbolo inicial não fizer parte do conjunto de símbolos férteis, a linguagem gerada pela gramática é vazia.

Capítulo 1: Alfabetos, cadeias, linguagens

Compiladores I Prof. Ricardo Santos (cap 3 Análise Léxica: Introdução, Revisão LFA)

Compiladores Aula 5. Celso Olivete Júnior.

Prof. Adriano Maranhão COMPILADORES

TEORIA DAS LINGUAGENS 3. GRAMÁTICAS INDEPENDENTES DE CONTEXTO

Concurso Público para provimento de cargo efetivo de Docentes. Edital 20/2015 CIÊNCIA DA COMPUTAÇÃO II Campus Rio Pomba

Linguagens Formais e Autômatos

Compiladores Analisador Sintático. Prof. Antonio Felicio Netto Ciência da Computação

Linguagens Formais e Autômatos P. Blauth Menezes

Compiladores - Análise Léxica

Teoria da Computação. Unidade 3 Máquinas Universais. Referência Teoria da Computação (Divério, 2000)

Disciplina: LINGUAGENS FORMAIS, AUTÔMATOS E COMPUTABILIDADE Prof. Jefferson Morais

Lista de exercícios 1

SCC Capítulo 1 Linguagens Regulares e Autômatos Finitos

INE5317 Linguagens Formais e Compiladores AULA 3: Introdução a Teoria da Computação

UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO. Prof.ª Danielle Casillo

UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO. Prof.ª Danielle Casillo

Construção de Compiladores Aula 3 - Analisador Sintático

Teoria da Computação. Máquinas Universais Máquina com Pilhas

Linguagens Formais e Autômatos (LFA)

Revisão de GLC e Analisadores Descendentes

Prova 1 de INF1626 Linguagens Formais e Autômatos

Conceitos de Linguagens de Programação

Analisadores Sintáticos LR

O uso de gramáticas traz vantagens para projetistas de linguagens e escritores de compiladores pelas seguintes razões:

Análise sintática. Análise sintática. Top-down ou descendente. Com retrocesso: por tentativa e erro. Preditiva: para gramáticas LL(1) 09/04/2012

Compiladores. Top-Down x Bottom Up. Plano da aula. Redução exemplo 1. Redução exemplo 1. Lembrando: construir a tabela de análise LL(1) A Abc b B d

Análise Sintática (Cap. 04) Análise Sintática Ascendente Analisador Sintático LR

COMPILADORES. Análise sintática. Prof. Geovane Griesang Universidade de Santa Cruz do Sul UNISC Departamento de informática

INE5317 Linguagens Formais e Compiladores AULA 5: Autômatos Finitos

Transformações úteis para GLC: (1) eliminação de produções nulas; (2) eliminação de produções unitárias; (3) Eliminação de símbolos estéreis e

Exemplo preliminar. Considere a linguagem dos Palíndromos Lpal:

Máquina de Turing Linguagens Sensíveis ao Contexto e Enumeráveis Recursivamente

Aula 7: Autômatos com Pilha

Como construir um compilador utilizando ferramentas Java

Um alfabeto é um conjunto de símbolos indivisíveis de qualquer natureza. Um alfabeto é geralmente denotado pela letra grega Σ.

Terceira Lista de Exercícios 2004/2...

Autômatos com Pilha: Reconhecedores de LLCs

Compiladores - Análise LL(1)

Expressões Regulares e Gramáticas Regulares

Introdução à Programação

Como construir um compilador utilizando ferramentas Java

Propriedades de Linguagens Livres de Contexto. Propriedades de Linguagens Livres de Contexto. Propriedades de Linguagens Livres de Contexto

Compiladores - Gramáticas

Análise Sintática Bottom-up

I.2 Introdução a Teoria da Computação

Linguagens de Programação Aula 3

Procedimentos e Algorítmos Programas e Linguagens de Programação Tese de Church-Turing Formas de Representação de Linguagens

Linguagens livres de contexto e autômatos de pilha

Linguagens Formais e Compilação Ficha de exercícios

Linguagem (formal) de alfabeto Σ

Compiladores. A seção das regras. Especificação (F)lex. Plano da aula. Escolha das regras. Compilação típica com FLEX

TRANSFORMAÇÃO DE GRAMÁTICAS LIVRES DO CONTEXTO PARA EXPRESSÕES REGULARES ESTENDIDAS

Transcrição:

Aula 4 Celso Olivete Júnior olivete@fct.unesp.br

Na aula de hoje... Revisão: gramáticas Relações em uma gramática: Cabeça, Último, Primeiro (First) e Seguinte (Follow) Capítulo 4 (seção 4.4.2) do livro : Princípios, técnicas e ferramentas 2

Definições Alfabeto ou vocabulário: Conjunto finito não vazio de símbolos. Símbolo é um elemento qualquer de um alfabeto. Ex: {a,b} {0,1,2,3,4,5,6,7,8,9} Cadeia: Concatenação de símbolos de um alfabeto. Define-se como cadeia vazia ou nula uma cadeia que não contém nenhum símbolo. Ex: aab 123094 λ cadeia nula 3

Definições Comprimento de cadeia: Número de símbolos de uma cadeia. Ex: aab = 3 123094 =6 λ =0 4

Definições Linguagem é uma coleção de cadeias de símbolos, de comprimento finito. Estas cadeias são denominadas sentenças da linguagem, e são formadas pela justaposição de elementos individuais, que são os símbolos ou átomos da linguagem. 5

Definições Métodos de Representação de Linguagens 1) Enumeração (especificação) das cadeias de símbolos que formam as suas sentenças (somente linguagens finitas podem ser representadas por este método) 2) Através de um conjunto de leis de formação das cadeias (Gramática) 3) Através de regras de aceitação de cadeias (às regras de aceitação dá-se o nome de Reconhecedor - autômatos) 6

Gramáticas 2) Leis de Formação Através de um conjunto de leis de formação das cadeias (ao conjunto de leis de formação dá-se o nome de Gramática) dada uma cadeia de símbolos, só é possível afirmar que tal cadeia pertence à linguagem se for possível, aplicando-se as leis de formação que compõem a gramática da linguagem, derivar (sintetizar) a cadeia em questão. Ao processo de obtenção de uma sentença a partir da gramática dá-se o nome de derivação da sentença. 7

Gramáticas Gramáticas Formalmente as gramáticas, são caracterizadas como quádruplas ordenadas onde: G = ( Vn, Vt, P, S) Vn representa o vocabulário não terminal (variáveis) da gramática. Este vocabulário corresponde ao conjunto de todos os símbolos dos quais a gramática se vale para definir as leis de formação das sentenças da linguagem. 8

Gramáticas Gramáticas Formalmente as gramáticas, são caracterizadas como quádruplas ordenadas onde: G = ( Vn, Vt, P, S) Vt é o vocabulário terminal, contendo os símbolos que constituem as sentenças da linguagem. Dá-se o nome de terminais aos elementos de Vt. 9

Gramáticas Gramáticas Formalmente as gramáticas, são caracterizadas como quádruplas ordenadas onde: G = ( Vn, Vt, P, S) P são as regras de produção, que definem o conjunto de todas as leis de formação utilizadas pela gramática para definir a linguagem. Para tanto, cada construção parcial, representada por um não-terminal, é definida como um conjunto de regras de formação relativas à definição do não-terminal a ela referente. A cada uma destas regras de formação que compõem o conjunto P dá-se o nome de produção da gramática 10

Gramáticas Gramáticas Exemplo: P: S AB A a B bb b Símbolos que derivam Símbolos terminais G = ( Vn, Vt, P, S) G = ({S, A, B}, {a, b}, P, S) 1. Qual a linguagem produzida por esta gramática? 2. Faça a árvore de derivação para a cadeiaabbbbb Regras de produção Início da derivação 11

Gramáticas Gramáticas Exemplo: P: S AB A a B bb b Símbolos que derivam Símbolos terminais G = ( Vn, Vt, P, S) G = ({S, A, B}, {a, b}, P, S) Regras de produção Início da derivação 1. Qual a linguagem produzida por esta gramática? Linguagem que começa com um símbolo a seguido de n símbolos b s (n 1). Expressão regular que representa a linguagem abb* 2. Faça a árvore de derivação para a cadeiaabbbbb 12

Gramáticas Árvore de derivação a raiz tem como rótulo o símbolo inicial S da gramática. a cada nó rotulado por um não-terminal A corresponde uma regra de A. Se a regra for A X 1 X 2... X m, os filhos do nó são rotulados, da esquerda para a direita, por X 1, X 2,..., X m. (cada um dos X i pode ser um terminal ou um nãoterminal.) um nó rotulado por um terminal é sempre uma folha da árvore, e não tem filhos. 13

Gramáticas Árvore de derivação para a gramática e cadeia abbbbb G = ({S, A, B}, {a, b}, P, S) P:{ S AB A a B bb b } 14

Gramáticas 1. Duas gramáticas G1 e G2 são equivalentes se produzem a mesma linguagem L(G1) = L(G2) 2. Uma sentença é ambígua se existem duas ou mais sequências de derivação que a define. 3. Uma gramática é ambígua se possui alguma sentença ambígua. G: S AB A AA B a B Bcd A Verifique se x= aaacd é ambígua. É ambígua permite derivação mais à direita e mais à esquerda 15

Classes Gramaticais Conforme as restrições impostas ao formato das produções de uma gramática, a classe de linguagens que tal gramática gera varia correspondentemente. A teoria mostra que há quatro classes de gramáticas capazes de gerar quatro classes correspondentes de linguagens, de acordo com a denominada Hierarquia de Chomsky. a. Gramáticas com Estrutura de Frase ou Tipo 0 b. Gramáticas Sensíveis ao Contexto ou Tipo 1 c. Gramáticas Livres de Contexto ou Tipo 2 d. Gramáticas Regulares ou Tipo 3 16

Classes Gramaticais a. GramáticascomEstruturadeFraseouTipo0 São aquelas às quais nenhuma restrição é imposta. Exemplo de reconhecedor: Máquina de Turing com fita de entrada infinita Produções da forma α β Onde: α (Vn Vt) + G = ( Vn, Vt, P, S) β (Vn Vt) * Lado esquerdo da regra de produção pode conter N símbolos (terminais ou não terminais); Lado direito da regra de produção pode conter N símbolos (terminais ou não terminais ou vazio); 17

Classes Gramaticais a. GramáticascomEstruturadeFraseouTipo0 Exemplo de GEF: G = ({A, B, C}, {a, b}, P, A) P: A BC BC CB B b C a Qual a linguagem gerada? L(G) =? 18

Classes Gramaticais a. GramáticascomEstruturadeFraseouTipo0 Exemplo de GEF: G = ({A, B, C}, {a, b}, P, A) P: A BC BC CB B b C a Qual a linguagem gerada? L(G) = {ba, ab} 19

Classes Gramaticais b. Gramáticas Sensíveis ao Contexto ou Tipo 1 Restrição: nenhuma substituição pode reduzir o comprimento da forma sentencial à qual a substituição é aplicada. Produções da forma α β Onde: α (Vn Vt) + β (Vn Vt) + α β 20

Classes Gramaticais b. Gramáticas Sensíveis ao Contexto ou Tipo 1 Exemplo de GSC: G = ({S, B, C}, {a, b, c}, P, S) P : S asbc abc CB HB HB HC HC BC ab ab bb bb bc bc cc cc Qual a linguagem gerada? L(G) = {a n b n c n n 1} Faça a derivação (mais à esquerda ou mais à direita) α β Onde: α (Vn Vt) + β (Vn Vt) + α β 21

Classes Gramaticais c.gramáticas LivresdeContexto outipo2 As Gramáticas Livres de Contexto (GLC) ou do Tipo 2 são aquelas que no lado esquerdo da regra há apenas um símbolo não-terminal. 22

Classes Gramaticais c.gramáticas LivresdeContexto outipo2 Qual a linguagem gerada para: G = ({S,A,B},{a,b},P,S) P: S AB A aa a B bb b L(G)={a n b m n, m 1} 23

Classes Gramaticais d. Gramáticas Regulares ou Tipo 3 Aplicando-se mais uma restrição sobre a forma das produções, pode-se criar uma nova classe de gramáticas, as Gramáticas Regulares (GR), de grande importância no estudo dos compiladores por possuírem propriedades adequadas para a obtenção de reconhecedores simples. Nas GRs, as produções são restritas às formas seguintes: A ab ou A Ba A a A ε onde A,B Vn e a Vt no lado esquerdo da regra há apenas um símbolo nãoterminal 24

Classes Gramaticais d. Gramáticas Regulares ou Tipo 3 Exemplo GR em EBNF: G = ( {<Dig>, <Int>}, {+, -, 0,..., 9}, P, <Int>) P: <Int> ::= +<Dig> -<Dig> <Dig> ::= 0<Dig> 1<Dig>... 9<Dig> 0 1 2... 9 Qual linguagem gerada? L(G) = conj. números inteiros com sinal ±[0..9] 25

Na aula de hoje... Revisão: gramáticas Relações em uma gramática: Cabeça, Último, Primeiro (First) e Seguinte (Follow) Capítulo 4 (seção 4.4.2) do livro : Princípios, técnicas e ferramentas 26

Relações em uma Gramática A construção de analisadores sintáticos é facilitada através de algumas funções associadas a gramática: CABEÇA, ÚLTIMO, PRIMEIRO(First) e Seguinte(Follow). Ideia: permitem escolher qual produção aplicar com base no próximo símbolo lido. Trecho de código... if(a<1) then a:=12... Analisador léxico retornou o token if Partes das regras em EBNF <comando condicional 1> ::= if <expressão> then <comando> [else <comando>] <comando repetitivo 1> ::= while <expressão> do <comando> 27

Cabeça É uma das mais simples de identificar um de seus elementos é a cabeça do lado direito de uma regra Dada uma produção na forma α βγ Onde: α Vn β (Vn Vt) γ (Vn Vt) * Cabeça(α)=β P: S AB A aa a B bb b Exemplo Cabeça (S) =? Cabeça (A) =? Cabeça (B) =? 28

Cabeça É uma das mais simples de identificar um de seus elementos (terminal ou não-terminal) é a cabeça do lado direito de uma regra Dada uma produção na forma α βγ Onde: α Vn β (Vn Vt) γ (Vn Vt) * P: S AB A aa a B bb b Exemplo Cabeça (S) = {A} Cabeça (A) = {a} Cabeça (B) = {b} Cabeça(α)=β 29

Último Relaciona um dado não terminal, existente do lado esquerdo de uma certa regra, com o último elemento que aparece do lado direito desta regra Dada uma produção na forma α γβ Onde: α Vn P: S AB A aa a B bb b Exemplo β (Vn Vt) γ (Vn Vt) * Último (S) =? Último (A) =? Último (B) =? Último(α)=β 30

Último Relaciona um dado não terminal, existente do lado esquerdo de uma certa regra, com o último elemento (terminal ou nãoterminal) que aparece do lado direito desta regra Dada uma produção na forma α γβ Onde: α Vn β (Vn Vt) γ (Vn Vt) * Último(α)=β P: S AB A aa a B bb b Exemplo Último (S) = {B} Último (A) = {A,a} Último (B) = {B,b} 31

Primeiro (First) Relação próxima a relação cabeça; entretanto, deve conter somente terminais Primeiro(A) = x, onde A produz x como seu símbolo mais à esquerda com n derivações, sendo A Vn e x Vt* x pode ser a cadeia vazia P: S AB A aa a B bb b Exemplo Primeiro (S) = {a} Primeiro (A) = {a} Primeiro (B) = {b} 32

Primeiro (First) Para determinar PRIMEIRO(X): 1. Sexéum terminal, então PRIMEIRO(x) = {x} 2. Se X é não-terminal e X aα é uma produção, então se acrescenta a ao conjunto PRIMEIRO de x 3. SeXεéuma produção ε deve ser adicionado ao conjunto PRIMEIROde x 4. Se XY 1 Y 2...Y k é uma produção, então todo i tal que todos Y 1...Y i-1 são nãoterminais e PRIMEIRO(Y j ) contém ε, onde j=1,2...i-1. acrescente todo símbolo diferente de ε de PRIMEIRO(Y j ) a PRIMEIRO(X). Se ε PRIMEIRO(X), para todo i=1,2..k. então acrescente ε a PRIMEIRO(X). 33

Primeiro (First) Exemplo E TE E +TE ε T FT T *FT ε F (E) id Primeiro (E) = {?} Primeiro (E ) = {?} Primeiro (T) = {?} Primeiro (T ) = {?} Primeiro (F) = {?} 34

Primeiro (First) Exemplo E TE E +TE ε T FT T *FT ε F (E) id Primeiro (E) = Primeiro(T) = Primeiro(F) ={(, id} Primeiro (E ) = {+, ε} Primeiro (T) = Primeiro(F) = {(, id} Primeiro (T ) = {*, ε} Primeiro (F) = {(, id} F deriva em ε? R: Não, então primeiro(t) = primeiro(f) = {(, id} Se F derivasse em ε era preciso incluir o primeiro(t ) em primeiro(t) 35

Primeiro (First) Exemplo 2 E TE E +TE ε T FT H E T T *FT ε F (E) id Primeiro (H) = {?} Se fosse incluída esta regra na gramática como ficaria o primeiro(h)? 36

Primeiro (First) Exemplo 2 E TE E +TE ε T FT H E T T *FT ε F (E) id Primeiro (H) = Primeiro(E ) Primeiro(T) = {+, (, id } Regra 4 slide 33 E deriva em ε? R: Sim, então incluir o primeiro(t) em primeiro(h). Se primeiro(t) e primeiro(e ) contem ε então incluir ε em primeiro(h), caso contrário remover ε do primeiro(h) 37

Seguinte (Follow) Se A é um não-terminal, Seguinte(A) é o conjunto de terminais que podem figurar imediatamente à direita de A em alguma forma sentencial Seguinte(A)=x para a regra SαAβ e primeiro(β)=x Onde: A Vn x Vt * αe β (Vn Vt) * 38

Seguinte (Follow) Para determinar Seguinte(A): 1. Colocar $ em Seguinte(S) se S é o símbolo de partida - $ é o marcador de fim de entrada durante a análise sintática 2. Se existe uma produção A αbβ e β ε então tudo que estiver em PRIMEIRO(β), exceto ε, deve ser adicionado em Seguinte(B) 3. Se existe uma produção A αb ou A αbβ onde PRIMEIRO(β) contem ε (β ε), então tudo que está em Seguinte(A) está em Seguinte(B) 39

Seguinte (Follow) Seguinte(A)=x para a regra SαAβ e primeiro(β)=x E TE E +TE ε T FT T *FT ε F (E) id 1. 1. Colocar Colocar $ em em Seguinte(S) Seguinte(S) se se S é o símbolo símbolo de de partida - é o marcador de fim de entrada partida 2. Se existe uma produção A αbβ diferente 2. Se existe uma produção A αbβ e β é diferente de então tudo que estiver em PRIMEIRO(β), de ε então tudo que estiver em PRIMEIRO(β), exceto ε, deve ser adicionado em Seguinte(B) exceto ε, deve ser adicionado em Seguinte(B) 3. Se existe uma produção A αb ou A αbβ 3. Se existe uma produção A αb ou A αbβ onde PRIMEIRO(β) contêm (β ε), então tudo onde PRIMEIRO(β) contêm ε (β ε), então tudo que está em Seguinte(A) está em Seguinte(B) que está em Seguinte(A) está em Seguinte(B) Primeiro (E) = Primeiro(T) = Primeiro(F) = {(, id} Primeiro (E ) = {+, ε} Primeiro (T) = Primeiro(F) = {(, id} Primeiro (T ) = {*, ε} Primeiro (F) = {(, id} Regra 2 e Regra 1 Seguinte(E) = {), $} Seguinte(E ) = Seguinte(E) = {), $} Seguinte(T) = Primeiro(E ) = {+} U Seguinte(E) U Seguinte(E ) = {+,), $} Seguinte(T ) = Seguinte(T)= {+,), $} Seguinte(F) = primeiro(t') = {*} U Seguinte(T) U Seguinte(T ) = {*,+,), $} 40

Seguinte (Follow) Seguinte(A)=x para a regra SαAβ e primeiro(β)=x E TE E +TE ε T FT T *FT ε F (E) id 1. 1. Colocar Colocar $ em em Seguinte(S) Seguinte(S) se se S é o símbolo símbolo de de partida - é o marcador de fim de entrada partida 2. Se existe uma produção A αbβ diferente 2. Se existe uma produção A αbβ e β é diferente de então tudo que estiver em PRIMEIRO(β), de ε então tudo que estiver em PRIMEIRO(β), exceto ε, deve ser adicionado em Seguinte(B) exceto ε, deve ser adicionado em Seguinte(B) 3. Se existe uma produção A αb ou A αbβ 3. Se existe uma produção A αb ou A αbβ onde PRIMEIRO(β) contêm (β ε), então tudo onde PRIMEIRO(β) contêm ε (β ε), então tudo que está em Seguinte(A) está em Seguinte(B) que está em Seguinte(A) está em Seguinte(B) Primeiro (E) = Primeiro(T) = Primeiro(F) = {(, id} Primeiro (E ) = {+, ε} Primeiro (T) = Primeiro(F) = {(, id} Primeiro (T ) = {*, ε} Primeiro (F) = {(, id} Regra 3 Seguinte(E) = {), $} Seguinte(E ) = Seguinte(E) = {), $} Seguinte(T) = Primeiro(E ) = {+} U Seguinte(E) U Seguinte(E ) = {+,), $} Seguinte(T ) = Seguinte(T)= {+,), $} Seguinte(F) = primeiro(t') = {*} U Seguinte(T) U Seguinte(T ) = {*,+,), $} 41

Seguinte (Follow) Seguinte(A)=x para a regra SαAβ e primeiro(β)=x E TE E +TE ε T FT T *FT ε F (E) id 1. Colocar $ em Seguinte(S) se S é o símbolo de partida 2. Se existe uma produção A αbβ e β é diferente de ε então tudo que estiver em PRIMEIRO(β), exceto ε, deve ser adicionado em Seguinte(B) 3. Se existe uma produção A αb ou A αbβ Primeiro (E) = Primeiro(T) = Primeiro(F) = {(, id} Primeiro (E ) = {+, ε} Primeiro (T) = Primeiro(F) = {(, id} Primeiro (T ) = {*, ε} Primeiro (F) = {(, id} Regras 2 e 3 Seguinte(E) = {), $} Seguinte(E ) = Seguinte(E) = {), $} Seguinte(T) = Primeiro(E ) = {+} U Seguinte(E) U Seguinte(E ) = {+,), $} Seguinte(T ) = Seguinte(T)= {+,), $} Seguinte(F) = primeiro(t') = {*} U Seguinte(T) U Seguinte(T ) = {*,+,), $} onde PRIMEIRO(β) contêm ε (β ε), então tudo que está em Seguinte(A) está em Seguinte(B) 42

Seguinte (Follow) Seguinte(A)=x para a regra SαAβ e primeiro(β)=x E TE E +TE ε T FT T *FT ε F (E) id 1. Colocar $ em Seguinte(S) se S é o símbolo de partida - $ é o marcador de fim de entrada 2. Se existe uma produção A αbβ e β é diferente de ε então tudo que estiver em PRIMEIRO(β), exceto ε, deve ser adicionado em Seguinte(B) 3. Se existe uma produção A αb ou A αbβ Primeiro (E) = Primeiro(T) = Primeiro(F) = {(, id} Primeiro (E ) = {+, ε} Primeiro (T) = Primeiro(F) = {(, id} Primeiro (T ) = {*, ε} Primeiro (F) = {(, id} Regra 3 Seguinte(E) = {), $} Seguinte(E ) = Seguinte(E) = {), $} Seguinte(T) = Primeiro(E ) = {+} U Seguinte(E) U Seguinte(E ) = {+,), $} Seguinte(T ) = Seguinte(T)= {+,), $} Seguinte(F) = primeiro(t') = {*} U Seguinte(T) U Seguinte(T ) = {*,+,), $} onde PRIMEIRO(β) contêm ε (β ε), então tudo que está em Seguinte(A) está em Seguinte(B) 43

Seguinte (Follow) Seguinte(A)=x para a regra SαAβ e primeiro(β)=x E TE E +TE ε T FT T *FT ε F (E) id 1. Colocar $ em Seguinte(S) se S é o símbolo de partida - $ é o marcador de fim de entrada 2. Se existe uma produção A αbβ e β é diferente de ε então tudo que estiver em PRIMEIRO(β), exceto ε, deve ser adicionado em Seguinte(B) 3. Se existe uma produção A αb ou A αbβ Primeiro (E) = Primeiro(T) = Primeiro(F) = {(, id} Primeiro (E ) = {+, ε} Primeiro (T) = Primeiro(F) = {(, id} Primeiro (T ) = {*, ε} Primeiro (F) = {(, id} Regras 2 e 3 Seguinte(E) = {), $} Seguinte(E ) = Seguinte(E) = {), $} Seguinte(T) = Primeiro(E ) = {+} U Seguinte(E) U Seguinte(E ) = {+,), $} Seguinte(T ) = Seguinte(T)= {+,), $} Seguinte(F) = primeiro(t') = {*} U Seguinte(T) U Seguinte(T ) = {*,+,), $} onde PRIMEIRO(β) contêm ε (β ε), então tudo que está em Seguinte(A) está em Seguinte(B) 44

a) S A B A aas BD B bb fac ε C cc BD D gd C ε Exercícios Encontre os conjuntos Primeiro(First) para as gramáticas abaixo b) S ABd A aa ε B bb ca AC C cb ε c) S A BC A aas D B bb fac ε C cc D gd C ε d) S aa bb A aas BD B bb fac ε C cc Dd D gd C ε Quando tem uma regra do tipo A BCD, o ε só entra no Primeiro(A) se ele puder ser gerado por B, C e D também. 45

a) S A B A aas BD B bb fac ε C cc BD D gd C ε Exercícios Encontre os conjuntos Primeiro(First) para as gramáticas abaixo a) Primeiro(S)= {Primeiro(A) U Primeiro(B)} Primeiro(A)= Primeiro(B)= Primeiro(C)= Primeiro(D)= Quando tem uma regra do tipo A BCD, o ε só entra no Primeiro(A) se ele puder ser gerado por B, C e D também. 46

a) S A B A aas BD B bb fac ε C cc BD D gd C ε Exercícios Encontre os conjuntos Primeiro(First) para as gramáticas abaixo a) Primeiro(S)= {Primeiro(A) U Primeiro(B)} Primeiro(A)= {a U Primeiro(B) U ε U Primeiro(D)} Primeiro(B)= Primeiro(C)= Primeiro(D)= Primeiro(B) gera ε, então Primeiro(D) entra em Primeiro(A) Quando tem uma regra do tipo A BCD, o ε só entra no Primeiro(A) se ele puder ser gerado por B, C e D também. 47

a) S A B A aas BD B bb fac ε C cc BD D gd C ε Exercícios Encontre os conjuntos Primeiro(First) para as gramáticas abaixo a) Primeiro(S)= {Primeiro(A) U Primeiro(B)} Primeiro(A)= {a U Primeiro(B) U ε U Primeiro(D)} Primeiro(B)= {b,f, ε} Primeiro(C)= Primeiro(D)= Primeiro(B) gera ε, então Primeiro(D) entra em Primeiro(A) Quando tem uma regra do tipo A BCD, o ε só entra no Primeiro(A) se ele puder ser gerado por B, C e D também. 48

a) S A B A aas BD B bb fac ε C cc BD D gd C ε Exercícios Encontre os conjuntos Primeiro(First) para as gramáticas abaixo a) Primeiro(S)= {Primeiro(A) U Primeiro(B)} Primeiro(A)= {a U Primeiro(B) U ε U Primeiro(D)} Primeiro(B)= {b,f, ε} Primeiro(C)= {c U Primeiro(B) U ε} Primeiro(D)= Primeiro(B) gera ε, então Primeiro(D) entra em Primeiro(C) Primeiro(B) gera ε, então Primeiro(D) entra em Primeiro(A) Quando tem uma regra do tipo A BCD, o ε só entra no Primeiro(A) se ele puder ser gerado por B, C e D também. 49

a) S A B A aas BD B bb fac ε C cc BD D gd C ε Exercícios Encontre os conjuntos Primeiro(First) para as gramáticas abaixo a) Primeiro(S)= {Primeiro(A) U Primeiro(B)} Primeiro(A)= {a U Primeiro(B) U ε U Primeiro(D)} Primeiro(B)= {b,f, ε} Primeiro(C)= {c U Primeiro(B) U ε} Primeiro(D)= {g U Primeiro(C) U ε} Primeiro(B) gera ε, então Primeiro(D) entra em Primeiro(C) Primeiro(B) gera ε, então Primeiro(D) entra em Primeiro(A) Quando tem uma regra do tipo A BCD, o ε só entra no Primeiro(A) se ele puder ser gerado por B, C e D também. 50

Exercícios Encontre os conjuntos Primeiro(First) para as gramáticas abaixo a) S A B A aas BD B bb fac ε C cc BD D gd C ε a) Primeiro(S)= {Primeiro(A) U Primeiro(B)} = {a, b, f, g, c, ε} Primeiro(A)= {a U Primeiro(B) U ε U Primeiro(D)} = {a, b, f, g, c, ε} Primeiro(B)= {b,f, ε} Primeiro(C)= {c U Primeiro(B) U ε} = {c, b, f, g, ε} Primeiro(D)= {g U Primeiro(C) U ε} = {g,c,b,f, ε} Quando tem uma regra do tipo A BCD, o ε só entra no Primeiro(A) se ele puder ser gerado por B, C e D também. 51

Exercícios Encontre os conjuntos Primeiro(First) para as gramáticas abaixo b) S ABd A aa ε B bb ca AC C cb ε Primeiro(S)= {} Primeiro(A)= {} Primeiro(B)= {} Primeiro(C)= {} Quando tem uma regra do tipo A BCD, o ε só entra no Primeiro(A) se ele puder ser gerado por B, C e D também. 52

Exercícios Encontre os conjuntos Primeiro(First) para as gramáticas abaixo b) S ABd A aa ε B bb ca AC C cb ε Primeiro(S)= {} Primeiro(A)= {} Primeiro(B)= {} Primeiro(C)= {c, ε} Quando tem uma regra do tipo A BCD, o ε só entra no Primeiro(A) se ele puder ser gerado por B, C e D também. 53

Exercícios Encontre os conjuntos Primeiro(First) para as gramáticas abaixo b) S ABd A aa ε B bb ca AC C cb ε Primeiro(S)= {} Primeiro(A)= {} Primeiro(B)= {b, c, U Primeiro(A)} Primeiro(C)= {c, ε} Quando tem uma regra do tipo A BCD, o ε só entra no Primeiro(A) se ele puder ser gerado por B, C e D também. 54

Exercícios Encontre os conjuntos Primeiro(First) para as gramáticas abaixo b) S ABd A aa ε B bb ca AC C cb ε Primeiro(S)= {} Primeiro(A)= {a, ε} Primeiro(B)= {b, c, U Primeiro(A)} Primeiro(C)= {c, ε} Quando tem uma regra do tipo A BCD, o ε só entra no Primeiro(A) se ele puder ser gerado por B, C e D também. 55

Exercícios Encontre os conjuntos Primeiro(First) para as gramáticas abaixo b) S ABd A aa ε B bb ca AC C cb ε Primeiro(S)= {} Primeiro(A)= {a, ε} Primeiro(B)= {b, c, U Primeiro(A)} = {b, c, a, ε} Primeiro(C)= {c, ε} Quando tem uma regra do tipo A BCD, o ε só entra no Primeiro(A) se ele puder ser gerado por B, C e D também. 56

Exercícios Encontre os conjuntos Primeiro(First) para as gramáticas abaixo b) S ABd A aa ε B bb ca AC C cb ε Primeiro(S)= {Primeiro(A) U Primeiro(B) U d} Primeiro(A)= {a, ε} Primeiro(B)= {b, c, U Primeiro(A)} = {b, c, a, ε} Primeiro(C)= {c, ε} Quando tem uma regra do tipo A BCD, o ε só entra no Primeiro(A) se ele puder ser gerado por B, C e D também. Primeiro(A) gera ε, então Primeiro(B) entra em Primeiro(S) e Primeiro(B) gera ε, então d também entra em Primeiro(S) 57

Exercícios Encontre os conjuntos Primeiro(First) para as gramáticas abaixo b) S ABd A aa ε B bb ca AC C cb ε Primeiro(S)= {a, b, c, d, ε} Primeiro(A)= {a, ε} Primeiro(B)= {b, c, a, ε } Primeiro(C)= {c, ε} Quando tem uma regra do tipo A BCD, o ε só entra no Primeiro(A) se ele puder ser gerado por B, C e D também. 58

Exercícios Encontre os conjuntos Primeiro(First) para as gramáticas abaixo c) S A BC A aas D B bb fac ε C cc D gd C ε Primeiro(S)= {} Primeiro(A)= {} Primeiro(B)= {} Primeiro(C)= {} Primeiro(D)= {} Quando tem uma regra do tipo A BCD, o ε só entra no Primeiro(A) se ele puder ser gerado por B, C e D também. 59

Exercícios Encontre os conjuntos Primeiro(First) para as gramáticas abaixo c) S A BC A aas D B bb fac ε C cc D gd C ε Primeiro(S)= {a, g, c, b, f, ε} Primeiro(A)= {a, g, c, ε} Primeiro(B)= {b, f, ε} Primeiro(C)= {c} Primeiro(D)= {g, c, ε} Quando tem uma regra do tipo A BCD, o ε só entra no Primeiro(A) se ele puder ser gerado por B, C e D também. 60

Exercícios Encontre os conjuntos Primeiro(First) para as gramáticas abaixo d) S aa bb A aas BD B bb fac ε C cc Dd D gd C ε Primeiro(S)= {} Primeiro(A)= {} Primeiro(B)= {} Primeiro(C)= {} Primeiro(D)= {} Quando tem uma regra do tipo A BCD, o ε só entra no Primeiro(A) se ele puder ser gerado por B, C e D também. 61

Exercícios Encontre os conjuntos Primeiro(First) para as gramáticas abaixo d) S aa bb A aas BD B bb fac ε C cc Dd D gd C ε Primeiro(S)= {a,b} Primeiro(A)= {a, b, f, g, c, d, ε} Primeiro(B)= {b, f, ε} Primeiro(C)= {g, c, d, ε} Primeiro(D)= {c, g, d, ε } Quando tem uma regra do tipo A BCD, o ε só entra no Primeiro(A) se ele puder ser gerado por B, C e D também. 62

Exercícios Encontre os conjuntos Seguinte(Follow) para as gramáticas abaixo a) S A B A aas BD B bb fac ε C cc BD D gd C ε b) S ABd A aa ε B bb ca AC C cb ε c) S A BC A aas D B bb fac ε C cc D gd C ε d) S aa bb A aas BD B bb fac ε C cc Dd D gd C ε 63

Exercícios Encontre os conjuntos Seguinte(Follow) para as gramáticas abaixo a) S A B A aas BD B bb fac ε C cc BD D gd C ε Seguinte(S)= Seguinte(A) = {a, b, f, g, c, $} Seguinte(A)= Primeiro(S) U Primeiro(C) = {a, b, f, g, c, $} Seguinte(B)= Primeiro(D) U Seguinte(S) = {g, c, b, f, a, $} Seguinte(C)= Seguinte(B) U Seguinte(D) = {g, c, b, f, a, $} Seguinte (D)= Seguinte(C) U Seguinte(A) = {a, b, f, g, c, $} a) Primeiro(S)= {Primeiro(A) U Primeiro(B)} = {a, b, f, g, c, ε} Primeiro(A)= {a U Primeiro(B) U ε U Primeiro(D)} = {a, b, f, g, c, ε} Primeiro(B)= {b,f, ε} Primeiro(C)= {c U Primeiro(B) U ε} = {c, b, f, g, ε} Primeiro(D)= {g U Primeiro(C) U ε} = {g,c,b,f, ε} Se A é um não-terminal, Seguinte(A) é o conjunto de terminais que podem figurar imediatamente à direita de A em alguma forma sentencial Seguinte(A)=x para a regra SαAβ e primeiro(β)=x Para determinar o Seguinte 1. Colocar $ em Seguinte(S) se S é o símbolo de partida 2. Se existe uma produção A αbβ e β ε então tudo que estiver em PRIMEIRO(β), exceto ε, deve ser adicionado em Seguinte(B) 3. Se existe uma produção A αb ou A αbβ onde PRIMEIRO(β) contêm ε (β ε), então tudo que está em Seguinte(A) está em Seguinte(B) 64

Exercícios Encontre os conjuntos Seguinte(Follow) para as gramáticas abaixo b) S ABd A aa ε B bb ca AC C cb ε Seguinte(S)= {$} Seguinte(A)= Primeiro(B) U Seguinte(B) U Primeiro(C) = {b, c, a, d, $} Seguinte(B)= Primeiro(d) U Seguinte(C) = {d} Seguinte(C)= Seguinte(B) = {d} Primeiro(S)= {a, b, c, d} Primeiro(A)= {a, ε} Primeiro(B)= {b, c, a, ε } Primeiro(C)= {c, ε} Se A é um não-terminal, Seguinte(A) é o conjunto de terminais que podem figurar imediatamente à direita de A em alguma forma sentencial Seguinte(A)=x para a regra SαAβ e primeiro(β)=x Para determinar o Seguinte 1. Colocar $ em Seguinte(S) se S é o símbolo de partida 2. Se existe uma produção A αbβ e β ε então tudo que estiver em PRIMEIRO(β), exceto ε, deve ser adicionado em Seguinte(B) 3. Se existe uma produção A αb ou A αbβ onde PRIMEIRO(β) contêm ε (β ε), então tudo que está em Seguinte(A) está em Seguinte(B) 65

Exercícios Encontre os conjuntos Seguinte(Follow) para as gramáticas abaixo c) S A BC A aas D B bb fac ε C cc D gd C ε Seguinte(S)= Seguinte(A) = {a, g, c, b, f, $} Seguinte(A)= Primeiro(S) U Primeiro(C) = {a, g, c, b, f, $} Seguinte(B)= Primeiro(C)={c} Seguinte(C)= Seguinte(B) U Seguinte(D) U Seguinte(S) = {a, g, c, b, f, $} Seguinte (D)= Seguinte(A) = {a, g, c, b, f, $} Primeiro(S)= {a, g, c, b, f, ε} Primeiro(A)= {a, g, c, ε} Primeiro(B)= {b, f, ε} Primeiro(C)= {c} Primeiro(D)= {g, c, ε} Se A é um não-terminal, Seguinte(A) é o conjunto de terminais que podem figurar imediatamente à direita de A em alguma forma sentencial Seguinte(A)=x para a regra SαAβ e primeiro(β)=x Para determinar o Seguinte 1. Colocar $ em Seguinte(S) se S é o símbolo de partida 2. Se existe uma produção A αbβ e β ε então tudo que estiver em PRIMEIRO(β), exceto ε, deve ser adicionado em Seguinte(B) 3. Se existe uma produção A αb ou A αbβ onde PRIMEIRO(β) contêm ε (β ε), então tudo que está em Seguinte(A) está em Seguinte(B) 66

Exercícios Encontre os conjuntos Seguinte(Follow) para as gramáticas abaixo d) S aa bb A aas BD B bb fac ε C cc Dd D gd C ε Seguinte(S)= Seguinte(A) = {a, b, g, c, d, $} Seguinte(A)= Primeiro(S) U Primeiro(C) = {a, b, g, c, d, $} Seguinte(B)= Primeiro(D) U Seguinte(S) = {a, b, g, c, d, $} Seguinte(C)= Seguinte(B) U Seguinte(D) = {a, b, g, c, d, $} Seguinte (D)= {d} U Seguinte(A) = {a, b, g, c, d, $} Primeiro(S)= {a,b} Primeiro(A)= {a, b, f, g, c, d, ε} Primeiro(B)= {b, f, ε} Primeiro(C)= {g, c, d, ε} Primeiro(D)= {g, c, d, ε } Se A é um não-terminal, Seguinte(A) é o conjunto de terminais que podem figurar imediatamente à direita de A em alguma forma sentencial Seguinte(A)=x para a regra SαAβ e primeiro(β)=x Para determinar o Seguinte 1. Colocar $ em Seguinte(S) se S é o símbolo de partida 2. Se existe uma produção A αbβ e β ε então tudo que estiver em PRIMEIRO(β), exceto ε, deve ser adicionado em Seguinte(B) 3. Se existe uma produção A αb ou A αbβ onde PRIMEIRO(β) contêm ε (β ε), então tudo que está em Seguinte(A) está em Seguinte(B) 67

Exercícios 1. Encontre os conjuntos First e Follow para as gramáticas abaixo S(L) a S0S1 01 SS+S SS (S) S* a L L, S S Exemplo String: Exemplo String: Exemplo String: 000111 (a+a)*a ((a,a),(a(a)) 2. Encontre os conjuntos First e Follow para a gramática LALG. Enviar até o dia 04/10 68