Análise Sintática LL(1)

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

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

Compiladores Aula 6. Celso Olivete Júnior.

Compiladores - Análise LL(1)

Análise Sintática Descendente

Análise Sintática Bottom-up

Compiladores - Análise Ascendente

Compiladores - Análise Ascendente

Analisadores Sintáticos LR

Análise Sintática II: Analisadores Descendentes Preditivos

Gramáticas Livres de Contexto Parte 1

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

Compiladores - Análise SLR

Como construir um compilador utilizando ferramentas Java

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. Análise sintática ascendente. Parte-se dos símbolos terminais em direção ao símbolo inicial da gramática. Derivação mais à direita

Folha 4.1 Análise sintática descendente

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

Compiladores - Gramáticas

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

Análise Sintática Introdução

LINGUAGEM LIVRE DE CONTEXTO GRAMÁTICA LIVRE DE CONTEXTO

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

Uma gramática é ambígua se existe alguma cadeia para qual ela tem mais de uma árvore sintática

Reduce: reduz o que está imediatamente à esquerda do foco usando uma produção

Compiladores Aula 4. Celso Olivete Júnior.

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

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

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

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

Análise Sintática. Fabiano Baldo

Linguagens Formais e Autômatos P. Blauth Menezes

Compiladores. Análise Sintática

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

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

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

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

Compiladores - Gramáticas

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

Linguagens Livres de Contexto

Gramáticas Livres de Contexto

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

SCC Capítulo 2 Linguagens Livres de Contexto e Autômatos de Pilha (versão 2)

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

Introdução. Compiladores Análise Semântica. Introdução. Introdução. Introdução. Introdução 11/3/2008

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

Linguagens Livres de Contexto

Tratamento dos Erros de Sintaxe. Adriano Maranhão

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

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

Compiladores I. Caracterizar um método de análise bottom-up. Compreender os mecanismos básicos envolvidos no processo de análise LR.

Tokens, Padroes e Lexemas

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

Conceitos de Linguagens de Programação

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

Linguagens Formais e Autômatos P. Blauth Menezes

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

Construção de Compiladores

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

Análise sintática. Prof. Thiago A. S. Pardo Tratamento de erros sintáticos

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

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

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

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

Análise sintática. Análise sintática ascendente. Bottom-up, ascendente ou redutiva. Analisadores de precedência de operadores Analisadores LR

Folha 4.2 Análise sintática ascendente

Linguagens Livres do Contexto. Adaptado de H. Brandão

UNIVERSIDADE DE SÃO PAULO ICMC SCC 202 Algoritmos e Estrutura de Dados I - 2º Semestre 2010 Profa. Sandra Maria Aluísio;

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

INE5416 Paradigmas de Programação. Ricardo Azambuja Silveira INE CTC UFSC E Mail: URL:

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

Transcrição:

FACULDADE ANGLO AMERICANO FOZ DO IGUAÇU Curso de Ciência da Computação 7º Periodo Disciplina: Compiladores Prof. Erinaldo Sanches Nascimento Análise Sintática LL(1) Análise Sintática Descendente

Introdução Os analisadores sintáticos preditivos podem ser construídos para uma classe de gramática chamada LL(1). L (Left-to-right) significa que a cadeia de entrada é escandida da esquerda para a direita. L (Leftmost) representa uma derivação mais à esquerda 1 pelo uso de um símbolo à frente na entrada utilizando um cada passo para tomar as decisões quanto à ação de análise. http://erinaldosn.wordpress.com 2

Definição Uma gramática G é LL(1) se e somente se, sempre que A forem duas produções distintas de G, as seguintes condições forem verdadeiras: 1. Para um terminal a, tanto quanto não derivam cadeias començando com a. 2. No máximo um dos dois, ou, pode derivar a cadeia vazia. 3. Se *, então não deriva nenhuma cadeia começando com um terminal em FOLLOW(A). De modo semelhante se *, então não deriva qualquer cadeia começando com um terminal FOLLOW(A). http://erinaldosn.wordpress.com 3

