Compiladores Aula 6. Celso Olivete Júnior.

Documentos relacionados
Análise Sintática II: Analisadores Descendentes Preditivos

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

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

Análise Sintática LL(1)

Compiladores. Parser LL 10/13/2008

Compiladores. Exemplo. Caraterísticas de Gramáticas. A αβ 1 αβ 2. A αx X β 1 β 2. Lembrando... Gramáticas Livres de Contexto

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

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

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

Compiladores Aula 4. Celso Olivete Júnior.

Compiladores. Análise Sintática

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

Compilação: Erros. Detecção de Erros: * Analisadores Top-Down - Preditivo Tabular (LL) - Feito a mão. * Analisadores Botton-Up: - Shift-Reduce (SLR)

INE5318 Construção de Compiladores. AULA 4: Análise Sintática

V Teoria de Parsing. Termos Básicos: Parser Analisador Sintático Parsing Analise Sintática Parse Representação da analise efetuada

V Análise Sintática. V.1.1 Gramáticas Livres de Contexto Definições de GLC

Compiladores Aula 12. Celso Olivete Júnior.

Compiladores - Análise LL(1)

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

Compiladores - Análise LL(1)

Análise Sintática Descendente

Compiladores - Análise Ascendente

Como construir um compilador utilizando ferramentas Java

Compiladores Aula 13. Celso Olivete Júnior.

Análise Sintática Introdução

Linguagens Livres de Contexto

Compiladores Aula 5. Celso Olivete Júnior.

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

Vantagens de uma Gramática. Sintaxe de uma Linguagem. Analisador Sintático - Parser. Papel do Analisador Sintático. Tiposde Parsers para Gramáticas

Compiladores. Prof. Bruno Moreno Aula 11 20/05/2011

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

Análise Sintática I. Eduardo Ferreira dos Santos. Abril, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 42

Compiladores. Bruno Lopes. Bruno Lopes Compiladores 1 / 12. Instituto de C

Análise Sintática II. Eduardo Ferreira dos Santos. Outubro, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 34

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

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

Análise sintática. Questão. E se a análise sintática pudesse ser modelada por autômatos?

Um Compilador Simples. Definição de uma Linguagem. Estrutura de Vanguarda. Gramática Livre de Contexto. Exemplo 1

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

BNF (Backus-Naur Form) Gramática Livres de Contexto / Estruturas Recursivas

Linguagens Livres de Contexto

Análise Sintática Bottom-up

Função, interação com o compilador Especificação e reconhecimento de tokens Implementação Tratamento de erros. Prof. Thiago A. S.

Conceitos de Linguagens de Programação

Revisão de GLC e Analisadores Descendentes

Revisão. Fases da dacompilação

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

Compiladores. Bruno Lopes. Bruno Lopes Compiladores 1 / 30. Instituto de C

Gramática. Gramática. Gramática

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

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

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

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 ascendente. Bottom-up, ascendente ou redutiva. Analisadores de precedência de operadores Analisadores LR

Compiladores - Gramáticas

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

Linguagens de Programação Aula 4

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

Sintaxe do Pascal Simplificado Estendido de 12 novas construções em Notação EBNF (BNF estendida)

Compiladores. Transformações de GLCs. Plano da aula. Análise Top-Down. Análise Top-Down Exemplo. Gramáticas Livres de Contexto.

COMPILADORES. Revisão Linguagens formais Parte 02. Prof. Geovane Griesang

MAB Análise Sintática. Wednesday, August 31, 11

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

CAP. VI ANÁLISE SEMÂNTICA

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

COMPILADORES. Revisão Linguagens formais Parte 01. Geovane Griesang

Análise Sintática. Análise Sintática. Tipos de Analisadores Gramáticais: PARSERS

Analisadores Sintáticos LR

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

QUESTÃO 1 (0,6 ponto) Classifique os processadores de linguagens com relação aos tipos das linguagens-fonte e objeto.

Compiladores - Análise Preditiva

ACH2043 INTRODUÇÃO À TEORIA DA COMPUTAÇÃO

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

Autômatos com Pilha: Reconhecedores de LLCs

Capítulo 1: Alfabetos, cadeias, linguagens

Gramáticas Livres de Contexto Parte 1

Conceitos de Linguagens de Programação

Compiladores - Análise Preditiva

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

Compiladores: P ASCAL jr

Análise Sintática. Eduardo Ferreira dos Santos. Outubro, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 18

Tokens, Padroes e Lexemas

Compiladores. Capítulo 3: Análise Sintática Introdução

Compiladores Aula 2. Celso Olivete Júnior.

Compiladores - Análise Léxica

Análise Sintática - Final

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

Unidade VI. Técnicas de Teste de Software Teste Estrutural. Profa. Dra. Sandra Fabbri

Prof. Adriano Maranhão COMPILADORES

Compiladores - Análise SLR

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

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

Compiladores - Análise Recursiva

Alfabeto, Cadeias, Operações e Linguagens

Compiladores Ficha de exercícios

