Skip to content
Snippets Groups Projects
Commit f02f1c0d authored by Clemens Paumgarten's avatar Clemens Paumgarten
Browse files

Add array declaration

parent 8508888b
No related branches found
No related tags found
No related merge requests found
......@@ -7,4 +7,6 @@
int mcc_get_number_of_digits(int input);
char* mcc_ast_type_to_string_size(enum mcc_ast_data_type type);
#endif //MCC_UTILS_H
......@@ -279,7 +279,8 @@ void mcc_tac_parse_statement(struct mcc_ast_statement *statement, struct mcc_tac
}
break;
case MCC_AST_STATEMENT_TYPE_DECL: {
struct mcc_ast_literal *arr_literal = statement->declaration->arr_literal;
struct mcc_ast_declaration *declaration = statement -> declaration;
struct mcc_ast_literal *arr_literal = declaration->arr_literal;
// Add entry for array size
if(arr_literal != NULL) {
......@@ -287,7 +288,13 @@ void mcc_tac_parse_statement(struct mcc_ast_statement *statement, struct mcc_tac
char arg1[mcc_get_number_of_digits(arr_literal->i_value) + 2];
sprintf(arg1, "%d", arr_literal->i_value);
mcc_tac_create_and_add_new_entry(MCC_TAC_ARR_DECL, NULL, NULL, arg1, tac);
mcc_tac_create_and_add_new_entry(
MCC_TAC_ARR_DECL,
mcc_ast_type_to_string_size(declaration ->type),
NULL,
arg1,
tac
);
}
}
break;
......
......@@ -109,9 +109,13 @@ void mcc_tac_print(struct mcc_tac *tac, FILE *out)
case MCC_TAC_FLOAT_LITERAL:
case MCC_TAC_STRING:
case MCC_TAC_IDENTIFIER_STRING:
case MCC_TAC_STRING_LITERAL:
fprintf(out,"%s = %s (%s)\n", entry->result, entry->arg1, op_type);
break;
case MCC_TAC_STRING_LITERAL: {
if (entry -> arg2 != NULL) {
fprintf(out,"%s[%s] = %s (%s)\n", entry->result, entry->arg2, entry->arg1, op_type);
} else {
fprintf(out,"%s = %s (%s)\n", entry->result, entry->arg1, op_type);
}
} break;
// Unary
case MCC_TAC_MINUS_INT_UN:
......@@ -240,6 +244,9 @@ void mcc_tac_print(struct mcc_tac *tac, FILE *out)
case MCC_TAC_VARIABLE_DECLARATION:
fprintf(out,"declaration %s\n", entry->arg1);
break;
case MCC_TAC_ARR_DECL:
fprintf(out, "declaration array (%s) %s\n", entry -> arg1, entry -> result);
break;
case MCC_TAC_CALL:
fprintf(out,"call %s %s (%s)\n", entry->result, entry->arg1, op_type);
break;
......
#include "mcc/ast.h"
int mcc_get_number_of_digits(int input) {
int digits = 0;
......@@ -8,3 +10,19 @@ int mcc_get_number_of_digits(int input) {
return digits;
}
char* mcc_ast_type_to_string_size(enum mcc_ast_data_type type) {
switch(type) {
case MCC_AST_DATA_TYPE_FLOAT:
return "float";
case MCC_AST_DATA_TYPE_INT:
return "int";
case MCC_AST_DATA_TYPE_BOOL:
return "bool";
case MCC_AST_DATA_TYPE_STRING:
return "string";
default:
return "void";
}
}
\ No newline at end of file
int main() {
int a;
int b;
int[10] arr;
arr[0] = 1;
int max;
string s;
s = "test";
a = 2;
b = 5;
int c;
c = a + b;
if (a < b) {
max = b;
} else {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment