uibk_703602-Compiler-Constr.../lab/symbol_table/symbol_table.c

59 lines
1.2 KiB
C
Raw Permalink Normal View History

2021-04-16 13:07:35 +02:00
#include <stdlib.h>
// ------------------------------------------------------------------- Type
enum mcc_type_kind {
MCC_TYPE_BOOL,
MCC_TYPE_INT,
MCC_TYPE_FLOAT,
MCC_TYPE_STRING,
MCC_TYPE_BOOL_ARRAY,
MCC_TYPE_INT_ARRAY,
MCC_TYPE_FLOAT_ARRAY,
MCC_TYPE_STRING_ARRAY,
};
struct mcc_type {
enum mcc_type_kind kind;
size_t array_size;
};
// ------------------------------------------------------------------- AST Declaration
enum mcc_ast_statement_type {
MCC_AST_STATEMENT_TYPE_DECLARATION,
};
struct mcc_ast_statement {
enum mcc_ast_statement_type type;
union {
// MCC_AST_STATEMENT_TYPE_DECLARATION
struct {
const char *identifier;
struct mcc_type identifier_type;
};
// ...
};
};
// ------------------------------------------------------------------- Symbol Table
struct mcc_symbol_table_entry {
const char *identifier;
struct mcc_ast_statement *declaration;
};
struct mcc_symbol_table {
struct mcc_symbol_table_entry *entries;
size_t entries_count;
size_t entries_capacity;
};
// Creation: Traverse the AST using the visitor pattern, looking for
// declarations. Each decleration yields a new entry in our symbol table.
// Supporting scopes:
// - Add scope enter/exit visitor callbacks
// - Add parent pointer to symbol table