Coder Social home page Coder Social logo

projeto-ambiente-execucao's Introduction

Ambiente de Execução

Introdução

Este projeto é uma introdução a Compiladores. Para entender corretamente o que deve ser feito deve-se entender a ambiente de execução real, tudo isso será aprofundado na disciplina "Linguagens e Compiladores". Sugerimos que vocês leiam a proposta do Compilador de C-- antes dessa.

Base de Compiladores

O ambiente de execução é uma funcionalidade normalmente integrada ao compilador que fornece métodos e recursos para executar o código-objeto gerado pelo compilador. Ele deve gerenciar memória e instruções para executar o código gerado. A estrutura padrão, da memória de execução (diferente da memória da máquina) é:

Código Aqui deve estar o código-objeto compilado, alocado estaticamente
Estático Variáveis e parâmetros gerados pelo compilador, alocado estaticamente
Monte Variáveis de longa duração na execução (mais que um procedimento), alocado dinamicamente, cresce em direção aos endereços maiores
Memória livre Pode ser ocupado pelo monte ou pela pilha
Pilha Valores do monte quando os procedimentos são trocados e serão restaurados posteriormente, alocado dinamicamente, cresce em direção aos endereços menores

O ambiente de execução executa o código compilado linha a linha e salva as variáveis utilizadas em tabelas de valores. Quando há uma chamada de sub-rotina, há a criação de um novo procedimento, todos as variáveis do estado devem ser empilhados na pilha (stack) na forma de um registro de ativação. Sequências de chamada e de retorno são funções responsáveis por inserir e retirar registros de ativação da pilha. O monte (heap) armazena valores que devem persistir entre diversos procedimentos.

Um registro de ativação deve conter valores essenciais para a futura retomada da execução, tais como variáveis e seus valores, ponto de retorno e outras informações úteis, estruturados de forma clara e padronizada. As sequências de chamada e de retorno manipulam os valores de forma adequada a empilhar ou desempilhar esses registros e alterar o código de forma conveniente.

Além dessas funções organizacionais o ambiente de execução também garante que todas as funções utilizadas pelo compilador para gerar o código sejam devidamente implementadas, como operações algébricas com tipos de tamanho maior que a unidade básica do sistema, e escrita e leitura de forma adequada.

O trabalho

O trabalho consiste em desenvolver um ambiente de execução para o compilador de C--. O seu ambiente de execução deve ser estruturado como explicado na seção anterior. O código compilado será colocado num arquivo code.asm e deve ser executado corretamente pelo seu ambiente de execução depois de ser compilado.

O trabalho pode ser feito em duplas ou individualmente. Definir escopo de uso do comunicador, mensagens de erro coerentes, eventuais limitações e funcionalidades não comentadas acima fazem parte do trabalho.

Desafio

Uma ferramenta muito útil para programadores (e explorada superficialmente no primeiro laboratório) é o debugger. Um debugger tem diversas funcionalidades, entre elas a inserção de break points, que permitem ao programador parar a execução do código em determinado ponto e visualizar as variáveis naquele instante. Seu desafio é encontrar um modo de permitir ao usuário do seu ambiente de execução inserir um break point em algum rótulo do código e, toda vez que a execução passar por aquele rótulo, o programa deve parar e esperar um comando do usuário para retomar a execução.

Perguntas

Seguem algumas perguntas a serem respondidas depois da codificação:

  1. A utilização de memória pode ser mais eficiente? Como? Se sim, por que a forma menos eficiente foi escolhida?

  2. Os códigos escritos podem ser mais eficientes? Como? Se sim, por que a forma menos eficiente foi escolhida?

  3. Qual foi a maior dificuldade em implementar o ambiente de execução?

  4. Quais são os limites recomendados para o código em C-- de forma a não gerar problemas na hora de execução?

Entrega

Dois ou mais arquivos devem ser entregues:

  1. Ambiente: um arquivo em MVN ambiente.asm contendo o código do seu ambiente de execução;

  2. Relatório: um arquivo chamado relatorio_<NUSP1>_<NUSP2>.pdf para trabalhos realizados em dupla, ou relatorio_<NUSP>.pdf para individuais contendo uma descrição resumida do problema e dos conceitos e uma descrição detalhada das etapas de resolução, da estratégia utilizada em cada módulo e outras informações que julgarem úteis. O relatório pode conter imagens das execuções de teste;

  3. Outros arquivos que julgar necessário.

projeto-ambiente-execucao's People

Contributors

tomaz-suller avatar

Watchers

Ricardo avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.