DESENVOLVIMENTO DO COMPILADOR PARA A LINGUAGEM SIMPLE

Tamanho: px
Começar a partir da página:

Download "DESENVOLVIMENTO DO COMPILADOR PARA A LINGUAGEM SIMPLE"

Transcrição

1 DESENVOLVIMENTO DO COMPILADOR PARA A LINGUAGEM SIMPLE Jeferson MENEGAZZO 1, Fernando SCHULZ 2, Munyque MITTELMANN 3, Fábio ALEXANDRINI 4. 1 Aluno 5ª fase do Curso de Ciência da Computação do Instituto Federal Catarinense - Campus Rio do Sul, [email protected]; 2 Aluno 5ª fase do Curso de Ciência da Computação do Instituto Federal Catarinense - Campus Rio do Sul, [email protected]; 3 Aluna 5ª fase do Curso de Ciência da Computação do Instituto Federal Catarinense - Campus Rio do Sul, [email protected]; 4 Professor de Ensino Superior, Técnico e Tecnológico do Instituto Federal Catarinense - Campus Rio do Sul, [email protected]. RESUMO Os compiladores são tradutores que transpõem programas escritos em linguagem de alto nível para programas equivalentes em linguagem simbólica ou linguagem de máquina. A entrada para o compilador é um arquivo de texto, que será lido caractere a caractere para compor a estrutura do programa, assim a primeira etapa de um compilador é a análise léxica, que identifica quais são as palavras e as associa ao seu tipo. A seguir, há a análise sintática, que determina a estrutura do programa. A terceira análise é chamada de semântica que computa o significado do programa traduzido. A tarefa final do compilador é gerar código executável para uma máquina-alvo. Utilizando de conceitos explanados neste artigo, foi construído um compilador em linguagem Java, sem o auxílio de geradores. Os analisadores desenvolvidos para este trabalho verificam sobre uma linguagem própria, denominada SIMPLE, a qual implementa algumas das estruturas mais básicas de uma linguagem de programação. A implementação do analisador léxico consiste em um autômato finito, que lê e analisa um código de entrada, dividindo-o em lexemas a partir da análise de delimitadores definidos, associando-os a seus respectivos tokens, ou erros léxicos. Enquanto que o analisador sintático recebe os tokens da análise anterior e usa validações por meio de chamadas de métodos, os quais utilizam de análise ascendente, expressões regulares e verificações da definição da linguagem, para validar ou não um (ou um conjunto) de lexema (s). Referente à análise semântica, foram implementadas estruturas para verificações típicas, como declaração de variáveis, associação e operações entre tipos definidos, as quais complementam as demais analises, de forma a se obter uma análise completa e bem estruturada do código fornecido. Palavras-Chave: Linguagem Simple, Compiladores, Ciência da Computação. INTRODUÇÃO Os programas de computadores, na década de 1940, foram escritos em linguagem de máquina, através de códigos numéricos representando operações de máquina a serem efetivamente executadas. Entretanto, esta forma de programação consome muito tempo, gera códigos de difícil legibilidade e escrita, dispendendo, portanto, grande custo para implementação e manutenção. A linguagem de montagem rapidamente substituiu esta forma de codificação, adotando formas simbólicas para instruções e endereçamento de memória. Os códigos simbólicos e os endereços de memória da linguagem de montagem são traduzidos para os códigos correspondentes da linguagem de máquina pelo que é denominado montador. Além da ainda presente dificuldade na escrita e leitura, outro problema, segundo Louden (2004, p. 3), é que a linguagem de montagem é extremamente dependente de uma máquina em particular para qual ela seja escrita; portanto, o código escrito para um computador precisa ser completamente reescrito para outro. A evolução seguinte na tecnologia de programação foi o desenvolvimento de compiladores, o que gerou a possibilidade de escrever as operações de um programa em 1