Lembrando análise semântica. Compiladores. Implementação de esquemas de tradução L-atribuídos. Exemplo de implementação top-down (1)

Análise Sintática. Compiladores Cristina C. Vieira. Compiladores 2012/2013

Compiladores. J.L.Rangel Compiladores 4-1

Apresentação. !! Familiarização com os métodos de construção de compiladores de linguagens e com as técnicas de compilação mais habituais.

Transcrição:

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

Na aula passada Analisadores Sintáticos Descendentes ASD com retrocesso ASD preditivo recursivo não-recursivo 2

ASD Preditivo Recursivo Projeto Parte 2 Construa os grafos sintáticos (em número reduzido) e os procedimentos recursivos para declaração de variáveis em LALG <E> ::= <T><E > <E >::= +<E> ε <T> ::= a b E + a b 3

ASD Preditivo Recursivo Grafos sintáticos declaração de variáveis LALG - EBNF 5. <parte de declarações de variáveis> ::= var<declaração de variáveis> {;<declaração de variáveis>}; 6. <declaração de variáveis>::= <lista de identificadores> :<tipo> 7.<lista de identificadores> ::= <identificador> {,<identificador>} 26.<dígito> ::= 0 1 2... 9 27.<identificador> ::= <letra> {<letra> <dígito>} 28.<letra> ::= _ a...z A B... Z 4

ASD Preditivo Recursivo Grafos sintáticos declaração de variáveis Regra 5 Representa a operação de fechamento 5. <parte de declarações de variáveis> ::= var<declaração de variáveis> {;<declaração de variáveis>}; var declaração de variáveis ; 5

ASD Preditivo Recursivo Grafos sintáticos declaração de variáveis Regra 6 6. <declaração de variáveis>::= <lista de identificadores> :<tipo> lista de identificadores : tipo 6

ASD Preditivo Recursivo Grafos sintáticos declaração de variáveis Regra 7 7.<lista de identificadores> ::= <identificador> {,<identificador>} identificador, 7

ASD Preditivo Recursivo Grafos sintáticos declaração de variáveis Regra 26 26.<dígito> ::= 0 1 2... 9 0-9 8

ASD Preditivo Recursivo Grafos sintáticos declaração de variáveis Regra 27 27.<identificador> ::= <letra> {<letra> <dígito>} letra letra dígito 9

ASD Preditivo Recursivo Grafos sintáticos declaração de variáveis Regra 28 28.<letra> ::= _ a...z A B... Z _ a-z A-Z 10

ASD Preditivo Recursivo Grafos sintáticos declaração de variáveis Unindo as regras 6 e 7 6. <declaração de variáveis>::= <lista de identificadores> :<tipo> 7.<lista de identificadores> ::= <identificador> {,<identificador>} identificador : tipo, 11

ASD Preditivo Recursivo Grafos sintáticos declaração de variáveis Unindo as regras 5, 6 e 7 5. <parte de declarações de variáveis> ::= var<declaração de variáveis> {;<declaração de variáveis>}; 6. <declaração de variáveis>::= <lista de identificadores> :<tipo> 7.<lista de identificadores> ::= <identificador> {,<identificador>} var identificador : tipo ;, 12

ASD Preditivo Recursivo Grafos sintáticos declaração de variáveis Regra <tipo> <tipo>::= integer real string integer real string 13

Analisador sintático descendente <dc_v> ::= var algoritmo <variaveis> : <tipo_var> do procedimento ; <dc_v> ε ERRO procedimento dc_v(s) begin end; se (simb=var) então obter_símbolo() senão imprimir( Erro: var esperado ); ERRO(Primeiro(variaveis)+S); //consome até encontrar ID variaveis({:}+s); se (simb=simb_dp) então obter_símbolo() senão imprimir( Erro: : esperado ); Conjunto sincronizador {, ; real integer} ERRO(Primeiro(tipo_var)+S); //consome até encontrar integer ou real tipo_var({;}+s); se (simb=simb_pv) então obter_símbolo() senão dc_v(s); imprimir( Erro: ; esperado ); ERRO(Primeiro(dc_v)+S); //consome até encontrar ; <DC_V> ::= var <VARIAVEIS> : <TIPO_VAR> ; <DC_V> ε <TIPO_VAR> ::= integer real <VARIAVEIS> ::= <ID> <MAIS_VAR> <MAIS_VAR> ::=, <VARIAVEIS> ε 14

Na aula de hoje Analisadores Sintáticos Descendentes ASD com retrocesso ASD preditivo recursivo não-recursivo 15

Análise Sintática Preditiva Não-Recursiva Não necessitam de retrocesso O símbolo da cadeia de entrada, em análise, é suficiente para determinar qual regra de produção deve ser escolhida São construídos utilizando gramáticas LL(1) Cadeia de entrada é analisada da esquerda para a direita (Left-toright) A derivação das produções é feita mais a esquerda (Leftmost) A cada passo é observado um (1) símbolo a frente para determinar que ação deve ser tomada 16

