diff --git a/include/tac_build.h b/include/tac_build.h new file mode 100644 index 0000000000000000000000000000000000000000..6c49d6ff3d6dd1da0b3ee817a746437338ab6afe --- /dev/null +++ b/include/tac_build.h @@ -0,0 +1,62 @@ +#ifndef MCC_TAC_BUILD_H +#define MCC_TAC_BUILD_H + +#include "ast.h" +#include <stdio.h> + + +enum mcc_tac_operation{ + + MCC_TAC_BOOL_LITERAL, + MCC_TAC_INT_LITERAL, + MCC_TAC_STRING_LITERAL, + MCC_TAC_FLOAT_LITERAL, + MCC_TAC_IDENTIFIER, + MCC_TAC_UNARY_EXPRESSION, + MCC_TAC_BINARY_EXPRESSION, + MCC_TAC_NEGATE_INT, + MCC_TAC_NEGATE_FLOAT, + MCC_TAC_NOT_BOOL, + MCC_TAC_PLUS_INT, + MCC_TAC_PLUS_FLOAT, + MCC_TAC_MINUS_INT, + MCC_TAC_MINUS_FLOAT, + MCC_TAC_MUL_INT, + MCC_TAC_MUL_FLOAT, + MCC_TAC_DIV_INT, + MCC_TAC_DIV_FLOAT, + MCC_TAC_EQ, + MCC_TAC_NEQ, + MCC_TAC_GT, + MCC_TAC_LT, + MCC_TAC_LTEQ, + MCC_TAC_GTEQ, + MCC_TAC_LT_FLOAT, + MCC_TAC_LTEQ_FLOAT, + MCC_TAC_GT_FLOAT, + MCC_TAC_GTEQ_FLOAT, + MCC_TAC_EQ_FLOAT, + MCC_TAC_NEQ_FLOAT, + MCC_TAC_AND, + MCC_TAC_OR, + MCC_TAC_VARIABLE_DECLARATION, + MCC_TAC_VARIABLE_ASSIGNMENT, + MCC_TAC_JMP + +}; + +struct mcc_tac{ + + enum mcc_tac_operation tac_op; + char *arg1; + char *arg2; + char *result; + + struct mcc_tac *next; + struct mcc_tac *prev; + +}; + + + +#endif \ No newline at end of file diff --git a/src/tac_build.c b/src/tac_build.c new file mode 100644 index 0000000000000000000000000000000000000000..376a14e49b7675b1a48a5d29d0a2fae5be6753f1 --- /dev/null +++ b/src/tac_build.c @@ -0,0 +1,20 @@ +#include "mcc/tac_build.h" + + +struct mcc_tac *mcc_new_tac(enum mcc_tac_operation op, + struct mcc_tac *prev, + struct mcc_tac *next) +{ + struct mcc_tac *tac = malloc(sizeof(tac)); + + tac -> tac_op = op; + tac -> arg1 = NULL; + tac -> arg2 = NULL; + tac -> result = NULL; + + tac -> prev = prev; + tac -> next = next; + + return tac; + +} \ No newline at end of file