2 uma forma concisa, mais semelhante a uma linguagem natural, independente de uma máquina em particular e traduzível por um programa em código executável. Os estudos de Noam Chomsky sobre a estrutura da linguagem natural levaram à classificação de linguagens segundo a complexidade de suas gramáticas (as regras que especificam sua estrutura) e o poder dos algoritmos necessários para reconhecê-las. Desta forma, estes estudos tornaram a construção de compiladores mais simples e parcialmente automatizável (LOUDEN, 2004). Tendo como entrada uma sequência de caracteres (o programa-fonte), conforme Ricarte (2008, p.53), a primeira etapa que um compilador deve realizar, denominada análise léxica, é identificar quais são as palavras e associá-las individualmente ao seu tipo. A seguir, há a análise sintática, que, a partir de das marcas (tokens) fornecidas pela análise léxica, determina a estrutura do programa. A terceira análise de um programa é chamada de semântica e determina seu comportamento durante a execução de acordo com seus significados, em contraste com sua sintaxe ou estrutura. Os programas Yacc, escrito por Steve Johnson, e Lex, por Mike Lesk, são exemplos de ferramentas criadas, respectivamente, para análise sintática e léxica do sistema Unix. Estes programas surgiram da necessidade de automatizar o desenvolvimento de compiladores. O presente trabalho destina-se a implementação de um compilador para a linguagem de programação própria denominada SIMPLE. MATERIAL E MÉTODOS O presente trabalho foi desenvolvido a partir de pesquisas literárias. Um compilador para a linguagem própria de programação SIMPLE foi implementado através da linguagem Java, utilizando o ambiente integrado de desenvolvimento (IDE) Eclipse. Os analisadores foram desenvolvidos sem o auxílio de geradores de analisadores léxicos e sintáticos. A análise léxica, cujo objetivo é reconhecer quais cadeias de símbolos do programa fonte representam uma única entidade ou token, foi desenvolvida usando métodos de especificação e de reconhecimento de padrões tais quais expressões regulares e autômatos finitos. Expressões regulares representam padrões de cadeias de caracteres. Autômatos finitos são uma forma matemática de descrever tipos particulares de algoritmos que podem ser construídos a partir de expressões regulares. A segunda fase do compilador, o analisador sintático verifica se as construções usadas no programa estão gramaticalmente corretas. As gramáticas livres de contexto (GLC) formam a base para a análise sintática das linguagens de programação, pois permitem descrever a maioria de linguagens de programação utilizadas atualmente. Louden (2004) destaca que a análise sintática envolve uma escolha entre diversos métodos algorítmicos distintos, cada qual apresentando propriedades e recursos próprios. Há duas categorias gerais de algoritmos para a análise sintática: descendente e ascendente. Para desenvolvimento do compilador, optou-se pela estratégia ascendente. Os métodos de análise baseados na estratégia ascendente (bottom-up ou redutiva) realizam a análise a partir dos tokens do texto fonte (folhas da árvore de derivação) e constroem a árvore até o símbolo inicial da gramática (PRICE, TOSCANI, 2008). A análise semântica requer a computação de informações que estão além das capacidades das gramáticas livres de contexto e dos algoritmos padrão de análise sintática. 2

3 RESULTADOS E DISCUSSÃO Na linguagem SIMPLE, têm-se os comandos básicos de escrita (WRITE) e leitura (READ), estrutura de seleção (IF ELSE IF ELSE END), estrutura de repetição (WHILE END) e declaração de variáveis com tipos pré-definidos (INT LONG FLOAT DOUBLE CHAR STRING), além de suportar estruturas aninhadas. A Figura 1 exemplifica um programa nesta linguagem, cuja é baseada em Pascal e Matlab. Figura 1: Aba Principal - Inserção do código a ser analisado. A divisão do código fonte em lexemas é feita a partir da análise de delimitadores definidos, como operadores lógicos, relacionais, matemáticos, de atribuição, parênteses, aspas, espaços, etc., lidos por um autômato finito. Já a identificação ocorre por meio de validações e chamadas de métodos, os quais utilizam de expressões regulares ou verificações na definição da linguagem, para validar ou não um lexema. Para os lexemas aceitos, são associados tokens correspondentes, definidos em enumerações Java. Já para os não reconhecidos, são associados erros. O analisador ainda especifica a linha e posição do lexema, para fácil localização e correção em caso de erro léxico (Figura 2). 3

4 Figura 2: Resultado da análise léxica. Tendo o código fonte preparado pelo analisador léxico, a análise sintática recorre aos tokens para reconhecimento das sequências, seguindo as seguintes regras para realizar as verificações: 1. Para o reconhecimento de variáveis, é necessário ter um tipo definido, e identificador diferente das variáveis já definidas. 2. A variável só pode ser utilizada depois de declarada. 3. Só podem ser atribuídos à variável, dados de tipos compatíveis. 4. Expressões lógicas e aritméticas são reduzidas a partir da análise de operadores, operandos e parênteses, respeitando os tipos definidos e precedências de operadores. 5. Para cada comando IF é necessário um comando END, que define o fim do bloco de código. Entre estes, é possível haver nenhum, um ou muitos ELSE IF e /ou ELSE, além de estruturas aninhadas. 6. Para cada comando WHILE é necessário um comando END que defina o fim do bloco, também é possível ter estruturas aninhadas. 4

5 Caso alguma sequência não obedeça às regras definidas da linguagem, um erro correspondente é associado. Caso seja aceita, é associado à estrutura correspondente (Figura 3). Figura 3: Resultado da análise sintática. Na análise semântica, a informação computada está fortemente relacionada com seu significado, ou seja, a semântica do programa traduzido. A análise semântica requer a construção de uma tabela de símbolos (Figura 4) para acompanhar o significado dos nomes estabelecidos nas declarações e efetuar inferência e verificação de tipos em expressões e declarações, de forma a determinar sua correção pelas regras de tipos da linguagem (LOUDEN, 2004). 5