Análise Sintática Preditiva Não-Recursiva Condições: Eliminar recursividade à esquerda Fatorar a gramática Construir os conjuntos First e Follow Permitem escolher qual produção deve ser aplicada baseada no próximo símbolo de entrada 17

Reconhecedor sintático preditivo não-recursivo estrutura Umbuffer de entrada $ indica o fim da cadeia de entrada Umfluxo de saída Umapilha cujo fundo é marcado por $ Inicializada com o símbolo de início da gramática Uma tabela sintática preditiva Pilha de símbolos gramaticais finalizada por $. a + b $ Entrada Ponteiro ip Buffer de entrada finalizado por $. Onde a é o símbolo apontado por ip. X Y Z $ Analisador Sintático Preditivo Não-Recursivo Saída Array bidimensional que organiza os não-terminais e suas produções. Tabela Sintática M Uma derivação da entrada ou indicação de erro. 18

Reconhecedor sintático preditivo funcionamento do parser Seja X o símbolo no topo da pilha Seja a o símbolo de entrada (que é terminal) a analisar 1. Se X = $ e a = $ finaliza e reconhece a entrada. 2. Se X = a e!= $ desempilha X e avança de um símbolo na entrada. 3. Se X é não-terminal: Consulta a tabela M(X, a) Se for vazia: ERRO Se contém X ::= UVW, então substitui na pilha X por UVW (U no topo). Pilha de símbolos gramaticais finalizada por $. a + b $ Entrada Ponteiro ip Buffer de entrada finalizado por $. Onde a é o símbolo apontado por ip. X Y Z $ Analisador Sintático Preditivo Não-Recursivo Saída Array bidimensional que organiza os não-terminais e suas produções. Tabela Sintática M Uma derivação da entrada ou indicação de erro. 19

Exemplo 1: Construção da tabela preditiva M(X,t) Tabela bi-dimensional Dimensão 1: não-terminal X Dimensão 2: símbolo de entrada(terminal) t A entrada (X,t) contém a regra da produção a aplicar obtida a partir dos conjuntos Primeiro e Seguinte Não Terminal Símbolo de Entrada a b c S ERRO ERRO ScAa A A B AB A cb B B ε B bcb ERRO S caa A cb B B bcb ε First(A) = {b, c, ε} First(B) = {b, ε} First(S) = {c} Follow(A) = {a} Follow(B) = First(B) -ε= {a} Follow(S) = {$} 20

Seja X o símbolo no topo da pilha Seja a o símbolo de entrada (que é terminal) a analisar 1.Se X = $ e a = $ finaliza e reconhece a entrada. 2.Se X = a e!= $ desempilha X e avança de um símbolo na entrada. Entrada: cbca Usando a tabela de análise Se contém X ::= UVW, sintática então substitui na pilha X por UVW (U no topo). 3.Se X é não-terminal: Consulta a tabela M(X, a) Se for vazia: ERRO Pilha Entrada Ação S$ cbca$ Topo da pilha S Simb. entrada a S caa A cb B B bcb ε Não Terminal Símbolo de Entrada a b c S ERRO ERRO ScAa A A B AB A cb B B ε B bcb ERRO 21

Seja X o símbolo no topo da pilha Seja a o símbolo de entrada (que é terminal) a analisar 1.Se X = $ e a = $ finaliza e reconhece a entrada. 2.Se X = a!= $ desempilha X e avança de um símbolo na entrada. Entrada: cbca Usando a tabela de análise Se contém X ::= UVW, sintática então substitui na pilha X por UVW (U no topo). 3.Se X é não-terminal: Consulta a tabela M(X, a) Se for vazia: ERRO Pilha Entrada Ação S$ cbca$ ScAa Ação 3 S caa A cb B B bcb ε Não Terminal Símbolo de Entrada a b c S ERRO ERRO ScAa A A B AB A cb B B ε B bcb ERRO 22

Seja X o símbolo no topo da pilha Seja a o símbolo de entrada (que é terminal) a analisar 1.Se X = $ e a = $ finaliza e reconhece a entrada. 2.Se X = a!= $ desempilha X e avança de um símbolo na entrada. Entrada: cbca Usando a tabela de análise Se contém X ::= UVW, sintática então substitui na pilha X por UVW (U no topo). 3.Se X é não-terminal: Consulta a tabela M(X, a) Se for vazia: ERRO Pilha Entrada Ação S$ cbca$ ScAa caa$ cbca$ Casar c S caa A cb B B bcb ε Não Terminal Símbolo de Entrada a b c S ERRO ERRO ScAa A A B AB A cb B B ε B bcb ERRO 23

Seja X o símbolo no topo da pilha Seja a o símbolo de entrada (que é terminal) a analisar 1.Se X = $ e a = $ finaliza e reconhece a entrada. 2.Se X = a!= $ desempilha X e avança de um símbolo na entrada. Entrada: cbca Usando a tabela de análise Se contém X ::= UVW, sintática então substitui na pilha X por UVW (U no topo). 3.Se X é não-terminal: Consulta a tabela M(X, a) Se for vazia: ERRO Pilha Entrada Ação S$ cbca$ ScAa caa$ cbca$ Casar c Aa$ bca$ AB S caa A cb B B bcb ε Não Terminal Símbolo de Entrada a b c S ERRO ERRO ScAa A A B AB A cb B B ε B bcb ERRO 24