Método Básico Utiliza uma pilha explícita Facilita e agiliza a visualização as ações do analisador sintático LL(1) http://erinaldosn.wordpress.com 4

Exemplo Gramática que gera cadeias de parênteses balanceados: S ( S ) S Pilha de análise sintática Entrada Ação 1 $S ( ) $ S ( S ) S 2 $ S) S ( ( ) $ casamento 3 $ S ) S ) $ S 4 $ S ) ) $ casamento 5 $ S $ S 6 $ $ aceita http://erinaldosn.wordpress.com 5

Lista de Ações S ( S ) S [S ( S ) S] ( ) S [S ] ( ) [S ] http://erinaldosn.wordpress.com 6

Tabela Quatro colunas: 1) Enumera os passos. 2) Mostra o conteúdo da pilha de análise sintática. O final da pilha à esquerda. O topo da pilha à direita. 3) Mostra a entrada da esquerda para a direita. 4) Apresenta uma descrição resumida da ação. http://erinaldosn.wordpress.com 7

Analisador Descendente Coloca o símbolo de início na pilha. Substitui um não-terminal no topo da pilha por uma de suas escolhas na regra gramatical a) Substituir um não-terminal A no topo da pilha por uma cadeia com base na escolha da regra gramatica A ; b) Casar uma marca no topo da pilha com a marca de entrada seguinte Aceita uma cadeia de entrada se, após uma série de ações, a pilha e a entrada ficarem vazias. http://erinaldosn.wordpress.com 8

Árvore de Análise Sintática Construir nós à medida que cada terminal ou não-terminal é colocado na pilha. O nó-raiz é construído no começo da análise sintática. Os nós de cada um dos símbolos de substituição são construidos à medida que os símbolo são colocados na pilha e são concatenados como filhos do nó de S que eles substituem na pilha. Modifique a pilha de forma a conter apontadores para os nós construidos, em vez de conter só os terminais e não-terminais. http://erinaldosn.wordpress.com 9

Tabela de Reconhecimento Sintático Preditivo M[A, a], um arranjo bidimensional A é um não-terminal a é um terminal ou símbolo $ (marcador de fim de entrada) Entrada: gramática G. Saída: tabela de análise M. Método: para cada produção A gramática faça o seguinte: da http://erinaldosn.wordpress.com 10

Algoritmo 1. Para cada terminal a em FIRST(A), inclua A em M[A, a]. 2. Se pertence a FIRST( ), inclua A em M[A,b] para cada terminal b em FOLLOW(A). Se pertence a FIRST( ) e $ pertence a FOLLOW(A), acrescente também A em M[A,$]. Se, depois de realizar esses passos, não houver produção alguma em M[A, a], então defina M[A, a] como error. http://erinaldosn.wordpress.com 11

Complemento do Algoritmo Uma gramática é LL(1) se a tabela de análise sintática LL(1) associada tiver no máximo uma produção em cada célula. Uma gramática LL(1) não pode ser ambigua http://erinaldosn.wordpress.com 12

Exercício 1 Considere a gramática simplificada de declarações if: declaracao if-decl outra if-decl if (exp) declaracao else-parte else-parte else declaracao exp 0 1 Dada a cadeia if (0) if (1) outra else outra Representa a tabela que mostre as ações do algortimo de análise sintática LL(1). http://erinaldosn.wordpress.com 13

Exercício 2 Considere a gramática de expressões reduzidas: E n E E + n E Efetue a computação do valor da expressão 3+4+5 mostrando as ações do analisador sintático na tabela. http://erinaldosn.wordpress.com 14

Exercício 3 Utilize uma pilha S para executar a verificaçao de grupos de parênteses em expressões aritméticas com uma varredura simples da esquerda para direita. Cada vez que se encontra uma símbolo de abertura insere-se o símbolo na pilha e cada vez que se encontra uma símbolo de fechamento retira-se o símbolo do topo da pilha S (assumindo-se que a pilha não está vazia). Se a pilha estiver vazia após ter sido processada toda a sequência, então os símbolos em X casam. http://erinaldosn.wordpress.com 15

http://erinaldosn.wordpress.com 16