6 Figura 4: Tabela de Símbolos. O analisador semântico desenvolvido para a linguagem SIMPLE verifica se a variável está declarada e foi inicializada antes do uso e se é a única variável declarada com o tal identificador. O analisador também verifica se os operandos são aplicáveis ao operado, podendo os operandos serem variáveis ou literais. Há a verificação se uma expressão, variável ou literal é aplicável na atribuição ou na estrutura (como if ou while). 6

7 Figura 5: Resultado da análise semântica. A tarefa final de um compilador é gerar código executável para uma máquinaalvo, cujo deve ser uma representação fiel da semântica do código-fonte. Caso não seja encontrado nenhum erro nas análises léxica, sintática e semântica (Figura 6), o compilador gera o código-alvo e o executa (Figura 7). Caso contrário, o compilador apenas notifica quais análises encontraram erros e quais são. 7

8 Figura 6: Conclusão da análise e geração de código. Figura 7: Programa executado. 8

9 A geração de código é a fase mais complexa do compilador, pois depende não apenas das características da linguagem-fonte, mas também de informações detalhadas da arquitetura-alvo, da estrutura do ambiente de execução e do sistema operacional da máquina-alvo. 9

10 CONSIDERAÇÕES FINAIS Conhecer a organização e as operações básicas de um compilador, apesar de não ser imprescindível para todos os profissionais atuantes na computação, é deveras importante pela sua utilização em quase todas as formas de computação. Entender e construir um compilador é um processo complexo, que pode parecer distante da realidade atual dos desenvolvedores de software. Entretanto, o desenvolvimento de interpretadores de comandos e programas de interface é uma tarefa recorrente em aplicações computacionais e, embora menores que compiladores, utilizam as mesmas técnicas. Este trabalho destinou-se ao estudo e implementação um compilador. Para isso, foi necessário o estudo de técnicas teóricas, com enfoque às teorias das linguagens, gramáticas e autômatos. Mais informações sobre a linguagem SIMPLE e seu compilador estão disponíveis em simpleprog.wordpress.com. REFERÊNCIAS BROOKSHEAR, J. G. Ciência da Computação: uma visão abrangente. 11. ed. Porto Alegre: Bookman, BROWN, D. F; WATT, D. A. Programming Language Processors in Java: Compilers and Interpreters. Harlow: Prentice Hall, DELAMARO, M. E. Como Construir um Compilador - Utilizando Ferramentas Java. São Paulo: Novatec, LIPSCHUTZ, S.; LIPSON, M. Matemática Discreta. Porto Alegre: Bookman, LOUDEN, K. C. Compiladores: Princípios e Práticas. São Paulo: Cengage Learning, MENEZES, P. B. Linguagens Formais e Autômatos. 6. ed. Porto Alegre: Bookmann: PRICE, A. M. A; TOSCANI, S. S. Implementação de linguagens de programação: compiladores. 3. ed. Porto Alegre: Bookman, RICARTE, I. Introdução à compilação. Rio de Janeiro: Elsevier, ROSEN, K. H. Matemática discreta e suas aplicações. 6. ed. São Paulo: McGraw- Hill, SEBESTA, R. W. Conceitos de Linguagens de Programação. 9. ed. Porto Alegre: Bookman,

Compiladores. Introdução

Compiladores. Introdução Compiladores Introdução Apresentação Turma Noite Continuada I 20/03 Continuada II 22/05 Atividades Regimental 05/06 Total 1 Ponto 1 Ponto 1 Ponto 7 Pontos 10 Pontos Aulas expositivas teórico-práticas Exercícios

Leia mais

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

Compiladores. Motivação. Tradutores. Motivação. Tipos de Tradutores. Tipos de Tradutores Motivação Prof. Sérgio Faustino Compiladores Conhecimento das estruturas e algoritmos usados na implementação de linguagens: noções importantes sobre uso de memória, eficiência, etc. Aplicabilidade freqüente

Leia mais

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

