FUNCTION PARSER FINALLY IMPLEMENTED
This commit is contained in:
@@ -9,7 +9,8 @@ int main(int argc, char** argv){
|
|||||||
Token tk = tokenize_all("fn add(x: int, y: int) int {\n let z = x+y; return z;\n }");
|
Token tk = tokenize_all("fn add(x: int, y: int) int {\n let z = x+y; return z;\n }");
|
||||||
size_t i=0;
|
size_t i=0;
|
||||||
|
|
||||||
Token final = {0};
|
Block final = {0};
|
||||||
|
block_init(&final, 9191);
|
||||||
|
|
||||||
SymbolTable tb = {0};
|
SymbolTable tb = {0};
|
||||||
symbol_table_init(&tb, 1212);
|
symbol_table_init(&tb, 1212);
|
||||||
@@ -23,7 +24,7 @@ int main(int argc, char** argv){
|
|||||||
while (i<tk.size && tk.type[i] != TOKEN_EOF){
|
while (i<tk.size && tk.type[i] != TOKEN_EOF){
|
||||||
skip_space(&tk, &i);
|
skip_space(&tk, &i);
|
||||||
if (tk.type[i] == TOKEN_FN){
|
if (tk.type[i] == TOKEN_FN){
|
||||||
final = parse_func_def(&tk, &i, &tb);
|
final = *parse_func_def(&tk, &i, &tb);
|
||||||
} else break;
|
} else break;
|
||||||
}
|
}
|
||||||
asm("int3");
|
asm("int3");
|
||||||
|
|||||||
18
src/parser.h
18
src/parser.h
@@ -61,11 +61,18 @@ typedef struct {
|
|||||||
size_t capacity;
|
size_t capacity;
|
||||||
} Block;
|
} Block;
|
||||||
|
|
||||||
|
void block_init(Block *b, size_t initial_cap){
|
||||||
|
b->statements = malloc(sizeof(Token) * initial_cap);
|
||||||
|
b->capacity = initial_cap;
|
||||||
|
b->size = 0;
|
||||||
|
}
|
||||||
|
|
||||||
void block_append(Block *b, Token t){
|
void block_append(Block *b, Token t){
|
||||||
if (b->capacity == 0) {
|
// if (b->capacity == 0) {
|
||||||
b->capacity = 192;
|
// b->capacity = 192;
|
||||||
b = (Block*)malloc(sizeof(Token)*b->capacity);
|
// b->size = 0;
|
||||||
}
|
// b->statements = (Token*)malloc(sizeof(Token)*b->capacity);
|
||||||
|
// }
|
||||||
if (b->size >= b->capacity) {
|
if (b->size >= b->capacity) {
|
||||||
b->capacity *=2;
|
b->capacity *=2;
|
||||||
b = (Block*)realloc(b, sizeof(Token)*b->capacity);
|
b = (Block*)realloc(b, sizeof(Token)*b->capacity);
|
||||||
@@ -392,7 +399,8 @@ Block *parse_func_def(Token *inp, size_t *idx, SymbolTable *sym) {
|
|||||||
(*idx)++;
|
(*idx)++;
|
||||||
skip_space(inp, idx);
|
skip_space(inp, idx);
|
||||||
|
|
||||||
Block *block = {0};
|
Block *block = (Block*)malloc(sizeof(Block));
|
||||||
|
block_init(block, 55);
|
||||||
Token statement = {0};
|
Token statement = {0};
|
||||||
|
|
||||||
while (inp->type[*idx] != TOKEN_RCURLY && inp->type[*idx] != TOKEN_EOF) {
|
while (inp->type[*idx] != TOKEN_RCURLY && inp->type[*idx] != TOKEN_EOF) {
|
||||||
|
|||||||
Reference in New Issue
Block a user