Seja X o símbolo no topo da pilha Seja a o símbolo de entrada (que é terminal) a analisar 1.Se X = $ e a = $ finaliza e reconhece a entrada. 2.Se X = a!= $ desempilha X e avança de um símbolo na entrada. Entrada: cbca Usando a tabela de análise Se contém X ::= UVW, sintática então substitui na pilha X por UVW (U no topo). 3.Se X é não-terminal: Consulta a tabela M(X, a) Se for vazia: ERRO Pilha Entrada Ação S$ cbca$ ScAa caa$ cbca$ Casar c Aa$ bca$ AB Ba$ bca$ BbcB S caa A cb B B bcb ε Não Terminal Símbolo de Entrada a b c S ERRO ERRO ScAa A A B AB A cb B B ε B bcb ERRO 25

Seja X o símbolo no topo da pilha Seja a o símbolo de entrada (que é terminal) a analisar 1.Se X = $ e a = $ finaliza e reconhece a entrada. 2.Se X = a!= $ desempilha X e avança de um símbolo na entrada. Entrada: cbca Usando a tabela de análise Se contém X ::= UVW, sintática então substitui na pilha X por UVW (U no topo). 3.Se X é não-terminal: Consulta a tabela M(X, a) Se for vazia: ERRO Pilha Entrada Ação S$ cbca$ ScAa caa$ cbca$ Casar c Aa$ bca$ AB Ba$ bca$ BbcB bcba$ bca$ Casar b S caa A cb B B bcb ε Não Terminal Símbolo de Entrada a b c S ERRO ERRO ScAa A A B AB A cb B B ε B bcb ERRO 26

Seja X o símbolo no topo da pilha Seja a o símbolo de entrada (que é terminal) a analisar 1.Se X = $ e a = $ finaliza e reconhece a entrada. 2.Se X = a!= $ desempilha X e avança de um símbolo na entrada. Entrada: cbca Usando a tabela de análise Se contém X ::= UVW, sintática então substitui na pilha X por UVW (U no topo). 3.Se X é não-terminal: Consulta a tabela M(X, a) Se for vazia: ERRO Pilha Entrada Ação S$ cbca$ ScAa caa$ cbca$ Casar c Aa$ bca$ AB Ba$ bca$ BbcB bcba$ bca$ Casar b cba$ ca$ Casar c S caa A cb B B bcb ε Não Terminal Símbolo de Entrada a b c S ERRO ERRO ScAa A A B AB A cb B B ε B bcb ERRO 27

Seja X o símbolo no topo da pilha Seja a o símbolo de entrada (que é terminal) a analisar 1.Se X = $ e a = $ finaliza e reconhece a entrada. 2.Se X = a!= $ desempilha X e avança de um símbolo na entrada. Entrada: cbca Usando a tabela de análise Se contém X ::= UVW, sintática então substitui na pilha X por UVW (U no topo). 3.Se X é não-terminal: Consulta a tabela M(X, a) Se for vazia: ERRO Pilha Entrada Ação S$ cbca$ ScAa caa$ cbca$ Casar c Aa$ bca$ AB Ba$ bca$ BbcB bcba$ bca$ Casar b cba$ ca$ Casar c Ba$ a$ Bε S caa A cb B B bcb ε Não Terminal Símbolo de Entrada a b c S ERRO ERRO ScAa A A B AB A cb B B ε B bcb ERRO 28

Seja X o símbolo no topo da pilha Seja a o símbolo de entrada (que é terminal) a analisar 1.Se X = $ e a = $ finaliza e reconhece a entrada. 2.Se X = a!= $ desempilha X e avança de um símbolo na entrada. Entrada: cbca Usando a tabela de análise Se contém X ::= UVW, sintática então substitui na pilha X por UVW (U no topo). 3.Se X é não-terminal: Consulta a tabela M(X, a) Se for vazia: ERRO Pilha Entrada Ação S$ cbca$ ScAa caa$ cbca$ Casar c Aa$ bca$ AB Ba$ bca$ BbcB bcba$ bca$ Casar b cba$ ca$ Casar c Ba$ a$ Bε a$ a$ Casar a S caa A cb B B bcb ε Não Terminal Símbolo de Entrada a b c S ERRO ERRO ScAa A A B AB A cb B B ε B bcb ERRO 29