Universidade Federal de Goiás Bacharelado em Ciências da Computacão Compiladores Universidade Federal de Goiás Bacharelado em Ciências da Computacão Compiladores 2013-2 Compilador para a Linguagem Cafezinho Especificação dos trabalhos: T2 (Geração da Representação Intermediária e Análise

Leia mais

Introdução à Programação

Introdução à Programação Introdução à Programação Linguagens de Programação: sintaxe e semântica de linguagens de programação e conceitos de linguagens interpretadas e compiladas Engenharia da Computação Professor: Críston Pereira

Leia mais

Compiladores. Análise Léxica

Compiladores. Análise Léxica Compiladores Análise Léxica Regras Léxicas Especificam o conjunto de caracteres que constituem o alfabeto da linguagem, bem como a maneira que eles podem ser combinados; Exemplo Pascal: letras maiúsculas

Leia mais

Compiladores. Conceitos Básicos

Compiladores. Conceitos Básicos Compiladores Conceitos Básicos Processadores de Linguagem De forma simples, um compilador é um programa que recebe como entrada um programa em uma linguagem de programação a linguagem fonte e o traduz

Leia mais

Como construir um compilador utilizando ferramentas Java

Como construir um compilador utilizando ferramentas Java Como construir um compilador utilizando ferramentas Java p. 1/2 Como construir um compilador utilizando ferramentas Java Aula 1 - Introdução Prof. Márcio Delamaro [email protected] Como construir um

Leia mais

Universidade de Santa Cruz do Sul UNISC Departamento de informática COMPILADORES. Introdução. Geovane Griesang

Universidade de Santa Cruz do Sul UNISC Departamento de informática COMPILADORES. Introdução. Geovane Griesang Universidade de Santa Cruz do Sul UNISC Departamento de informática COMPILADORES Introdução [email protected] Processadores de linguagem Linguagens de programação são notações para se descrever

Leia mais

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.

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. Apresentação Universidade dos Açores Departamento de Matemática www.uac.pt/~hguerra/!! Aquisição de conceitos sobre a definição de linguagens de programação.!! Familiarização com os métodos de construção

Leia mais

Compiladores I Prof. Ricardo Santos (cap 1)

Compiladores I Prof. Ricardo Santos (cap 1) Compiladores I Prof. Ricardo Santos (cap 1) Compiladores Linguagens de programação são notações que permitem descrever como programas devem executar em uma máquina Mas, antes do programa executar, deve

Leia mais

Projeto de Compiladores

Projeto de Compiladores Projeto de Compiladores FIR Faculdade Integrada do Recife João Ferreira 12 e 13 de fevereiro de 2007 Questionário 1. Em quais linguagens de programação você já programou? 2. O que você sabe sobre compiladores?

Leia mais

Linguagens de Programação Aula 3

Linguagens de Programação Aula 3 Aula 3 Celso Olivete Júnior [email protected] Na aula passada... Classificação das LPs (nível, geração e paradigma) Paradigmas Imperativo, OO, funcional, lógico e concorrente 2/33 Na aula de hoje...

Leia mais

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

Análise Sintática. Eduardo Ferreira dos Santos. Outubro, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 18 Análise Sintática Eduardo Ferreira dos Santos Ciência da Computação Centro Universitário de Brasília UniCEUB Outubro, 2016 1 / 18 Sumário 1 Introdução 2 Derivações 2 / 18 1 Introdução 2 Derivações 3 /

Leia mais

Conceitos de Linguagens de Programação

Conceitos de Linguagens de Programação Conceitos de Linguagens de Programação Aula 03 Processo de Compilação Edirlei Soares de Lima Métodos de Implementação Arquitetura de Von Neumann: A linguagem de máquina de um computador

Leia mais

Autômatos e Linguagens

Autômatos e Linguagens Autômatos e Linguagens Eduardo Ferreira dos Santos Ciência da Computação Centro Universitário de Brasília UniCEUB Agosto, 2016 1 / 41 Sumário 1 Compiladores 2 Linguagens de programação 3 Ciência dos compiladores

Leia mais

Introdução à Programação Aula 03. Prof. Max Santana Rolemberg Farias Colegiado de Engenharia de Computação

Introdução à Programação Aula 03. Prof. Max Santana Rolemberg Farias Colegiado de Engenharia de Computação Aula 03 Prof. Max Santana Rolemberg Farias [email protected] Colegiado de Engenharia de Computação Linguagens de Programação A primeira linguagem de programação foi criada por Ada Lovelace. Amiga

Leia mais

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

Sintaxe e Semântica. George Darmiton da Cunha Cavalcanti. Sintaxe e Semântica George Darmiton da Cunha Cavalcanti ([email protected]) Tópicos Introdução O problema de descrever a sintaxe Métodos formais para descrever a sintaxe Gramáticas de atributos Descrevendo

Leia mais

Conversões de Linguagens: Tradução, Montagem, Compilação, Ligação e Interpretação

Conversões de Linguagens: Tradução, Montagem, Compilação, Ligação e Interpretação Conversões de Linguagens: Tradução, Montagem, Compilação, Ligação e Interpretação Para executar uma tarefa qualquer, um computador precisa receber instruções precisas sobre o que fazer. Uma seqüência adequada

Leia mais

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

INE5416 Paradigmas de Programação. Ricardo Azambuja Silveira INE CTC UFSC E Mail: URL: INE5416 Paradigmas de Programação Ricardo Azambuja Silveira INE CTC UFSC E Mail: [email protected] URL: www.inf.ufsc.br/~silveira Conceitos Léxica estudo dos símbolos que compõem uma linguagem Sintaxe

Leia mais

Compiladores. Fabio Mascarenhas

Compiladores. Fabio Mascarenhas Compiladores Fabio Mascarenhas 2017.1 http://www.dcc.ufrj.br/~fabiom/comp Introdução Compiladores x Interpretadores Offline x Online Um compilador transforma um programa executável de uma linguagem fonte

Leia mais

EA876 - Introdução a Software de Sistema

EA876 - Introdução a Software de Sistema A876 - Introdução a Software de Sistema Software de Sistema: conjunto de programas utilizados para tornar o hardware transparente para o desenvolvedor ou usuário. Preenche um gap de abstração. algoritmos

Leia mais

Ederson Luiz da Silva Ciência da Computação. Algoritmos e Programação

Ederson Luiz da Silva Ciência da Computação. Algoritmos e Programação Ederson Luiz da Silva Ciência da Computação Algoritmos e Programação Linguagem de programação Linguagem de Programação Linguagem de máquina http://www.assemblyprogressivo.net/p/curso.html Linguagem de

Leia mais

Algoritmos e Introdução à Programação. Lógica e Linguagem de Programação

Algoritmos e Introdução à Programação. Lógica e Linguagem de Programação Algoritmos e Introdução à Programação Lógica e Linguagem de Programação Prof. José Honorato Ferreira Nunes [email protected] http://softwarelivre.org/zenorato/honoratonunes Linguagem C Prof.

Leia mais

Conceitos de Linguagens de Programação

Conceitos de Linguagens de Programação Conceitos de Linguagens de Programação Aula 04 Sintaxe e Semântica Edirlei Soares de Lima Sintaxe e Semântica A descrição de uma linguagem de programação envolve dois aspectos principais:

Leia mais

TÉCNICO DE INFORMÁTICA - SISTEMAS

TÉCNICO DE INFORMÁTICA - SISTEMAS 782 - Programação em C/C++ - estrutura básica e conceitos fundamentais Linguagens de programação Linguagem de programação são conjuntos de palavras formais, utilizadas na escrita de programas, para enunciar

Leia mais

Programação de Sistemas (Sistemas de Programação) Semana 10, Aula 17

Programação de Sistemas (Sistemas de Programação) Semana 10, Aula 17 PCS3616 Programação de Sistemas (Sistemas de Programação) Semana 10, Aula 17 Linguagens e Compiladores Programação em linguagem de alto nível Escola Politécnica da Universidade de São Paulo Roteiro 1.

Leia mais

Linguagens de Programação

Linguagens de Programação Linguagens de Programação 128 13 129 Linguagens de Programação Uma linguagem de programação é um vocabulário e um conjunto de regras gramaticais usadas para escrever programas de computador. Esses programas

Leia mais

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 I. Eduardo Ferreira dos Santos. Abril, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 42 Análise Sintática I Eduardo Ferreira dos Santos Ciência da Computação Centro Universitário de Brasília UniCEUB Abril, 2017 1 / 42 Sumário 1 Introdução 2 Derivações 3 Ambiguidade 4 Análise sintática descendente

Leia mais

Conceitos de Linguagens de Programação

Conceitos de Linguagens de Programação Conceitos de Linguagens de Programação Aula 06 Análise Sintática (Implementação) Edirlei Soares de Lima Análise Sintática A maioria dos compiladores separam a tarefa da análise sintática

Leia mais

INE5421 LINGUAGENS FORMAIS E COMPILADORES

INE5421 LINGUAGENS FORMAIS E COMPILADORES INE5421 LINGUAGENS FORMAIS E COMPILADORES PLANO DE ENSINO Objetivo geral Conhecer a teoria das linguagens formais visando sua aplicação na especificação de linguagens de programação e na construção de

Leia mais

Linguagens e Compiladores

Linguagens e Compiladores Linguagens e Compiladores Aula 1: a) Critérios b) Noções de Compiladores e Interpretadores c) Usos da tecnologia de compilação d) Compiladores, filtros e pré-processadores e) Estruturação lógica de compiladores

