Conceitos de Linguagens de Programação

Documentos relacionados
Conceitos de Linguagens de Programação

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

Conceitos de Linguagens de Programação

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

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

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

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 / 30. Instituto de C

Universidade Federal de Alfenas

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

Linguagens de Programação Aula 5

Revisão. Fases da dacompilação

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

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

Sintaxe e Semântica. George Darmiton da Cunha Cavalcanti.

FERRAMENTA DE AUXÍLIO AO PROCESSO DE DESENVOLVIMENTO DE SOFTWARE INTEGRANDO TECNOLOGIAS OTIMIZADORAS

FOLHA DE PROVA. Descreva e ilustre, com um exemplo, o algoritmo de minimização de um autômato.

Introdução à Programação

CP Compiladores I Prof. Msc. Carlos de Salles

Tokens, Padroes e Lexemas

Compiladores - Análise Ascendente

Compiladores - Análise Ascendente

Análise Sintática Introdução

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

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

Linguagens Formais e Autômatos

FACULDADE LEÃO SAMPAIO

Análise Sintática Bottom-up

CP Compiladores I Prof. Msc.. Carlos de Salles

Análise Sintática. Fabiano Baldo

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

DESENVOLVIMENTO DO COMPILADOR PARA A LINGUAGEM SIMPLE

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

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

Compiladores. Análise Sintática

Compiladores. Introdução

Compiladores - Gramáticas

Compiladores. Análise Léxica

Compiladores - Gramáticas

Compiladores. Motivação. Tradutores. Motivação. Tipos de Tradutores. Tipos de Tradutores

Linguagens de Programação Aula 4

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

Compiladores - Análise LL(1)

Compiladores - Análise LL(1)

Paradigmas de Linguagens de Programação. Descrevendo a Sintaxe e a Semântica

Tradução Dirigida Pela Sintaxe

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

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

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

Compiladores - Especificando Sintaxe

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

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

Compiladores. Conceitos Básicos

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

Universidade Estadual da Paraíba - UEPB Curso de Licenciatura em Computação

Como construir um compilador utilizando ferramentas Java

Universidade Federal do ABC Rua Santa Adélia, Bairro Bangu - Santo André - SP - Brasil CEP Telefone/Fax:

Compiladores. Análise Semântica

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

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

Python e sua sintaxe LNCC UFRJ

Compiladores. Análise Sintática

Tratamento dos Erros de Sintaxe. Adriano Maranhão

MAB Análise Sintática. Wednesday, April 4, 12

Linguagens de Programação Aula 3

Análise semântica. Função, interação com o compilador Tabela de símbolos Análise semântica. Prof. Thiago A. S. Pardo

Compiladores 02 Analise léxica

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

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

Análise semântica. Função, interação com o compilador Tabela de símbolos Análise semântica. Prof. Thiago A. S. Pardo

Como construir um compilador utilizando ferramentas Java

Compiladores I Prof. Ricardo Santos (cap 1)

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

Pró-Reitoria Acadêmica Diretoria Acadêmica Assessoria Pedagógica da Diretoria Acadêmica

Trabalho de Linguagens Formais e Compilação

Notação EBNF BNF estendida Notação usada com o YACC (gerador de parsers Bottom-up)

Compiladores Aula 1. Celso Olivete Júnior.

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

Notação EBNF BNF estendida Notação usada com o YACC (gerador de parsers Bottom-up)

Análise Sintática LL(1)

Introdução Análise Sintática Descendente Análise Sintática Ascendente. Aula Prática. Fernando Antônio Asevedo Nóbrega

Protótipo tipo de uma Linguagem de Programação de Script para elaboração de conteúdo dinâmico na WWW

INE5317 Linguagens Formais e Compiladores. AULA 10: Anális e S intática

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

V.2 Especificação Sintática de Linguagens de Programação

COMPILAÇÃO. Ricardo José Cabeça de Souza

Interfaces de Vanguarda do Compilador

Análise Sintática - Final

I LINGUAGENS E PROCESSADORES: INTRODUÇÃO 1

Automata e Linguagens Formais

Linguagens de Domínio Específico

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

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

Universidade Federal de Goiás Bacharelado em Ciências da Computacão Compiladores

Analisadores Descendentes Tabulares; Cjs First Follow

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

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

Análise Sintática Descendente

Transcrição:

Conceitos de Linguagens de Programação Aula 06 Análise Sintática (Implementação) Edirlei Soares de Lima <edirlei@iprj.uerj.br>

Análise Sintática A maioria dos compiladores separam a tarefa da análise sintática em duas partes distintas: Análise Léxica; Análise Sintática; O analisador léxico trata as construções de pequena escala da linguagem (nomes, literais numérico, símbolos...); O analisador sintático trata as construções de larga escala da linguagem (instruções, expressões, unidades do programa...);