Seja X o símbolo no topo da pilha Seja a o símbolo de entrada (que é terminal) a analisar 1.Se X = $ e a = $ finaliza e reconhece a entrada. 2.Se X = a!= $ desempilha X e avança de um símbolo na entrada. Entrada: cbca Usando a tabela de análise Se contém X ::= UVW, sintática então substitui na pilha X por UVW (U no topo). 3.Se X é não-terminal: Consulta a tabela M(X, a) Se for vazia: ERRO Pilha Entrada Ação S$ cbca$ ScAa caa$ cbca$ Casar c Aa$ bca$ AB Ba$ bca$ BbcB bcba$ bca$ Casar b cba$ ca$ Casar c Ba$ a$ Bε a$ a$ Casar a $ $ aceitou S caa A cb B B bcb ε Não Terminal Símbolo de Entrada a b c S ERRO ERRO ScAa A A B AB A cb B B ε B bcb ERRO 30

Seja X o símbolo no topo da pilha Seja a o símbolo de entrada (que é terminal) a analisar 1.Se X = $ e a = $ finaliza e reconhece a entrada. 2.Se X = a!= $ desempilha X e avança de um símbolo na entrada. Entrada: 01012 Usando a tabela de análise Se contém X ::= UVW, sintática então substitui na pilha X por UVW (U no topo). 3.Se X é não-terminal: Consulta a tabela M(X, a) Se for vazia: ERRO Pilha Entrada Ação S$ 01012$ <S> ::= 0<A> 1<B> <A> ::= 1<B> 2 <B> ::= 0<A> 2 Não Terminal Símbolo de Entrada 0 1 2 S <S> ::= 0<A> <S> ::= 1<B> ERRO A ERRO <A> ::= 1<B> <A> ::= 2 B <B> ::= 0<A> ERRO <B> ::= 2 31

Seja X o símbolo no topo da pilha Seja a o símbolo de entrada (que é terminal) a analisar 1.Se X = $ e a = $ finaliza e reconhece a entrada. 2.Se X = a!= $ desempilha X e avança de um símbolo na entrada. Entrada: 01012 Usando a tabela de análise Se contém X ::= UVW, sintática então substitui na pilha X por UVW (U no topo). 3.Se X é não-terminal: Consulta a tabela M(X, a) Se for vazia: ERRO Pilha Entrada Ação S$ 01012$ <S> ::= 0<A> 0<A>$ 01012$ Casar 0 <A>$ 1012$ <A> ::= 1<B> 1<B> $ 1012$ Casar 1 <B> $ 012$ <B> ::= 0<A> 0<A>$ 012$ Casar 0 <A>$ 12$ <A> ::= 1<B> 1<B> $ 12$ Casar 1 <B> $ 2$ <B> ::= 2 2$ 2$ Casar 2 $ $ ACEITA <S> ::= 0<A> 1<B> <A> ::= 1<B> 2 <B> ::= 0<A> 2 Não Terminal Símbolo de Entrada 0 1 2 S <S> ::= 0<A> <S> ::= 1<B> ERRO A ERRO <A> ::= 1<B> <A> ::= 2 B <B> ::= 0<A> ERRO <B> ::= 2 32

Tabelas Sintáticas Preditivas O funcionamento dos analisadores sintáticos preditivos não-recursivos é dependente de tabelas sintáticas preditivas Como construí-las? 33

Tabelas Sintáticas Preditivas NÃO- TERMINAL Símbolo de Entrada id + * ( ) $ E E TE E TE E E +TE E ε E ε T T TF T TF T T ε T *FT T ε T ε F F id T (E) 34

Tabelas Sintáticas Preditivas A construção de tais tabelas é realizada através de algumas funções associadas a gramática a ser analisada: PRIMEIRO e SEGUINTE. Ideia: permitem escolher qual produção aplicar com base no próximo símbolo lido. Durante a recuperação de erro conjunto de tokens produzidos por SEGUINTE podem ser usados como tokens de sincronismo. 35

Construção de Tabelas Sintáticas Preditivas A ideia central é para uma dada produção A: 1. se o símbolo corrente da entrada é a, a expansão da gramática seja dirigida para A α dado que PRIMEIRO(α)={a} 2. Se α=ε ou αε a expansão se dá através de SEGUINTE(α). 36

Construção de Tabelas Sintáticas Preditivas Para cada produção A α da gramática repita os passos abaixo: 1. Paracada terminalaem PRIMEIRO(α), adicione A α a M[A,a] 2. Se ε estiver em PRIMEIRO(α), adicione A α a M[A, b] para cada terminal b que estiver em SEGUINTE(A). 3. Cada entrada indefinida de M corresponde a uma situação de erro. 37

Tabela Sintática Preditiva PRIM(E)=PRIM(T)=PRIM(F)={(, id} PRIM(E )={+, ε} PRIM(T )={*, ε} SEG(E)= SEG(E )= {$, )} SEG(T)=SEG(T )= {$, +, )} SEG(F)={$, *, +, )} E TE E +TE ε T FT T *FT ε F (E) id NÃO- TERMINAL Símbolo de Entrada id + * ( ) $ E E TE E TE E E +TE E ε E ε T T F Para cada produção A α da gramática repita os passos abaixo: 1. Para cada terminalaemprimeiro(α), adicione A α a M[A,a] 2. Se ε estiver em PRIMEIRO(α), adicione A α a M[A, b] para cada terminal b que estiver em SEGUINTE(A). 38