Leia mais

Noções de compilação

Noções de compilação Noções de compilação Compilador: o que é, para que serve e estrutura geral Parentes do compilador e programas correlatos Prof. Thiago A. S. Pardo 1 Compilação: por que estudar? (parte 1) Compiladores:

Leia mais

Programação I A Linguagem C. Prof. Carlos Alberto

Programação I A Linguagem C. Prof. Carlos Alberto Programação I A Linguagem C Prof. Carlos Alberto [email protected] [email protected] 2 Origem A linguagem C foi desenvolvida em 1972, nos Laboratórios Bell, por Dennis Ritchie. Implementada

Leia mais

Questões de Paradigmas de Programação Matéria: Prova 1 4ª EDIÇÃO

Questões de Paradigmas de Programação Matéria: Prova 1 4ª EDIÇÃO Questões de Paradigmas de Programação Matéria: Prova 1 4ª EDIÇÃO QUESTÃO 1 : Enviada por: Francisco Carlos Moraes Junior Duvidas: Thaise Domínios de programação são áreas onde os computadores são usados.

Leia mais

Tokens, Padroes e Lexemas

Tokens, Padroes e Lexemas O Papel do Analisador Lexico A analise lexica e a primeira fase de um compilador e tem por objetivo fazer a leitura do programa fonte, caracter a caracter, e traduzi-lo para uma sequencia de símbolos lexicos

