|
Micro C Compiler - MCC
|
implementação do gerador de código intermediário. More...
Functions | |
| static IROperand * | criar_operando (OperandType type) |
| aloca e cria um operando genérico. | |
| static IROperand * | criar_operando_temporario () |
| cria um novo operando para uma variável temporária. | |
| static IROperand * | criar_operando_label_novo () |
| cria um novo operando para um rótulo gerado automaticamente (L0, L1...). | |
| static IROperand * | criar_operando_label_nome (const char *nome) |
| cria um novo operando para um rótulo com nome específico (main, soma...). | |
| static void | emitir (IROpcode op, IROperand *res, IROperand *arg1, IROperand *arg2) |
| cria e anexa uma nova instrução à lista de ir. | |
| static void | gerar_ir_no (ASTNode *no, PilhaTabelasSimbolos *pilha) |
| função recursiva principal que percorre a ast e gera a ir para instruções. | |
| static IROperand * | gerar_ir_expr (ASTNode *no, PilhaTabelasSimbolos *pilha) |
| função recursiva que percorre a ast e gera a ir para nós de expressão. | |
| static IROperand * | gerar_ir_call (ASTNode *no, PilhaTabelasSimbolos *pilha) |
| função auxiliar para gerar código para chamadas de função. | |
| static TokenType | get_expr_static_type (ASTNode *expr_node, PilhaTabelasSimbolos *pilha) |
| Retorna o tipo estático de um nó de expressão. | |
| static IROperand * | copiar_operando (IROperand *op) |
| cria uma cópia de um operando. | |
| IR_Instruction * | gerar_codigo_intermediario (ASTNode *raiz, PilhaTabelasSimbolos *pilha) |
| função pública que inicia a geração de código intermediário. | |
Variables | |
| static int | temp_counter = 0 |
| Contador global para gerar identificadores temporários únicos (t0, t1...). | |
| static int | label_counter = 0 |
| Contador global para gerar rótulos de desvio únicos (L0, L1...). | |
| static IR_Instruction * | ir_list_head = NULL |
| Ponteiro para o início da lista encadeada de instruções da IR. | |
| static IR_Instruction * | ir_list_tail = NULL |
| Ponteiro para o final da lista encadeada da IR (para emissão rápida). | |
implementação do gerador de código intermediário.
este módulo percorre a árvore sintática abstrata (ast) e a traduz para uma representação intermediária linear (ir) em formato de código de três endereços.
|
static |
aloca e cria um operando genérico.
|
static |
cria um novo operando para um rótulo com nome específico (main, soma...).
|
static |
cria um novo operando para um rótulo gerado automaticamente (L0, L1...).
|
static |
cria um novo operando para uma variável temporária.
cria e anexa uma nova instrução à lista de ir.
*
| op | O opcode da instrução. |
| res | O operando de resultado. |
| arg1 | O primeiro argumento. |
| arg2 | O segundo argumento. |
| IR_Instruction * gerar_codigo_intermediario | ( | ASTNode * | raiz, |
| PilhaTabelasSimbolos * | pilha | ||
| ) |
função pública que inicia a geração de código intermediário.
função principal que gera a lista de instruções da ir a partir da ast.
|
static |
|
static |
função recursiva que percorre a ast e gera a ir para nós de expressão.
*
Responsável por nós que calculam um valor (ex: NODE_BINARY_OP, NODE_CALL).
| no | O nó da AST de expressão. |
| pilha | A pilha de tabelas de símbolos. |
|
static |
função recursiva principal que percorre a ast e gera a ir para instruções.
*
Responsável por nós que representam ações e fluxo de controle (ex: NODE_IF, NODE_ASSIGN, NODE_RETURN).
| no | O nó da AST de instrução. |
| pilha | A pilha de tabelas de símbolos. |
|
static |
Retorna o tipo estático de um nó de expressão.
Esta é uma versão simplificada do analisador semântico (get_expression_type).
| expr_node | O nó da AST a ser avaliado. |
| pilha | A pilha de tabelas de símbolos para consulta. |
|
static |
Ponteiro para o início da lista encadeada de instruções da IR.
|
static |
Ponteiro para o final da lista encadeada da IR (para emissão rápida).
|
static |
Contador global para gerar rótulos de desvio únicos (L0, L1...).
|
static |
Contador global para gerar identificadores temporários únicos (t0, t1...).