Tabela Sintática Preditiva PRIM(E)=PRIM(T)=PRIM(F)={(, id} PRIM(E )={+, ε} PRIM(T )={*, ε} SEG(E)= SEG(E )= {$, )} SEG(T)=SEG(T )= {$, +, )} SEG(F)={$, *, +, )} E TE E +TE ε T FT T *FT ε F (E) id NÃO- TERMINAL Símbolo de Entrada id + * ( ) $ E E TE E TE Para cada produção A α da gramática repita os passos abaixo: 1. Para cada terminalaemprimeiro(α), adicione A α a M[A,a] 2. Se ε estiver em PRIMEIRO(α), adicione A α a M[A, b] para cada E E +TE E ε E ε terminal b que estiver em SEGUINTE(A). T T FT T FT T F 39

Tabela Sintática Preditiva PRIM(E)=PRIM(T)=PRIM(F)={(, id} PRIM(E )={+, ε} PRIM(T )={*, ε} SEG(E)= SEG(E )= {$, )} SEG(T)=SEG(T )= {$, +, )} SEG(F)={$, *, +, )} E TE E +TE ε T FT T *FT ε F (E) id NÃO- TERMINAL Símbolo de Entrada id + * ( ) $ E E TE E TE Para cada produção A α da gramática repita os passos abaixo: 1. Para cada terminalaemprimeiro(α), adicione A α a M[A,a] 2. Se ε estiver em PRIMEIRO(α), adicione A α a M[A, b] para cada E E +TE E ε E ε terminal b que estiver em SEGUINTE(A). T T FT T FT T T ε T *FT T ε T ε F F id F (E) 40

Funcionamento do analisador preditivo Casar Pilha Entrada (w) Ação E TE E +TE ε T FT T *FT ε F (E) id E$ id+ id$ Reconheça a entrada id+id NÃO- TERMINAL Símbolo de Entrada id + * ( ) $ E E TE erro erro E TE erro erro E erro E +TE erro erro E ε E ε T T FT erro erro T FT erro erro T erro T ε T *FT erro T ε T ε F F id erro erro F (E) erro erro 41

Funcionamento do analisador preditivo Casar Pilha Entrada (w) Ação E$ id+ id$ E TE E TE E +TE ε T FT T *FT ε F (E) id TE $ id+ id$ NÃO- TERMINAL Símbolo de Entrada id + * ( ) $ E E TE erro erro E TE erro erro E erro E +TE erro erro E ε E ε T T FT erro erro T FT erro erro T erro T ε T *FT erro T ε T ε F F id erro erro F (E) erro erro 42

Funcionamento do analisador preditivo Casar Pilha Entrada (w) Ação E$ id+ id$ E TE E TE E +TE ε T FT T *FT ε F (E) id TE $ FT E $ id+ id$ T FT id + id$ NÃO- TERMINAL Símbolo de Entrada id + * ( ) $ E E TE erro erro E TE erro erro E erro E +TE erro erro E ε E ε T T FT erro erro T FT erro erro T erro T ε T *FT erro T ε T ε F F id erro erro F (E) erro erro 43

Funcionamento do analisador preditivo Casar Pilha Entrada (w) Ação E$ id+ id$ E TE E TE E +TE ε T FT T *FT ε F (E) id TE $ FT E $ idt E $ id+ id$ T FT id+ id$ F id id + id$ NÃO- TERMINAL Símbolo de Entrada id + * ( ) $ E E TE erro erro E TE erro erro E erro E +TE erro erro E ε E ε T T FT erro erro T FT erro erro T erro T ε T *FT erro T ε T ε F F id erro erro F (E) erro erro 44

Funcionamento do analisador preditivo Casar Pilha Entrada (w) Ação E$ id+ id$ E TE E TE E +TE ε T FT T *FT ε F (E) id TE $ FT E $ idt E $ id+ id$ T FT id+ id$ F id id+ id$ Casarid id T E $ + id$ NÃO- TERMINAL Símbolo de Entrada id + * ( ) $ E E TE erro erro E TE erro erro E erro E +TE erro erro E ε E ε T T FT erro erro T FT erro erro T erro T ε T *FT erro T ε T ε F F id erro erro F (E) erro erro 45

NÃO- TERMINAL Símbolo de Entrada id + * ( ) $ Funcionamento do analisador preditivo E E TE erro erro E TE erro erro Casamento Pilha Entrada (w) Ação E erro E +TE erro erro E ε E ε E$ id+ id$ T T FT erro erro T FT erro erro TE $ id+ id$ ImprimaE TE T erro T ε T *FT erro T ε T ε FT E $ id+ id$ ImprimaT FT F F id erro idt E $ erro F (E) id+ id$ ImprimaF erro erro id E TE E +TE ε T FT T *FT ε F (E) id id T E $ + id$ T ε id E $ + id$ 46