Leia mais

Compiladores Aula 1. Celso Olivete Júnior.

Compiladores Aula 1. Celso Olivete Júnior. Aula 1 Celso Olivete Júnior [email protected] Tópicos da disciplina Introdução à compilação Analisador léxico Analisador sintático descendente Analisador sintático ascendente Análise semântica Geração

Leia mais

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

COMPILAÇÃO. Ricardo José Cabeça de Souza COMPILAÇÃO Ricardo José Cabeça de Souza www.ricardojcsouza.com.br Programas Código-fonte escrito em linguagem de programação de alto nível, ou seja, com um nível de abstração muito grande, mais próximo

Leia mais

Análise Sintática. Fabiano Baldo

Análise Sintática. Fabiano Baldo Compiladores Análise Sintática Fabiano Baldo Gramáticas Livre de Contexto (GLC) É utilizada na especificação formal lda sintaxe de uma linguagem de programação. É um conjunto de produções ou regras gramaticais

Leia mais

Construção de Compiladores. Capítulo 1. Introdução. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2014.

Construção de Compiladores. Capítulo 1. Introdução. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2014. Construção de Compiladores Capítulo 1 Introdução José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2014.2 1/22 1 Linguagens de programação 2 Compilação 2/22 Tópicos 1

Leia mais

Compiladores. Introdução à Compiladores

Compiladores. Introdução à Compiladores Compiladores Introdução à Compiladores Cristiano Lehrer, M.Sc. Introdução (1/2) O meio mais eficaz de comunicação entre pessoas é a linguagem (língua ou idioma). Na programação de computadores, uma linguagem

Leia mais

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

Um Compilador Simples. Definição de uma Linguagem. Estrutura de Vanguarda. Gramática Livre de Contexto. Exemplo 1 Definição de uma Linguagem Linguagem= sintaxe + semântica Especificação da sintaxe: gramática livre de contexto, BNF (Backus-Naur Form) Especificação Semântica: informal (textual), operacional, denotacional,

Leia mais

Identificadores Nome de variáveis, constantes, métodos, etc...

Identificadores Nome de variáveis, constantes, métodos, etc... IV.2 Aspectos Léxicos Convencionais Classes de símbolos Genéricos Token genérico / Lei de formação bem definida Podem possuir limitações de tamanho e/ou valor Possuem valor semântico o token deve ser acompanhado

Leia mais

Compiladores. Análise Léxica

Compiladores. Análise Léxica Compiladores Análise Léxica Cristiano Lehrer, M.Sc. Introdução (1/3) Análise léxica é a primeira fase do compilador. A função do analisador léxico, também denominado scanner, é: Fazer a leitura do programa

Leia mais

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

Compiladores. Bruno Lopes. Bruno Lopes Compiladores 1 / 31. Instituto de C ompiladores Análise Léxica Bruno Lopes Bruno Lopes ompiladores 1 / 31 Front-end Lida com a linguagem de entrada Teste de pertinência: código fonte linguagem fonte? Programa está bem formado? Sintaticamente?

Leia mais

Analisador Léxico parte II

Analisador Léxico parte II Analisador Léxico parte II Compiladores Mariella Berger Sumário Definições Regulares Gerador de Analisador Léxico Flex Exemplos As fases de um Compilador Análise Léxica Análise Sintática ANÁLISE Análise

Leia mais

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

Análise Sintática II. Eduardo Ferreira dos Santos. Outubro, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 34 Análise Sintática II Eduardo Ferreira dos Santos Ciência da Computação Centro Universitário de Brasília UniCEUB Outubro, 2016 1 / 34 Sumário 1 Introdução 2 Ambiguidade 3 Análise sintática descendente 4

Leia mais

Paradigmas de Programação