Processo de Compilação Programa-fonte Analisador Léxico unidades léxicas Analisador Sintático parse trees Tabela de Símbolos (opcional) Otimização Gerador de Código Intermediário e Analisador Semântico código intermediário Programa Objeto linguagem de máquina Gerador de Código

Análise Sintática Os analisadores sintáticos constroem árvores de análise (parse trees) para os programas dados. Em alguns casos, a parse tree é construída implicitamente (apenas o resultado de percorrer a árvore é gerado); Objetivos da Análise Sintática: Verificar o programa de entrada para determinar se ele está sintaticamente correto; Produzir árvores de análise (parse trees).

Análise Sintática Os analisadores sintáticos são classificados de acordo com a direção na qual eles constroem a árvore de análise: Cima-Baixo (top-down): a árvore é construída da raiz para as folhas; Baixo-cima (bottom-up): a árvore é construída das folhas para a raiz. Todos os algoritmos de análise comumente utilizados operam sob a obrigação de que eles jamais olharam à frente mais do que um símbolo no programa de entrada.

Analisadores Cima-Baixo Realizam uma derivação mais à esquerda (leftmost derivations). Dada uma forma sentencial, que é parte de uma derivação mais à esquerda, a tarefa do analisador é encontrar a próxima forma sentencial nessa derivação. Um analisador descendente recursivo é uma versão codificada de um analisador sintático baseado diretamente na descrição BNF da linguagem. Alternativa para a recursão: tabela de análise para implementar as regras da BNF.

Analisadores Baixo-Cima Realizam uma derivação mais à direita (rightmost derivations). Dada uma forma sentencial à direita α, o analisador deve determinar qual sub-cadeia de α é o lado direito de alguma regra na gramatica que deve ser reduzida para produzir a forma sentencial dada na derivação mais à direita.

Análise Descendente Recursiva Um analisador descendente recursivo consiste de uma coleção de funções (muitas das quais são recursivas). A implementação destas funções descreve naturalmente as regras gramaticais da BNF. O analisador descendente recursivo tem uma função para cada não-terminal da gramatica.

Análise Descendente Recursiva Gramatica: <expr> <termo> + <termo> <termo> - <termo> <termo> <termo> <fator> * <fator> <fator> / <fator> <fator> <fator> ident numero ( <expr> ) (Implementação)

Análise Descendente Recursiva (Implementação)... /* <expr> -> <termo> + <termo> <termo> - <termo> */ int expr(file *code_file, int next_token, NextChar *next_char) { printf("enter <expr>\n"); next_token = termo(code_file, next_token, next_char); while (next_token == ADD_OP next_token == SUB_OP) { next_token = lex(code_file, next_char); next_token = termo(code_file, next_token, next_char); } printf("exit <expr>\n"); return next_token; }... http://www.inf.puc-rio.br/~elima/clp/projeto_compilador_v2.zip

Entrada: Análise Descendente Recursiva (Implementação) (soma + 47) / total

Saída: Análise Descendente Recursiva (Implementação) Token: 25, Lexema: ( Enter <expr> Enter <termo> Enter <fator> Token: 11, Lexema: soma Enter <expr> Enter <termo> Enter <fator> Token: 21, Lexema: + Exit <fator> Exit <termo> Token: 10, Lexema: 47 Enter <termo> Enter <fator>...... Token: 26, Lexema: ) Exit <fator> Exit <termo> Exit <expr> Token: 24, Lexema: / Exit <fator> Token: 11, Lexema: total Enter <fator> Token: -1, Lexema: EOF Exit <fator> Exit <termo> Exit <expr>

Saída: Token: 25, Lexema: ( Enter <expr>: 25 Enter <termo>: 25 Enter <fator>: 25 Token: 11, Lexema: soma Enter <expr>: 11 Enter <termo>: 11 Enter <fator>: 11 Token: 21, Lexema: + Exit <fator>: 11 Exit <termo>: 21 Token: 10, Lexema: 47 Enter <termo>: 10 Enter <fator>: 10 Token: 26, Lexema: ) Exit <fator>: 10 Exit <termo>: 26 Exit <expr>: 11 Token: 24, Lexema: / Exit <fator>: 25 Token: 11, Lexema: total Enter <fator>: 11 Token: -1, Lexema: EOF Exit <fator>: 11 Exit <termo>: -1 Exit <expr>: 25 Análise Descendente Recursiva (Implementação) <fator> ( <expr> <termo> <fator> soma <expr> <termo> + <termo> / <fator> ) <fator> 47 total

Leitura Complementar Sebesta, Robert W. Conceitos de Linguagens de Programação. Editora Bookman, 2011. Capítulo 4: Análise Léxica e Sintática