Add symbol table lab notes
This commit is contained in:
parent
26c6f72662
commit
9d2386b339
13
lab/.clang-format
Normal file
13
lab/.clang-format
Normal file
@ -0,0 +1,13 @@
|
||||
---
|
||||
BasedOnStyle: LLVM
|
||||
ColumnLimit: 120
|
||||
IndentWidth: 8
|
||||
UseTab: ForIndentation
|
||||
BreakBeforeBraces: Linux
|
||||
|
||||
AlignEscapedNewlines: DontAlign
|
||||
AllowShortFunctionsOnASingleLine: Empty
|
||||
AllowShortIfStatementsOnASingleLine: false
|
||||
BinPackParameters: false
|
||||
IndentCaseLabels: false
|
||||
...
|
58
lab/symbol_table.c
Normal file
58
lab/symbol_table.c
Normal file
@ -0,0 +1,58 @@
|
||||
#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
|
Loading…
Reference in New Issue
Block a user