forked from kitaka/lexer
/
symbol_table.h
38 lines (30 loc) · 937 Bytes
/
symbol_table.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#ifndef __SYMBOL_TABLE_HEADER__
#define __SYMBOL_TABLE_HEADER__
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define STRING_VALUE 1
struct key_val {
char *key;
int val_type;
union {
char *string_val;
int integer_val;
};
};
struct symbol_table {
int scope;
struct key_val *key_val;
struct symbol_table *next;
struct symbol_table *prev;
struct symbol_table *head;
};
struct symbol_table *symbol_table_init();
struct key_val *key_val_init();
void key_val_free(struct key_val *key_val);
int key_val_compare(struct key_val *keyval1, struct key_val *keyval2);
void symbol_table_free(struct symbol_table *symbol_table);
void symbol_table_insert(struct symbol_table *symbol_table, struct key_val *key_val);
struct symbol_table *symbol_table_find(struct symbol_table *symbol_table, char *key);
struct symbol_table *symbol_table_find_keyval(struct symbol_table *symbols, struct key_val *keyval);
#endif