Escopo do Projeto
O que é o Mini C Compiler to Calango?
Este projeto é um compilador que traduz um subconjunto da linguagem C — chamado aqui de Mini C — para a linguagem de pseudocódigo Calango, utilizada na disciplina de Algoritmos e Programação de Computadores da UnB/FGA.
O compilador recebe um arquivo .c como entrada e produz como saída um programa equivalente em Calango, respeitando as construções suportadas pelo interpretador Calango.
Linguagens Envolvidas
Mini C (entrada)
Subconjunto da linguagem C com as seguintes características:
- Tipagem estática com quatro tipos primitivos:
int,float,char,bool - Estrutura obrigatória de programa: bloco
mainúnico - Declarações de variáveis apenas no início do bloco
- Estruturas de controle:
if/else,while,for,do-while - Entrada e saída via
printfescanf - Operadores aritméticos, relacionais e lógicos
Extensão: .c
Calango (saída)
Interpretador de pseudocódigo em português estruturado, desenvolvido na UnB. As principais correspondências entre Mini C e Calango são:
| Construção Mini C | Equivalente Calango |
|---|---|
int |
inteiro |
float |
real |
char |
caracter |
bool |
logico |
if (...) { } |
se (...) entao ... fimSe |
if (...) { } else { } |
se (...) entao ... senao ... fimSe |
while (...) { } |
enquanto (...) faca ... fimEnquanto |
for (init; cond; passo) { } |
para (...) faca ... fimPara |
do { } while (...); |
faca ... enquanto (...); |
printf(...) |
escreva(...) / escreval(...) |
scanf(...) |
leia(...) / leiaCaracter(...) |
&& |
e |
\|\| |
ou |
! |
nao |
% |
mod |
true |
VERDADEIRO |
false |
FALSO |
int main() { } |
algoritmo nome; principal ... fimPrincipal |
Obs.: como estamos fazendo uma transpilação entre linguagem C para Calango, o qual é interpretado na JVM, não há um arquivo de saída propriamente dito, mas sim um programa em Calango que pode ser executado no interpretador. Com isso, por votação na equipe, convencionamentos que o código gerado terá uma extensão .cal.
Extensão: .cal
O que é suportado
Tipos de dados
| Tipo Mini C | Descrição |
|---|---|
int |
Números inteiros |
float |
Números reais |
char |
Caractere simples |
bool |
Valor lógico (true / false) |
Declaração de variáveis
Declarações devem estar no início do bloco main, antes de qualquer instrução.
Estruturas de controle
// Condicional simples
if (x > 0) {
printf("positivo");
}
// Condicional composta
if (x > 0) {
printf("positivo");
} else {
printf("negativo");
}
// Enquanto
while (x < 10) {
x = x + 1;
}
// Para
for (i = 0; i < 10; i = i + 1) {
printf("%d", i);
}
// Faca-enquanto
do {
x = x + 1;
} while (x < 10);
Operadores
| Categoria | Operadores |
|---|---|
| Aritméticos | +, -, *, /, % |
| Relacionais | ==, !=, <, >, <=, >= |
| Lógicos | &&, \|\|, ! |
| Atribuição | = |
Entrada e saída
Literais
| Tipo | Exemplos |
|---|---|
| Inteiro | 0, 42, 100 |
| Real | 3.14, 0.5, 100.0 |
| Caractere | 'a', '\n', '\\' |
| String | "ola mundo", "valor: " |
| Booleano | true, false |
Comentários
O que NÃO é suportado
As construções abaixo estão fora do escopo desta versão do compilador. O uso de qualquer uma delas resultará em erro léxico ou sintático com mensagem informativa.
| Construção | Exemplo | Motivo |
|---|---|---|
Funções além do main |
int soma(int a, int b) |
Sem equivalente direto no Calango dentro do prazo |
return |
return x; |
Sem funções definidas pelo usuário |
void |
void foo() |
Sem funções definidas pelo usuário |
| Arrays | int v[10]; |
Complexidade adicional em todas as fases |
| Cast explícito | (int) x |
Sem equivalente no Calango |
| Atribuição composta | x += 1; |
Sem equivalente no Calango; use x = x + 1 |
| Incremento/decremento | x++;, x-- |
Sem equivalente no Calango; use x = x + 1 |
| Operadores bitwise | x & y, x \| y, x ^ y |
Sem equivalente no Calango |
| Operador ternário | x > 0 ? 1 : 0 |
Sem equivalente no Calango |
| Ponteiros | int *p, &x |
Calango não possui ponteiros |
Fases do Compilador
O projeto é desenvolvido incrementalmente ao longo do semestre, seguindo as fases clássicas de um compilador:
| Fase | Descrição | Ferramenta | Status |
|---|---|---|---|
| Análise Léxica | Identificação de tokens | Flex | ✅ Concluída |
| Análise Sintática | Validação da estrutura gramatical | Bison | ✅ Concluída |
| Análise Semântica | Verificação de tipos e escopo | C | 🔄 Em desenvolvimento |
| Geração de Código | Tradução para Calango | C | ⬜ Pendente |
Histórico de Versões
| Versão | Descrição | Data | Responsável |
|---|---|---|---|
| 0.1 | Criação da página de escopo do projeto | 11/04/2026 | @Luiz Faria, @João Pedro, @Rivaldâvio |