DESENVOLVIMENTO DO COMPILADOR PARA A LINGUAGEM SIMPLE
|
|
|
- Marco Antônio Benevides Stachinski
- 9 Há anos
- Visualizações:
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 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
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
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
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
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
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
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
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
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
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
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?
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...
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 /
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
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
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
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
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
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
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
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
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
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.
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:
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
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.
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
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
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
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
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
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:
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
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.
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
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
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
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
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
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
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,
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
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
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?
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
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
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
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
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
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
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
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
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,
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
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
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:
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
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
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,
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
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
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
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
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
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,
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
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]
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
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,
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
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
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
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
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
