Code Monkey home page Code Monkey logo

compilerforneander's Introduction

Compiler for Neander

Seu objetivo neste trabalho é programar um compilador que traduza a linguagem de programação C para a linguagem Assembly Neander-X.

O objetivo principal é fazer com que, dado um conjunto restrito de instruções, o compilador consiga gerar uma saída em código-fonte Assembly independente da ordem das instruções.

Por exemplo, se o usuário digitar

int a = 1;
int b = 2;

ou então

int b;
int a;
b = 2;
a = 1;

O compilador deve ser capaz de identificar corretamente os componentes e gerar a saída em Assembly. É disponibilizado um codigo-fonte de exemplo na função compile do arquivo src/main.c. Este código-fonte não está analisando o texto de entrada, ele sempre gera o mesmo código-fonte de saída; você deve modificar esta função de maneira que a análise sintática e semântica sejam realizadas corretamente.

Requisitos

Abaixo segue uma listagem das instruções em C que podem ser convertidas para Neander-X, bem como a nota que será atribuída caso você as implemente no seu trabalho. Tenha em mente que a nota deste trabalho é 10, portanto, mesmo que você implemente todos os itens da lista, a nota não ultrapassará este valor.

Nota Descrição Exemplo em C Instruções necessárias no Neander-X
1 pt Definição de variáveis int a; EQU
1 pt Atribuição de valores a = 1; LDI, STA
1 pt Definição e atribuição ao mesmo tempo int a = 1; EQU, LDI, STA
1 pt Impressão na tela printf("%d", c); LDA, OUT 0
1 pt Captura de entrada scanf("%d", &d); IN 0, STA
1 pt Término do programa return 0; HLT
1 pt Definição e soma entre variáveis int c = a + b; EQU, LDA, ADD, STA
1 pt Definição e soma entre variável e constante int c = a + 1; EQU, LDI, ADD, STA
1 pt Soma entre variáveis c = a + b; LDA, ADD, STA
1 pt Soma entre variável e constante c = a + 1; LDI, ADD, STA
1 pt Definição e subtração entre variáveis int c = a - b; EQU, LDA, SUB, STA
1.5 pt Definição e subtração entre variável e constante (dois lados) int c = a - 1; e
int c = 1 - a;
EQU, LDI, STA, LDA, SUB
1 pt Subtração entre variáveis c = a - b; LDA, STA, SUB
1.5 pt Subtração entre variável e constante (dois lados) c = a - 1; e
c = 1 - a;
EQU, LDI, STA, LDA, SUB
5 pts Multiplicação (qualquer configuração) int c = a * b; ou
c = a * b; ou
c = a * 3; ou
c = 3 * 2;
EQU, STA, LDA, LDI, JMP, SUB, JNZ

Código-fonte de apoio

É disponibilizado um código-fonte de apoio, escrito em C. Portanto, o compilador que converte um arquivo escrito na linguagem de programação C para Neander-X também é escrito em C.

Você pode consultar o código-fonte disponível nos arquivos include/utils.h e src/main.c. Desenvolva seu código-fonte no arquivo src/main.c.

Executando pelo Code::blocks

Abra o arquivo compilerForNeander.cbp pelo Code::blocks, selecione o arquivo src/main.c, selecione a função main no seletor , e clique em compilar e executar (botão ou nos menus Build > Build and Run).

Se a seguinte janela aparecer para você:

img.png

Será necessário configurar qual o arquivo de entrada e saída do programa (estes parâmetros são passados pela linha de comando. Para fazer isso, acesse o menu Project > Set programs' arguments.... Na janela que abrir, escreva o caminho relativo para os arquivos desejados, por exemplo:

img.png

Após fazer isso, compile novamente o programa com ou nos menus Build > Build and Run para ver a saída do programa:

img.png

Você pode, claro, definir os caminhos dentro do código-fonte, porém isto torna o compilador menos flexível.

Problemas

Caso você tenha algum problema durante a realização deste trabalho que você acredite que é um bug, entre em contato com o professor no e-mail [email protected].

compilerforneander's People

Contributors

henryzord avatar

Watchers

 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.