NÃO- Símbolo de Entrada Funcionamento TERMINAL do analisador preditivo id + * ( ) $ Casamento Pilha Entrada (w) Ação E E TE erro erro E TE erro erro E erro E +TE E$ erro id+ erro id$ E ε E ε E TE E +TE ε T FT T *FT ε F (E) id T T FT TE $ erro erro id+ T id$ FT ImprimaE TE erro erro T erro FT E $ id+ id$ ImprimaT FT T ε T *FT erro T ε T ε idt E $ id+ id$ ImprimaF id F F id erro erro F (E) erro erro id T E $ + id$ T ε id E $ + id$ E +TE id +TE $ + id$ 47

NÃO- Símbolo de Entrada Funcionamento TERMINAL do analisador preditivo id + * ( ) $ Casamento Pilha Entrada (w) Ação E E TE erro erro E TE erro erro E erro E +TE E$ erro id+ erro id$ E ε E ε E TE E +TE ε T FT T *FT ε F (E) id T T FT TE $ erro erro id+ T id$ FT ImprimaE TE erro erro T erro FT E $ id+ id$ ImprimaT FT T ε T *FT erro T ε T ε idt E $ id+ id$ ImprimaF id F F id erro erro F (E) erro erro id T E $ + id$ T ε id E $ + id$ E +TE id +TE $ + id$ Casar + id + TE $ id$ 48

NÃO- Símbolo de Entrada Funcionamento TERMINAL do analisador preditivo id + * ( ) $ Casamento Pilha Entrada (w) Ação E E TE erro erro E TE erro erro E erro E +TE E$ erro id+ erro id$ E ε E ε E TE E +TE ε T FT T *FT ε F (E) id T T FT TE $ erro erro id+ T id$ FT ImprimaE TE erro erro T erro FT E $ id+ id$ ImprimaT FT T ε T *FT erro T ε T ε idt E $ id+ id$ ImprimaF id F F id erro erro F (E) erro erro id T E $ + id$ T ε id E $ + id$ E +TE id +TE $ + id$ Casar + id + TE $ id$ T FT id + FT E $ id$ 49

NÃO- Símbolo de Entrada Funcionamento TERMINAL do analisador preditivo id + * ( ) $ Casamento Pilha Entrada (w) Ação E E TE erro erro E TE erro erro E erro E +TE E$ erro id+ erro id$ E ε E ε E TE E +TE ε T FT T *FT ε F (E) id T T FT TE $ erro erro id+ T id$ FT ImprimaE TE erro erro T erro FT E $ id+ id$ ImprimaT FT T ε T *FT erro T ε T ε idt E $ id+ id$ ImprimaF id F F id erro erro F (E) erro erro id T E $ + id$ T ε id E $ + id$ E +TE id +TE $ + id$ Casar + id + TE $ id$ T FT id + FT E $ id$ F id id + idt E $ id$ 50

NÃO- Símbolo de Entrada Funcionamento TERMINAL do analisador preditivo id + * ( ) $ Casamento Pilha Entrada (w) Ação E E TE erro erro E TE erro erro E erro E +TE E$ erro id+ erro id$ E ε E ε E TE E +TE ε T FT T *FT ε F (E) id T T FT TE $ erro erro id+ T id$ FT ImprimaE TE erro erro T erro FT E $ id+ id$ ImprimaT FT T ε T *FT erro T ε T ε idt E $ id+ id$ ImprimaF id F F id erro erro F (E) erro erro id T E $ + id$ T ε id E $ + id$ E +TE id +TE $ + id$ Casar + id + TE $ id$ T FT id + FT E $ id$ F id id + idt E $ id$ Casar id id + id T E $ $ 51

NÃO- Símbolo de Entrada Funcionamento TERMINAL do analisador preditivo id + * ( ) $ Casamento Pilha Entrada (w) Ação E E TE erro erro E TE erro erro E erro E +TE E$ erro id+ erro id$ E ε E ε E TE E +TE ε T FT T *FT ε F (E) id T T FT TE $ erro erro id+ T id$ FT ImprimaE TE erro erro T erro FT E $ id+ id$ ImprimaT FT T ε T *FT erro T ε T ε idt E $ id+ id$ ImprimaF id F F id erro erro F (E) erro erro id T E $ + id$ T ε id E $ + id$ E +TE id +TE $ + id$ Casar + id + TE $ id$ T FT id + FT E $ id$ F id id + idt E $ id$ Casar id id + id T E $ $ T ε id + id E $ $ 52

NÃO- Símbolo de Entrada Funcionamento TERMINAL do analisador preditivo id + * ( ) $ Casamento Pilha Entrada (w) Ação E E TE erro erro E TE erro erro E erro E +TE E$ erro id+ erro id$ E ε E ε E TE E +TE ε T FT T *FT ε F (E) id T T FT TE $ erro erro id+ T id$ FT ImprimaE TE erro erro T erro FT E $ id+ id$ ImprimaT FT T ε T *FT erro T ε T ε idt E $ id+ id$ ImprimaF id F F id erro erro F (E) erro erro id T E $ + id$ T ε id E $ + id$ E +TE id +TE $ + id$ Casar + id + TE $ id$ T FT id + FT E $ id$ F id id + idt E $ id$ Casar id id + id T E $ $ T ε id + id E $ $ E ε id + id $ $ 53

