Micro C Compiler - MCC
Loading...
Searching...
No Matches
ir.h File Reference

definições das estruturas de dados para a representação intermediária (ir). More...

#include "symbol_table.h"

Classes

struct  IROperand
 estrutura para um operando. More...
 
struct  IR_Instruction
 estrutura para uma única instrução da nossa ir. More...
 

Typedefs

typedef struct IR_Instruction IR_Instruction
 estrutura para uma única instrução da nossa ir.
 

Enumerations

enum  IROpcode {
  IR_ADD , IR_SUB , IR_MUL , IR_DIV ,
  IR_MOD , IR_EQ , IR_NEQ , IR_LT ,
  IR_LEQ , IR_GT , IR_GEQ , IR_AND ,
  IR_OR , IR_NEG , IR_NOT , IR_ASSIGN ,
  IR_STORE , IR_LOAD , IR_LABEL , IR_GOTO ,
  IR_IF_FALSE , IR_PARAM , IR_CALL , IR_RETURN ,
  IR_PRINT_INT , IR_PRINT_CHAR , IR_PRINT_STRING
}
 enumeração de todos os opcodes possíveis na nossa ir. More...
 
enum  OperandType {
  OPERAND_EMPTY , OPERAND_SYMBOL , OPERAND_TEMP , OPERAND_CONST ,
  OPERAND_STRING_LBL , OPERAND_LABEL
}
 enumeração dos tipos de operandos. More...
 

Functions

void liberar_ir (IR_Instruction *ir_head)
 libera toda a memória alocada por uma lista de instruções da ir.
 

Detailed Description

definições das estruturas de dados para a representação intermediária (ir).

este arquivo define as estruturas para o código de três endereços (tac), que serve como uma ponte de alto nível e independente de máquina entre o front-end e o back-end gerador de assembly.

Typedef Documentation

◆ IR_Instruction

estrutura para uma única instrução da nossa ir.

Enumeration Type Documentation

◆ IROpcode

enum IROpcode

enumeração de todos os opcodes possíveis na nossa ir.

Enumerator
IR_ADD 

Operador de adição.

IR_SUB 

Operador de subtração.

IR_MUL 

Operador de multiplicação.

IR_DIV 

Operador de divisão.

IR_MOD 

Operador de módulo (resto).

IR_EQ 

Operador de igualdade (==).

IR_NEQ 

Operador de desigualdade (!=).

IR_LT 

Operador de menor que (<).

IR_LEQ 

Operador de menor ou igual (<=).

IR_GT 

Operador de maior que (>).

IR_GEQ 

Operador de maior ou igual (>=).

IR_AND 

Operador lógico AND (&&).

IR_OR 

Operador lógico OR (||).

IR_NEG 

Negação aritmética (ex: -x).

IR_NOT 

Negação lógica (ex: !x).

IR_ASSIGN 

Atribuição (resultado = arg1).

IR_STORE 

Armazena em um array: resultado[arg2] = arg1.

IR_LOAD 

Carrega de um array: resultado = arg1[arg2].

IR_LABEL 

Define um rótulo: L1:.

IR_GOTO 

Pula incondicionalmente para um rótulo.

IR_IF_FALSE 

Se arg1 for falso (zero), pula para o rótulo em resultado.

IR_PARAM 

Define um parâmetro para uma chamada de função.

IR_CALL 

Chama uma função e armazena o retorno em resultado.

IR_RETURN 

Retorna de uma função.

IR_PRINT_INT 

Para imprimir um argumento do tipo int.

IR_PRINT_CHAR 

Para imprimir um argumento do tipo char.

IR_PRINT_STRING 

Para imprimir um argumento do tipo string literal.

◆ OperandType

enumeração dos tipos de operandos.

Enumerator
OPERAND_EMPTY 

Operando vazio (utilizado quando não há argumento).

OPERAND_SYMBOL 

Uma variável ou parâmetro (referência à tabela de símbolos).

OPERAND_TEMP 

Uma variável temporária gerada pelo compilador (t0, t1...).

OPERAND_CONST 

Uma constante inteira.

OPERAND_STRING_LBL 

Um rótulo para uma string literal (no .rodata).

OPERAND_LABEL 

Um rótulo para um ponto no código (L1, L2, main).

Function Documentation

◆ liberar_ir()

void liberar_ir ( IR_Instruction ir_head)

libera toda a memória alocada por uma lista de instruções da ir.

Parameters
ir_headponteiro para a primeira instrução da lista.

percorre a lista encadeada de instruções, liberando cada operando, os dados internos (como nomes de labels) e a própria instrução, evitando vazamentos de memória.

Parameters
ir_headponteiro para a primeira instrução da lista.