Paradigmas de Programação Paradigmas de Programação Prof.: Edilberto M. Silva http://www.edilms.eti.br Aula 2 Linguagens de Programação Desenvolvimento e execução de programas Características de linguagens Execução de programas

Leia mais

Expressões e sentença de atribuição

Expressões e sentença de atribuição Expressões e sentença de atribuição Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá cba Este trabalho está licenciado com uma Licença Creative Commons - Atribuição-CompartilhaIgual

Leia mais

Tratamento dos Erros de Sintaxe. Adriano Maranhão

Tratamento dos Erros de Sintaxe. Adriano Maranhão Tratamento dos Erros de Sintaxe Adriano Maranhão Introdução Se um compilador tivesse que processar somente programas corretos, seu projeto e sua implementação seriam grandemente simplificados. Mas os programadores

Leia mais

PROGRAMAÇÃO I. Introdução

PROGRAMAÇÃO I. Introdução PROGRAMAÇÃO I Introdução Introdução 2 Princípios da Solução de Problemas Problema 1 Fase de Resolução do Problema Solução na forma de Algoritmo Solução como um programa de computador 2 Fase de Implementação

Leia mais

Linguagem de Programação I Prof. Tiago Eugenio de Melo.

Linguagem de Programação I Prof. Tiago Eugenio de Melo. Linguagem de Programação I Prof. Tiago Eugenio de Melo [email protected] www.tiagodemelo.info 1 Sumário Introdução Conceitos preliminares Introdução Variáveis Comandos Condicionais 2 Por que aprender a

Leia mais

Construção de Compiladores

Construção de Compiladores Construção de Compiladores Parte 1 Introdução Linguagens e Gramáticas F.A. Vanini IC Unicamp Klais Soluções Motivação Porque compiladores? São ferramentas fundamentais no processo de desenvolvimento de

Leia mais

Existem três categorias principais de linguagem de programação: linguagem de máquina, linguagens assembly e linguagens de alto nível.

Existem três categorias principais de linguagem de programação: linguagem de máquina, linguagens assembly e linguagens de alto nível. Aula 3 SOFTWARE (programas) Um programa (software) consiste em uma sequência de instruções escritas numa linguagem precisa chamada linguagem de programação. Estas instruções são traduzidas em um compilador,

Leia mais

Ederson Luiz da Silva Ciência da Computação. Algoritmos e Programação

Ederson Luiz da Silva Ciência da Computação. Algoritmos e Programação Ederson Luiz da Silva Ciência da Computação Algoritmos e Programação Programação em C Características Criado na década de 70; Possui muitas regras em sintaxe e semântica; Utilizado para programação de

Leia mais

Projeto de Compiladores

Projeto de Compiladores Projeto de Compiladores FIR Faculdade Integrada do Recife João Ferreira 26 e 27 de fevereiro de 2007 Agenda da Aula Revisão Linguagem de Programação Tradutores Compilador As Fases de Um Compilador Linguagem

Leia mais

Linguagens de Programação

Linguagens de Programação Linguagens de Programação de Linguagens de Programação Bruno Lopes Bruno Lopes Linguagens de Programação 1 / 11 Propriedades desejáveis Legibilidade: A leitura do programa é facilmente compreendida? Redigibilidade:

Leia mais

Programação em C. Variáveis e Expressões. Universidade Federal do Rio Grande do Norte Departamento de Engenharia de Computação e Automação

Programação em C. Variáveis e Expressões. Universidade Federal do Rio Grande do Norte Departamento de Engenharia de Computação e Automação Universidade Federal do Rio Grande do Norte Departamento de Engenharia de Computação e Automação Programação em C Variáveis e Expressões DCA0800 Algoritmos e Lógica de Programação Heitor Medeiros Florencio

Leia mais

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

Introdução. Compiladores Análise Semântica. Introdução. Introdução. Introdução. Introdução 11/3/2008 Compiladores Análise Semântica Fabiano Baldo Análise Semântica é por vezes referenciada como análise sensível ao contexto porque lida com algumas semânticas simples tais como o uso de uma variável somente

Leia mais

Compiladores Análise Semântica

Compiladores Análise Semântica Compiladores Análise Semântica Fabio Mascarenhas - 2013.1 http://www.dcc.ufrj.br/~fabiom/comp Árvores Sintáticas Abstratas (ASTs) A árvore de análise sintática tem muita informação redundante Separadores,

Leia mais

Aula 5 Oficina de Programação Introdução ao C. Profa. Elaine Faria UFU

Aula 5 Oficina de Programação Introdução ao C. Profa. Elaine Faria UFU Aula 5 Oficina de Programação Introdução ao C Profa. Elaine Faria UFU - 2017 Linguagem de Programação Para que o computador consiga ler um programa e entender o que fazer, este programa deve ser escrito