NÃO- Símbolo de Entrada Funcionamento TERMINAL do analisador preditivo id + * ( ) $ Casamento Pilha Entrada (w) Ação E E TE erro erro E TE erro erro E erro E +TE E$ erro id+ erro id$ E ε E ε E TE E +TE ε T FT T *FT ε F (E) id T T FT TE $ erro erro id+ T id$ FT ImprimaE TE erro erro T erro FT E $ id+ id$ ImprimaT FT T ε T *FT erro T ε T ε idt E $ id+ id$ ImprimaF id F F id erro erro F (E) erro erro id T E $ + id$ T ε id E $ + id$ E +TE id +TE $ + id$ Casar + id + TE $ id$ T FT id + FT E $ id$ F id id + idt E $ id$ Casar id id + id T E $ $ T ε id + id E $ $ E ε id + id $ $ Reconheceu! 54

Funcionamento do analisador preditivo Casamento Pilha Entrada (w) Ação E$ id+ id$ E TE E TE E +TE ε T FT T *FT ε F (E) id TE $ FT E $ idt E $ id+ id$ T FT id+ id$ F id id+ id$ Casarid id T E $ + id$ T ε id E $ + id$ E +TE id +TE $ + id$ Casar + id + TE $ id$ T FT id + FT E $ id$ F id id + idt E $ id$ Casar id id + id T E $ $ T ε id + id E $ $ E ε id + id $ $ Reconheceu! 55

Código para o analisador sintático preditivo LL(1) baseado em tabela E TE E +TE T FT T *FT F (E) id 1. while ((topo da pilha for <> $) and (próximo símbolo for <> $)) do 2. if (topo da pilha for o terminal a) and (próximo símbolo de entrada for = a) 3. then (casar) 4. retira da pilha; 5. avança entrada; 6. else if (topo da pilha for um não-terminal A) 7. and (próximo símbolo de entrada for terminal a) 8. and (célula da tabela M[A,a] conter a produção AX 1 X 2...X n ) 9. then(gera) 10. retira da pilha; 11. for i:= n downto1 do 12. coloca Xi na pilha; 13. else erro; 14. if (topo da pilha for = $) and (marca SEGUINTE na entrada for = $) 15. then aceita; 16. else erro; 56

Jflap: construção da gramática É possível gerar uma gramática, neste exemplo LL, a partir do JFlap E TE E +TE ε T FT T *FT ε F (E) id E neste caso foi substituído por D E por C T por U 57

Jflap: geração da tabela de análise a partir da gramática LL 58

Jflap: geração da tabela de análise a partir da gramática LL Clique em parse para simular 59

Jflap: geração da tabela de análise a partir da gramática LL Visualização ASD (descendente) ASA (ascendente) Tabela 60

Jflap: geração da tabela de análise a partir da gramática LL Entrada de dados Entrada restante... Comportamento da pilha Símbolo inicial da gramática 61

Jflap: geração da tabela de análise a partir da gramática LL Entrada de dados Entrada restante... Comportamento da pilha Simulação intermediária 62

Jflap: geração da tabela de análise a partir da gramática LL Entrada de dados Entrada vazia $ Pilha vazia Entrada reconhecida 63

Jflap: geração da tabela de análise a partir da gramática LL ASA 64

Jflap: geração da tabela de análise a partir da gramática LL Tabela de derivação 65

Exercício (1) Construa a tabela sintática para a gramática abaixo e reconheça a sentença 0aa <S> ::= 0<A> <B> <A> ::= a<a> ε <B> ::= b 66

Exercício (1) Construa a tabela sintática para a gramática abaixo e reconheça a sentença 0aa <S> ::= 0<A> <B> <A> ::= a<a> ε <B> ::= b 67

Exercício (2) Construa a tabela sintática para a gramática abaixo e reconheça a sentença 0a1 <S> ::= 0<A>1 <B> <A> ::= a<a> ε <B> ::= b 68

Exercício (2) Construa a tabela sintática para a gramática abaixo e reconheça a sentença 0a1 <S> ::= 0<A>1 <B> <A> ::= a<a> ε <B> ::= b 69

Exercício (3) Dada a gramática ambígua: S if E then S if E then S else S a E b transforme em LL(1) e : construa a tabela de análise sintática mostrem a análise da sentença If b then if b then a else a mostre o comportamento da Pilha, Entrada e Regra usada 70

Exercício (3) Dada a gramática ambígua: S if E then S if E then S else S a E b transforme em LL(1) <S> ::= if <E> then <S> <S > <S > ::= else <S> ε 71

Exercício (3) Dada a gramática ambígua: S if E then S if E then S else S a E b transformeem LL(1)e: mostrem a análise da sentença If b then if b then a else a mostre o comportamento da Pilha, Entrada e Regra usada 72