Construção de um compilador para a linguagem Panda
|
|
- Maria do Mar Coimbra Sintra
- 6 Há anos
- Visualizações:
Transcrição
1 Construção de Compiladores I UFOP DECOM Atividades Práticas Construção de um compilador para a linguagem Panda Etapa 1 Sumário José Romildo Malaquias Resumo Nesta série de atividades vamos implementar várias construções da linguagem Panda no compilador. Ao submeter uma atividade, deve ser incluído um documento explicando como as tarefas foram realizadas. Em relação à análise semântica, as regras implementadas devem ser explicadas de forma clara. 1 Mensagens de erro 1 2 Representação de tipos 2 3 Símbolos 2 4 Tabelas de símbolos 2 5 Os analisadores léxico, sintático e semântico 3 6 Comentários 4 7 Identificadores 4 8 Literais booleanos 4 9 Literais inteiros 5 10 Literais reais 6 11 Literais string 7 1 Mensagens de erro O projeto contém algumas classes para reportar erros encontrados durante a compilação. Estas classes fazem parte do pacote ErrorMsg e serão comentadas a seguir. Em todo compilador é desejável que os erros encontrados sejam reportados com uma indicação da localização do erro, acompanhada por uma mensagem explicativa do problema ocorrido. Para tanto tornase necessário manter a informação da localização em que cada frase do programa (cada nó da árvore abstrata construída para representar o programa) foi encontrada. Neste projeto as localizações no código fonte são dados em função do número de caracteres desde o começo do arquivo fonte até a posição desejada. Para que seja possível informar a posição usando número de linhas e colunas nas mensagens de erro, precisamos manter uma lista com informações da localização do começo de cada linha do arquivo fonte. Uma instância da classe ErrorMsg.Source possui basicamente três informações sobre o programa fonte sendo compilado: o nome do arquivo fonte, uma lista contendo a posição do início de cada linha já lida do arquivo fonte, e a contagem de linhas do arquivo fonte O analisador léxico deverá usar o método newline desta classe toda vez que for encontrada uma nova linha no arquivo fonte. A classe ErrorMsg.Loc é usada para representar uma localização no arquivo fonte. Uma localização é caracterizada por: 1
2 uma indicação do arquivo fonte (uma instância de Error.Source ), uma posição inicial (equerda), e uma posição final (direita) Assim através da localização de uma frase conhece-se o arquivo fonte onde a frase foi encontrada, a posição em que ela começou e a posição em que ela terminou. A classe ErrorMsg.ErrorMsg deve ser usada para emissão de mensagens de erro através do método error, que recebe como argumentos a localização do erro e a mensagem de diagnóstico. Esta classe possui também um atributo anyerror usado para sinalizar se houve algum erro durante a compilação. 2 Representação de tipos O pacote Types contém classes para a representação dos tipos da linguagem no compilador. A classe Types.Type é uma classe abstrata. Ele deve ser uma superclasse de todas as outras classes que representam tipos da linguagem sendo compilada. O método actual é usado para determinar o tipo realmente representado na presença de definições de tipos e recursividade, e será explicado oportunamaente. O método coerceto permite verificar se um tipo é compatível com outro tipo, dado como argumento para o método. A inteface Types.Types declara algumas contantes para representar os tipos mais comuns da linguagem sendo compilada, com o objetivo de facilitar a programação do restante do compilador. 3 Símbolos Linguagens de programação usam identificadores para nomear entidades da linguagem, como variáveis, funções, classes, módulos, etc. Símbolos léxicos que são identificadores tem um valor semântico que é o nome do identificador, e que a princípio pode ser representado por uma String. Porém o tipo String tem algumas incoveniências para o compilador: Geralmente o mesmo identificador pode ocorrer várias vezes em um programa. Se cada ocorrência for representada por string (ou seja, por uma sequência de caracteres), o uso de memória poderá ser grande. Normalmente existem dois tipos de ocorrência de identificadores em um programa: uma declaração do identificador, e um uso do identificador já declarado. Durante a compilação cada ocorrência de uso de um identificador deve ser associada com um ocorrência de declaração. Para tanto os identificadores devem ser comparados para determinar se são iguais (isto é, tem o mesmo nome). O uso de strings pode ser ineficiente, por pode ser necessário comparar todos os caracteres da string para determinar se elas são iguais ou não. Por estas razões o compilador utiliza um outro tipo ( Symbol.Symbol ) para representar os nomes dos identificadores. Basicamente mantém-se uma tabela com todas os identificadores já encontrados, e todas as vezes que o analisador léxico encontrar um identificador, deve-se verificar se o seu nome já está na tabela. Em caso afirmativo, usa-se o símbolo encontrado na tabela. Caso contrário cria-se um novo símbolo, que é adicionado à tabela, e usado pelo analisador léxico. A comparação de igualdade de símbolos se resumo a uma comparação de referências, já que o mesmo identificador estará sempre sendo representado pelo mesmo símbolo (mesmo objeto na memória). O método Symbol.Symbol.symbol cria um símbolo a partir de uma string. Observação: Não confunda o tipo Symbol.Symbol (o tipo dos símbolos que representam identificadores) com o tipo java_cup.runtime.symbol (o tipo dos símbolos gramaticais terminais e não-terminais). 4 Tabelas de símbolos Em Panda identificadores são usados para nomear entidades como tipos, variáveis e funções. Quando um identificador é usado, é necessário que ele tenha sido previamente definido, e informações sobre como ele foi definido devem ser recuperadas para compilar a frase em que o identificador é usado. Por exemplo, quando compilamos uma expressão que é uma variável simples, é necessário saber o tipo da variável. 2
3 uma expressão que é uma chamada de função, é necessário saber o número de argumentos e o tipo de cada argumento que a função espera, bem como o tipo do resultado da função. As informações disponíveis no momento em que um identificador é declarado são guardados em uma estrutura de dados chamada tabela de símbolos, que mapeia o nome (símbolo) à informação relevante a ele. Posteriormente estas tabelas podem ser usadas para recuperar estas informações. A classe Symbol.Symbol contém código para manipular tabelas de símbolo (também chamadas de ambiente). As tabelas de símbolo usadas pelo compilador de Panda e definidas como atributos na classe Env.Env são: Env.Env.venv é a tabela de variáveis e funções, e Env.Env.tenv é a tabela de tipos. As entradas na tabela de variáveis e funções são do tipo Env.Entry, que possui duas subclasses: Env.VarEntry, usada para definições de variáveis, contendo o atributo ty que representa o tipo da variável Env.FunEntry, usada para definições de funções, contendo os atributos formals representando os tipos dos parâmetros formais da função, e result representando o tipo do resultado da função 5 Os analisadores léxico, sintático e semântico O pactye Abs contém as classes que representam as árvores abstratas para as construções da linguagem. O pacote Parse contém as classes que implementam os analisadores léxico e sintático do compilador. O analisador léxico (classe Parse.Lexer ) é gerado automaticamente pela ferramenta jflex. A especificação léxica é feita no arquivo panda.jflex usando expressões regulares. O analisador sintático (classe Parse.Parser ) é gerado automaticamente pela ferramenta JavaCUP. A especificação sintática é feita no arquivo panda.cup usando uma gramática livre de contexto. O JavaCUP gera também uma classe Parse.sym contendo definições de constantes para representar os diversos símbolos terminais da gramática. Esta classe é usada pelos analisadores léxico e sintático. A classe Parse.Tokens contém o método dumptoken que obtém a descrição de um símbolo léxico (token) na forma de uma string, e é útil quando precisarmos exibir um token. A análise semântica é feita por meio de métodos definidos nas classes que representam as árvores abstratas das construões da linguagem. Ao acrescentar uma nova construção na implementação da linguagem: defina as classes necessárias para representar a árvore abstrata para a construção no pacote Absyn ; uma classe que representa uma árvore abstrata deverá ser uma subclasse de Absyn.Absyn ; lembrese de: definir os campos necessários para as sub-árvores da árvore abstrata, definir o construtor que inicializa estes campos com valores passados como argumentos, definir o método tostring que permite converter para string, definir o método totree que permite converter para uma árvore de string, útil para visualização gráfica a árvore abstrata, definir o método adequado para análise semântica declare novos símbolos terminais e não-terminais na gramática livre de contexto da linguagem, necessários para as especificações léxica e sintática da construção, acrescente as regras de produção para a construção na gramática livre de contexto da linguagem, tomando o cuidado de escrever ações semânticas adequadas para a construção da árvore abstrata correspondente, se necessário acrescente regras léxicas que permitam reconhecer os novos símbolos terminais na especificação léxica da linguagem, e 3
4 se necessário modifique o método dumptoken (que converte um símbolo léxico para String ) da classe Parse.Tokens para considerar os novos símbolos terminais. 6 Comentários Um comentário de linha em Panda começa com a sequência de caracteres // e termina no final da linha. Um comentário de bloco em Panda é delimitado por /* e por */. Comentários de bloco podem ser aninhados. Tarefa 1: Comentários Análise léxica Acrescentar regras léxicas para reconhecer (e descartar) comentários de linha e de bloco em Panda. Se um comentário de bloco não terminar deve ser reportado um erro. Tarefa 2: Comentários Testes // isto é um comentário de linha /* isto é um comentário de bloco */ /* isto é um comentário de bloco /* aninhado */ percebeu */ /* Este comentário de bloco não terminou /* Este comentário de bloco /* com aninhamento */ não terminou 7 Identificadores Os identificadores de Panda são formados por uma sequência não vazia de letras (maiúsuclas ou minúsculas), dígitos decimais e sublinhado ( _ ), começando com uma letra. Letras maiúsculas e minúsculas são consideradas diferentes. Tarefa 3: Identificadores Análise léxica 1. Modifique a gramática de Panda acrescentando um símbolo terminal ID para os tokens dos identificadores. Use um valor semântico do tipo Symbol.Symbol para estes tokens. classe Parse.Tokens para considerar o novo símbolo terminal ID. 3. Acrescente regras léxicas para o símbolo terminal ID. 8 Literais booleanos Implementar no projeto de compilador da linguagem Panda o tratamento de literais booleanos. Os literais booleanos são #t (verdadeiro) e #f (falso). 4
5 Tarefa 4: Literais booleanos Árvore abstrata Definir a classe Absyn.BoolExp para representar a árvore abstrata de uma constante booleana. 1. Defina as variáveis de instância necessárias para representar a estrutura da expressão. 2. Defina o construtor para a classe. 3. Redefina o método totree para converter um objeto desta classe para Tree<String>. Tarefa 5: Literais booleanos Análise léxica 1. Modifique a gramática de Panda acrescentando um símbolo terminal BOOLLIT para os tokens dos literais booleanos. Use um valor semântico do tipo Boolean para estes tokens. classe Parse.Tokens para considerar o novo símbolo terminal BOOLLIT. 3. Acrescente regras léxicas para o símbolo terminal BOOLLIT. Tarefa 6: Literais booleanos Análise sintática Acrescente na gramática de Panda uma regra de produção para a expressão literal booleano. Tarefa 7: Literais booleanos Análise semântica 1. Defina a classe Types.BOOL para representar o tipo dos valores booleanos. 2. Acrescte uma constante BOOL na classe Types.Types cujo valor é uma instância da classe Types.BOOL. 3. Redefina o método typecheck na classe Absyn.BoolExp que calcula o tipo de uma expressão literal booleano. 4. Adicione na tabela de símbolos de tipos do compilador o símbolo bool. 5. Adicione na tabela de símbolos de variávaeis e funções do compilador as funções da biblioteca padrão que manipulam booleanos. As assinaturas das funções são: function print_bool(x: bool): unit function not(b: bool): bool Tarefa 8: Literais booleanos Testes #t #f #F // erro léxico 9 Literais inteiros Implementar no projeto de compilador da linguagem Panda o tratamento de literais inteiros. Um literal inteiro é uma sequência não vazia de dígitos decimais. O literal só poderá começar com o dígito 0 se ele for o próprio literal 0. 5
6 Tarefa 9: Literais inteiros Árvore abstrata Definir a classe Absyn.IntExp para representar a árvore abstrata de uma constante inteira. 1. Defina as variáveis de instância necessárias para representar a estrutura da expressão. 2. Defina o construtor para a classe. 3. Redefina o método totree para converter um objeto desta classe para Tree<String>. Tarefa 10: Literais inteiros Análise léxica 1. Modifique a gramática de Panda acrescentando um símbolo terminal INTLIT para os tokens dos literais inteiros. Use um valor semântico do tipo Long para estes tokens. classe Parse.Tokens para considerar o novo símbolo terminal INTLIT. 3. Acrescente regras léxicas para o símbolo terminal INTLIT. Tarefa 11: Literais inteiros Análise sintática Acrescente na gramática de Panda uma regra de produção para a expressão literal inteiro. Tarefa 12: Literais inteiros Análise semântica 1. Defina a classe Types.INT para representar o tipo dos valores inteiros. 2. Acrescte uma constante INT na classe Types.Types cujo valor é uma instância da classe Types.INT. 3. Redefina o método typecheck na classe Absyn.IntExp que calcula o tipo de uma expressão literal inteiro. 4. Adicione na tabela de símbolos de tipos do compilador o símbolo int. 5. Adicione na tabela de símbolos de variáveis e funções do compilador as funções da biblioteca padrão que manipulam inteiros. As assinaturas das funções são: function print_int(x: int): unit Tarefa 13: Literais inteiros Testes Literais reais Implementar no projeto de compilador da linguagem Panda o tratamento de números reais (representados como números em ponto flutante). Um literal real é formado por uma sequência de dígitos decimais seguida de um ponto seguido de outra sequência de dígitos decimais. Uma e somente uma das sequências de dígitos decimais pode ser vazia. 6
7 Tarefa 14: Literais reais Árvore abstrata Definir a classe Absyn.RealExp para representar a árvore abstrata de uma constante real. 1. Defina as variáveis de instância necessárias para representar a estrutura da expressão. 2. Defina o construtor para a classe. 3. Redefina o método totree para converter um objeto desta classe para Tree<String>. Tarefa 15: Literais reais Análise léxica 1. Modifique a gramática de Panda acrescentando um símbolo terminal REALLIT para os tokens dos literais reais. Use um valor semântico do tipo Double para estes tokens. classe Parse.Tokens para considerar o novo símbolo terminal REALLIT. 3. Acrescente regras léxicas para o símbolo terminal REALLIT. Tarefa 16: Literais reais Análise sintática Acrescente na gramática de Panda uma regra de produção para a expressão literal real. Tarefa 17: Literais reais Análise semântica 1. Defina a classe Types.REAL para representar o tipo dos valores reais. 2. Acrescte uma constante REAL na classe Types.Types cujo valor é uma instância da classe Types.REAL. 3. Redefina o método typecheck na classe Absyn.RealExp que calcula o tipo de uma expressão literal real. 4. Adicione na tabela de símbolos de tipos do compilador o símbolo real. 5. Adicione na tabela de símbolos de variáveis e funções do compilador as funções da biblioteca padrão que manipulam reais. As assinaturas das funções são: function print_real(x: real): unit function round(f: real): int function ceil(f: real): int function floor(f: real): int function real(i: int): real Tarefa 18: Literais reais Testes Literais string Implementar no projeto de compilador da linguagem Panda o tratamento de strings. Considere que os literais strings são escritos como uma sequência de caracteres delimitada por aspas duplas ("). O caracter \ é especial e inicia uma sequência de escape. As seguintes sequências de escape são válidas: 7
8 \\ o caracter \ \" o caracter " \n o caracter de mudança de linha \t o caracter de tabulação horizontal \ddd o caracter de código decimal ddd (ddd é uma sequência de dígitos decimais) Tarefa 19: Literais strings Árvore abstrata Definir a classe Absyn.StringExp para representar a árvore abstrata de uma constante string. 1. Defina as variáveis de instância necessárias para representar a estrutura da expressão. 2. Defina o construtor para a classe. 3. Redefina o método totree para converter um objeto desta classe para Tree<String>. Tarefa 20: Literais strings Análise léxica 1. Modifique a gramática de Panda acrescentando um símbolo terminal STRINGLIT para os tokens dos literais strings. Use um valor semântico do tipo String para estes tokens. classe Parse.Tokens para considerar o novo símbolo terminal STRINGLIT. 3. Acrescente regras léxicas para o símbolo terminal STRINGLIT. Tarefa 21: Literais strings Análise sintática Acrescente na gramática de Panda uma regra de produção para a expressão literal string. Tarefa 22: Literais strings Análise semântica 1. Defina a classe Types.STRING para representar o tipo dos valores strings. 2. Acrescte uma constante STRING na classe Types.Types cujo valor é uma instância da classe Types.STRING. 3. Redefina o método typecheck na classe Absyn.StringExp que calcula o tipo de uma expressão literal string. 4. Adicione na tabela de símbolos de tipos do compilador o símbolo string. 5. Adicione na tabela de símbolos de variáveis e funções do compilador as funções da biblioteca padrão que manipulam strings. As assinaturas das funções são: function print(x: string): unit function length(s: string): int function substring(s: string, start: int, length: int): string Tarefa 23: Literais strings Testes "Bom dia, Brasil!" "" "abc\tdef\nghi\\jkl\"mno\065ok" // invalid escape sequence in string literal "abc\kdef" // unclosed string literal "abc 8
Compilação da linguagem Panda
Construção de Compiladores I [BCC328] Atividades Práticas Compilação da linguagem Panda Departamento de Computação Universidade Federal de Ouro Preto Prof. José Romildo Malaquias 22 de abril de 2015 Resumo
Leia maisIdentificadores 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 maisCompiladores 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 maisIV.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 maisProgramas Interativos
Programação Funcional DECOM UFOP 2012-1 Aula prática Capítulo 8 Prof. José Romildo Malaquias Programas Interativos Resumo Nesta aula pretende-se explorar construção de programas interativos usando ações
Leia maisUniversidade Estadual da Paraíba - UEPB Curso de Licenciatura em Computação
Universidade Estadual da Paraíba - UEPB Curso de Licenciatura em Computação Análise Semântica Disciplina: Compiladores Equipe: Luiz Carlos dos Anjos Filho José Ferreira Júnior Compiladores Um compilador
Leia maisCompiladores 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 maisSimulação de Caixa Automático
Programação Funcional UFOP DECOM 2014.1 Trabalho 1 Simulação de Caixa Automático Sumário Resumo Com esta atividade pretende-se explorar a construção de programas interativos usando ações de entrada e saída
Leia maisUniversidade 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 maisCompiladores. 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 maisCompiladores - Especificando Sintaxe
Compiladores - Especificando Sintaxe 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
Leia maisFACULDADE LEÃO SAMPAIO
FACULDADE LEÃO SAMPAIO Paradigmas de Programação Curso de Análise e Desenvolvimento de Sistemas Turma: 309-5 Semestre - 2014.2 Paradigmas de Programação Prof. MSc. Isaac Bezerra de Oliveira. 1 PARADIGMAS
Leia maisAná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 maisCompiladores. Análise Semântica
Compiladores Análise Semântica Cristiano Lehrer, M.Sc. Atividades do Compilador Arquivo de origem Análise léxica Análise semântica Síntese Análise sintática Análise Gramáticas Estruturas internas Arquivo
Leia maisCompiladores 04 Analise léxica Jflex. Prof José Rui
Compiladores 04 Analise léxica Jflex Prof José Rui Sumário Análise Léxica Definição: Lexema, tokens Tabela símbolos Expressões regulares, automatos JFlex Análise léxica Exemplo Soma = a + b * 40;
Leia maisCompiladores 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 maisAmbiente de desenvolvimento
Linguagem C Ambiente de desenvolvimento Um programa em C passa por seis fases até a execução: 1) Edição 2) Pré-processamento 3) Compilação 4) Linking 5) Carregamento 6) Execução Etapa 1: Criação do programa
Leia maisCompiladores. 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 maisIntroduçã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 maisCompiladores 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 maisCompiladores - JFlex. Fabio Mascarenhas
Compiladores - JFlex Fabio Mascarenhas 2018.1 http://www.dcc.ufrj.br/~fabiom/comp JFlex Um gerador de analisadores léxicos que gera analisadores escritos em Java A sintaxe das especificações é inspirada
Leia maisCompiladores - JFlex. Fabio Mascarenhas Monday, April 15, 13
Compiladores - JFlex Fabio Mascarenhas - 2013.1 http://www.dcc.ufrj.br/~fabiom/comp JFlex Um gerador de analisadores léxicos que gera analisadores escritos em Java A sintaxe das especificações é inspirada
Leia maisAná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 maisEsta categoria mais geral, à qual cada objeto pertence, denominamos de classe; IFSC/POO + JAVA - prof. Herval Daminelli
Esta categoria mais geral, à qual cada objeto pertence, denominamos de classe; Tudo no mundo real pode ser representado por meio do conceito de "objeto": uma planta, uma mesa, uma pessoa, um sentimento,
Leia maisCompiladores 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 maisAná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 maisCompiladores. 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 maisClasses e Objetos. Sintaxe de classe em Java
Classes e Objetos Classes e Objetos A Programação Orientada a Objetos (POO) é uma técnica de programação que se baseia na construção de classes e utilização de objetos. Os objetos são formados por dados
Leia maisUniversidade 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 geovanegriesang@unisc.br Processadores de linguagem Linguagens de programação são notações para se descrever
Leia maisTokens, 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 maisAula 4: Introdução à Linguagem C++
CI208 - Programação de Computadores Aula 4: Introdução à Linguagem C++ Prof. MSc. Diego Roberto Antunes diegor@inf.ufpr.br www.inf.ufpr.br/diegor Universidade Federal do Paraná Setor de Ciências Exatas
Leia maisProgramação: Vetores
Programação de Computadores I Aula 09 Programação: Vetores José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2011-1 1/62 Motivação Problema Faça um programa que leia
Leia maisIntrodução parte II. Compiladores. Mariella Berger
Introdução parte II Compiladores Mariella Berger Sumário Partes de um compilador Gerador da Tabela de Símbolos Detecção de erros As fases da análise As fases de um compilador Montadores O que é um Compilador?
Leia mais15/03/2018. Professor Ariel da Silva Dias Aspectos sintáticos e semânticos básicos de linguagens de programação
Professor Ariel da Silva Dias Aspectos sintáticos e semânticos básicos de linguagens de programação Conjunto de regras que definem a forma da linguagem; Como as sentenças podem ser formadas como sequências
Leia maisLinguagens de Domínio Específico
Linguagens de Domínio Específico Fabio Mascarenhas 2016.1 http://www.dcc.ufrj.br/~fabiom/dsl Processamento de uma DSL PEGs As gramáticas de expressões de parsing, ou PEGs (parsing expression grammars)
Leia maisLinguagem de Programação III
Linguagem de Programação III Aula-2 Introdução à Programação Orientada a Objetos Prof. Esbel Tomás Valero Orellana Modelos Modelos são representações simplificadas de objetos, pessoas, itens, tarefas,
Leia maisEstrutura de Dados Básica
Estrutura de Dados Básica Professor: Osvaldo Kotaro Takai. Aula 5: Registros O objetivo desta aula é apresentar os tipos de dados definidos pelo programador, bem como exibir usos comuns desses tipos de
Leia maisComputação L2. Linguagem C++ Observação: Material Baseado na Disciplina Computação Eletrônica.
Computação L2 Linguagem C++ ovsj@cin.ufpe.br Observação: Material Baseado na Disciplina Computação Eletrônica. Alfabeto São os símbolos ( caracteres ) permitidos na linguagem: Letras (maiúsculas e minúsculas);
Leia maisComo construir um compilador utilizando ferramentas Java
Como construir um compilador utilizando ferramentas Java p. 1/3 Como construir um compilador utilizando ferramentas Java Aula 11 Tabela de Símbolos Prof. Márcio Delamaro delamaro@icmc.usp.br Como construir
Leia maisAnalisador 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 maisAula de hoje. Tipos de Dados e Variáveis. Constantes literais. Dados. Variáveis. Tipagem dinâmica. SCC Introdução à Programação para Engenharias
SCC 12 - Introdução à Programação para Engenharias Tipos de Dados e Variáveis Professor: André C. P. L. F. de Carvalho, ICMC-USP Pos-doutorando: Isvani Frias-Blanco Monitor: Henrique Bonini de Britto Menezes
Leia maisCompiladores. 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 maisComo 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 delamaro@icmc.usp.br Como construir um
Leia maisCAP. VI ANÁLISE SEMÂNTICA
CAP. VI ANÁLISE SEMÂNTICA VI.1 Introdução Semântica SIGNIFICADO, SENTIDO LÓGICO, COERÊNCIA,... Diferença entre SINTAXE e SEMÂNTICA Sintaxe : descreve as estruturas de uma linguagem; Semântica : descreve
Leia maisINE5421 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 maisPró-Reitoria Acadêmica Diretoria Acadêmica Assessoria Pedagógica da Diretoria Acadêmica
FACULDADE: CENTRO UNIVERSITÁRIO DE BRASÍLIA UniCEUB CURSO: CIÊNCIA DA COMPUTAÇÃO DISCIPLINA: CONSTRUÇÃO DE COMPILADORES CARGA HORÁRIA: 75 H. A. ANO/SEMESTRE: 2017/02 PROFESSOR: EDUARDO FERREIRA DOS SANTOS
Leia maisCP Compiladores I Prof. Msc.. Carlos de Salles
CP 5017.9 Prof. Msc.. Carlos de Salles 1 - EMENTA O Processo de Compilação. Deteção e Recuperação de Erros. Introdução à geração de Código Intermediário. Geração de Código de Máquina. Otimização. Uma visão
Leia maisLinguagens de Domínio Específico
Linguagens de Domínio Específico Fabio Mascarenhas 2016.1 http://www.dcc.ufrj.br/~fabiom/dsl Processamento de uma DSL Padrão Visitor A outra técnica para implementar um percurso consiste em usar o padrão
Leia maisLinguagem de Programação III
Linguagem de Programação III Aula-4 Construtores e Sobrecarga Prof. Esbel Tomás Valero Orellana Até Aqui Modelos e POO Classes e sua implementação em Java Encapsulamento Tipos de dados nativos em Java
Leia maisFolha 3 - Análise léxica
Folha 3 Análise léxica 1. Escrever um programa em FLEX que permite contar o número de ocorrências de uma cadeia de caracteres contida num ficheiro de texto. 2. Escrever um programa em FLEX que permite
Leia maisFunção, interação com o compilador Especificação e reconhecimento de tokens Implementação Tratamento de erros. Prof. Thiago A. S.
Análise léxica Função, interação com o compilador Especificação e reconhecimento de tokens Implementação Tratamento de erros Prof. Thiago A. S. Pardo 1 Estrutura geral de um compilador programa-fonte analisador
Leia maisImplementando classes em C# Curso Técnico Integrado em Informática Fundamentos de Programação
Implementando classes em C# Curso Técnico Integrado em Informática Fundamentos de Programação Introdução Além de utilizar as classes presentes na biblioteca padrão, programadores podem definir suas próprias
Leia maisLição 4 Fundamentos da programação
Lição 4 Fundamentos da programação Introdução à Programação I 1 Objetivos Ao final desta lição, o estudante será capaz de: Identificar as partes básicas de um programa em Java Reconhecer as diferenças
Leia maisCompiladores Análise de Tipos
Compiladores Análise de Tipos Fabio Mascarenhas 2015.1 http://www.dcc.ufrj.br/~fabiom/comp Tipos Um tipo é: Um conjunto de valores Um conjunto de operações sobre esses valores Os tipos de uma linguagem
Leia maisLinguagem Técnica I. Prof. Jonatas Bastos
Linguagem Técnica I Prof. Jonatas Bastos Email: jonatasfbastos@gmail.com 1 Objetivo da Disciplina p Entender os conceitos da programação orientada a objetos; p Aplicar conceitos básicos relativos a objetos
Leia maisTratamento 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 maisCompiladores Análise de Tipos
Compiladores Análise de Tipos Fabio Mascarenhas 2018.1 http://www.dcc.ufrj.br/~fabiom/comp Tipos Um tipo é: Um conjunto de valores Um conjunto de operações sobre esses valores Os tipos de uma linguagem
Leia maisCOMPILAÇÃ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 maisAlgoritmos. Algoritmos e Linguagem de Programação - Prof Carlos Vetorazzi
Algoritmos Algoritmos e Linguagem de Programação - Prof Carlos Vetorazzi Conceitos Linhas de Código de um Algoritmo ou Programa escrita do programa linha a linha, ou seja, a sintaxe do programa, podendo-se
Leia maisConceitos 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 maisCompiladores. 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 maisLista 05 Herança. public class PessoaFisica extends Pessoa { private String RG; public PessoaFisica(){ super(); } public String getrg(){ return RG; }
Lista 05 Herança 1. Analisando a classe Java abaixo podemos observar que a mesma possui apenas um atributo, um construtor e dois métodos. Perceba que dentro do método main estão sendo invocados métodos
Leia maisLinguagem de Programação III
Linguagem de Programação III Aula-7 Reutilização de Classes Prof. Esbel Tomás Valero Orellana Até Aqui Introdução a POO e sua implementação em Java Atributos, métodos e encapsulamento dos mesmos Trabalhando
Leia maisTipos Algébricos. Programação Funcional. Capítulo 11. José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto
Programação Funcional Capítulo 11 Tipos Algébricos José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2012.1 1/33 1 Tipos Algébricos 2/33 Tópicos 1 Tipos Algébricos 3/33
Leia maisCompiladores. 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 maisEstrutura geral de um compilador programa-fonte
Análise léxica Função, interação com o compilador Especificação e reconhecimento de tokens Implementação Tratamento de erros Prof. Thiago A. S. Pardo 1 Estrutura geral de um compilador programa-fonte analisador
Leia maisPORTUGUÊS ESTRUTURADO: INTRODUÇÃO INTRODUÇÃO À PROGRAMAÇÃO PROF. ALEXANDRO DOS SANTOS SILVA
PORTUGUÊS ESTRUTURADO: INTRODUÇÃO INTRODUÇÃO À PROGRAMAÇÃO PROF. ALEXANDRO DOS SANTOS SILVA SUMÁRIO Introdução Conceitos básicos Formato básico Tipos primitivos Variáveis Constantes Operadores Operações
Leia maisProgramação para Games II. Professor Ariel da Silva Dias Orientação a Objetos
Programação para Games II Professor Ariel da Silva Dias Orientação a Objetos Pacotes Pacotes são um modo de organizar classes e interfaces Um programa pode ser formado por centenas de classes individiduais;
Leia maisFundamentos de Programação. Linguagem C++ aula II - Variáveis e constantes. Prof.: Bruno Gomes
Fundamentos de Programação Linguagem C++ aula II - Variáveis e constantes Prof.: Bruno Gomes 1 Variáveis Representa uma porção da memória que pode ser utilizada pelo programa para armazenar informações
Leia maisCompiladores Aula 3. Celso Olivete Júnior.
Aula 3 Celso Olivete Júnior olivete@fct.unesp.br Na aula de hoje... Analisador léxico: tratamento de erros 2 Arquitetura básica de um compilador Análise Análise Léxica Análise Sintática Análise Semântica
Leia maisLinguagem Java. Introdução. Rosemary Silveira Filgueiras Melo
Linguagem Java Introdução Rosemary Silveira Filgueiras Melo rosesfmelo@hotmail.com 1 Tópicos abordados Histórico da Linguagem Caracterização da Linguagem Criação de Programa Java inicial Entrada e Saída
Leia maisProf. Adriano Maranhão COMPILADORES
Prof. Adriano Maranhão COMPILADORES LINGUAGENS: INTERPRETADAS X COMPILADAS Resumo: Linguagem compilada: Se o método utilizado traduz todo o texto do programa, para só depois executar o programa, então
Leia maisWorking 03 : Conceitos Básicos I
Working 03 : Conceitos Básicos I Objetivos: Dominar os conceitos básicos da linguagem de programação C; Aprender a utilizar o compilador, identificando os erros de sintaxe do código fonte; Prazo de Envio:
Leia maisFamiliarização com a ferramenta JavaCC
Ficha nº 2 Familiarização com a ferramenta JavaCC Estrutura do ficheiro JavaCC O JavaCC utiliza um ficheiro com a extensão.jj, onde são descritos, pelo utilizador, o léxico e a sintaxe da linguagem e gera
Leia maisProgramaçã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 maisProgramação de Computadores I Dados, Operadores e Expressões PROFESSORA CINTIA CAETANO
Programação de Computadores I Dados, Operadores e Expressões PROFESSORA CINTIA CAETANO Dados em Algoritmos Quando escrevemos nossos programas, trabalhamos com: Dados que nós fornecemos ao programa Dados
Leia maisIntroduçã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 maisLinguagens de Domínio Específico
Linguagens de Domínio Específico Fabio Mascarenhas 2016.1 http://www.dcc.ufrj.br/~fabiom/dsl Processamento de uma DSL Gramáticas Vamos usar uma notação parecida com a de expressões regulares para definir
Leia maisCompiladores. 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 mais3. 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.2. Estrutura de Programas e Representação
Leia maisCompiladores - Análise Léxica
Compiladores - Análise Léxica Fabio Mascarenhas 2018.1 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 maisLinguagens de Domínio Específico
Linguagens de Domínio Específico Fabio Mascarenhas 2017.1 http://www.dcc.ufrj.br/~fabiom/dsl Definindo DSLs Linguagem específica de domínio: uma linguagem de programação de computadores de expressividade
Leia maisCompiladores - 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 maisCompiladores Análise de Tipos
Compiladores Análise de Tipos Fabio Mascarenhas - 2013.2 http://www.dcc.ufrj.br/~fabiom/comp Tipos Um tipo é: Um conjunto de valores Um conjunto de operações sobre esses valores Os tipos de uma linguagem
Leia mais3. Tipos de dados e variáveis
3. Tipos de dados e variáveis DIM0320 2015.1 DIM0320 3. Tipos de dados e variáveis 2015.1 1 / 26 Conteúdo 1 Tipos de dados 2 Tipos básicos Portugol 3 Variáveis 4 Exercícios DIM0320 3. Tipos de dados e
Leia maisCompiladores. Parser LL 10/13/2008
Compiladores Fabiano Baldo Usa uma pilha explícita ao invés de chamadas recursivas para realizar a análise sintática. LL(k) parsing significa que ktokensà frente são utilizados. O primeiro L significa
Leia maisCompiladores. Lex e Yacc / Flex e Bison. Ferramentas Flex/Bison
Ferramentas Flex/Bison Prof. Sergio F. Ribeiro Lex e Yacc / Flex e Bison São ferramentas de auxílio na escrita de programas que promovem transformações sobre entradas estruturadas. São ferramentas desenvolvidas
Leia maisCompiladores - Gramáticas
Compiladores - Gramáticas Fabio Mascarenhas 2018.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 maisAlgoritmos e Estrutura de Dados I Conceitos de Algoritmos. Prof. Elyssandro Piffer
Algoritmos e Estrutura de Dados I Conceitos de Algoritmos Prof. Elyssandro Piffer CONCEITO DE ALGORITMO O computador pode auxiliar em muitas tarefas, contudo ele não possui independência, não é inteligente,
Leia maisNoçõ linguagem Java. Profs. Marcel Hugo e Jomi Fred Hübner. Departamento de Sistemas e Computação Universidade Regional de Blumenau - FURB
Noçõ ções básicas b da linguagem Java Profs. Marcel Hugo e Jomi Fred Hübner Departamento de Sistemas e Computação Universidade Regional de Blumenau - FURB Introduçã ção Origem Funcionamento Vantagens Linguagem
Leia maisAlgoritmos e Técnicas de Programação
Algoritmos e Técnicas de Programação Estrutura, Visualg e Variáveis filipe.raulino@ifrn.edu.br Programação Estruturada A programação estruturada (Top-Down) estabelece uma disciplina de desenvolvimento
Leia maisTCC 00308: Programação de Computadores I Organização de programas em Python
TCC 00308: Programação de Computadores I 2017.1 Organização de programas em Python Vamos programar em Python! Como um programa é organizado? Quais são os tipos de dados disponíveis? Como variáveis podem
Leia maisAula 3 Conceitos de memória, variáveis e constantes Cleverton Hentz
Aula 3 Conceitos de memória, variáveis e constantes Cleverton Hentz Sumário de Aula } Conceito de Memória } Variáveis e Tipos de Dados } Constantes 2 Conceito de Memória } A memória de um computador é
Leia maisPuca Huachi Vaz Penna
Aula 3 C++: variáveis e expressões aritméticas 2017/1 BCC201 Introdução à Computação Turmas 61, 62, 63, 64, 65 e 66, 32 e 33 Puca Huachi Vaz Penna Departamento de Computação Universidade Federal de Ouro
Leia mais