Compilador ManoKime
O compilador foi desenvolvido para mapear um subconjunto da linguagem C em código máquina do processador Mano&Kime, desenvolvido na disciplina. Ele aceita um arquivo como entrada e imprime o código assembly a ser utilizado no processador.
Restrições:
- Todas aquelas da linguagem C, ou seja, por exemplo não tem OO.
- O programa só pode ter a rotina main();
- Só podem ser declaradas 63 variáveis, as quais só podem ser inteiros (int);
- A faixa de valores que podem ser atribuídos diretamente a uma variável ou utilizados em uma operação é [-64:63];
- É possível atribuir a uma variável expressões aritméticas, mas somente utilizando operadores de soma(+), subtração/negação (-). ou lógicas, (&) ,or (|) e negação (~);
- Operações de Input/Output são permitidas utilizando a variável predefinida (io);
- Comandos if/else e while são permitidos, utilizando uma expressão lógica como condição, essas expressões podem utilizar operadores lógicos como (==, !=, >, <, >=, <=).
- Considerando as limitações do processador, não é possível fazer uso de parênteses, nem de operações de if e while aninhados.
Rodando o compilador:
Basta digitar o comando no terminal:
compiladorMK < arquivo.c
Exemplo de programa:
main (){
int a;
a = 0;
int b;
b = 1;
if (a > 1){
a = 0;
}
a = b + 1;
if (a == 1){
a = 0;
}else{
a = 1;
}
a = 1 - b;
b = 3 | a;
while (a >= b){
a = io;
b = ~b;
}
}
Exemplo de programa com erro:
Bugs conhecidas
Tem que tirar o primeiro caractére gerada (uma cobrinha ~).
Dúvidas:
- Adalberto Teixeira (adalberto@lad.dsc.ufcg.edu.br)
- Andrey Menezes (andrey.menezes@gmail.com)
- Daniel Lucena (daniel@lad.dsc.ufcg.edu.br)