Leia mais

Compiladores. Eduardo Ferreira dos Santos. Fevereiro, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 38

Compiladores. Eduardo Ferreira dos Santos. Fevereiro, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 38 Compiladores Eduardo Ferreira dos Santos Ciência da Computação Centro Universitário de Brasília UniCEUB Fevereiro, 2017 1 / 38 Sumário 1 Compiladores 2 Linguagens de programação 3 Ciência dos compiladores

Leia mais

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

Compiladores I Prof. Ricardo Santos (cap 3 Análise Léxica: Introdução, Revisão LFA) Compiladores I Prof. Ricardo Santos (cap 3 Análise Léxica: Introdução, Revisão LFA) Análise Léxica A primeira fase da compilação Recebe os caracteres de entrada do programa e os converte em um fluxo de

Leia mais

IV.2 Aspectos Léxicos Convencionais

IV.2 Aspectos Léxicos Convencionais IV.2 Aspectos Léxicos Convencionais Classes de símbolos Genéricos - Token genérico / Lei de formação bem definida - Limitações de tamanho e/ou valor - Possuem valor semântico o token deve ser acompanhado

Leia mais

3. Linguagem de Programação C

3. Linguagem de Programação C Introdução à Computação I IBM1006 3. Linguagem de Programação C Prof. Renato Tinós Departamento de Computação e Matemática (FFCLRP/USP) 1 Principais Tópicos 3. Linguagem de programação C 3.1. Conceitos

Leia mais

Compiladores Análise Semântica

Compiladores Análise Semântica Compiladores Análise Semântica Fabio Mascarenhas - 2013.2 http://www.dcc.ufrj.br/~fabiom/comp Árvores Sintáticas Abstratas (ASTs) A árvore de análise sintática tem muita informação redundante Separadores,

Leia mais

Análise Sintática Introdução

Análise Sintática Introdução Análise Sintática Introdução Renato Ferreira Linguagens e Automatas Linguagens formais são importantes em Computação Especialmente em linguagens de programação Linguagens regulares A linguagem formal mais

Leia mais

ALGORITMOS E TÉCNICAS DE PROGRAMAÇÃO

ALGORITMOS E TÉCNICAS DE PROGRAMAÇÃO INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO RIO GRANDE DO NORTE ALGORITMOS E TÉCNICAS DE PROGRAMAÇÃO Docente: Éberton da Silva Marinho e-mail: [email protected] [email protected]

Leia mais

Compiladores - Análise Léxica

Compiladores - Análise Léxica Compiladores - Análise Léxica Fabio Mascarenhas 2017.2 http://www.dcc.ufrj.br/~fabiom/comp Introdução Primeiro passo do front-end: reconhecer tokens Tokens são as palavras do programa O analisador léxico

Leia mais

Programação Introdução

Programação Introdução PROGRAMAÇÃO Programação Introdução Prof. Dr. Adriano Mauro Cansian 1 Introdução Para armazenar um algoritmo na memória de um computador e para que ele possa, em seguida, comandar as operações a serem executadas,

Leia mais

PLANO DE UNIDADE DIDÁTICA- PUD

PLANO DE UNIDADE DIDÁTICA- PUD Professor: Marcus Vinícius Midena Ramos Coordenação: Ricardo Argenton Ramos Data: 03/08/2010 Página: 1 de 5 EMENTA: Conceitos básicos de linguagens. Histórico, classificação e principais aplicações de

Leia mais

Compiladores 02 Analise léxica

Compiladores 02 Analise léxica Compiladores 02 Analise léxica Sumário Análise Léxica Definição: Lexema, tokens Tabela símbolos Expressões regulares, automatos Relembrando O compilador é dividido em duas etapas Análise Síntese Análise

Leia mais

Introdução. Tradutores de Linguagens de Programação

Introdução. Tradutores de Linguagens de Programação Introdução Compiladores 1 Linguagens de programação são notações para se descrever computações para pessoas e para máquinas. Todo software executado em todos os computadores foi escrito em alguma linguagem

Leia mais

INE5622 INTRODUÇÃO A COMPILADORES

INE5622 INTRODUÇÃO A COMPILADORES INE5622 INTRODUÇÃO A COMPILADORES PLANO DE ENSINO Objetivo geral Conhecer o processo de especificação e implementação de linguagens de programação, a partir do estudo dos conceitos, modelos, técnicas e

Leia mais

Compiladores - Gramáticas

Compiladores - Gramáticas Compiladores - Gramáticas Fabio Mascarenhas - 2013.1 http://www.dcc.ufrj.br/~fabiom/comp Análise Sintática A análise sintática agrupa os tokens em uma árvore sintática de acordo com a estrutura do programa

Leia mais