More parsing of expressions

This commit is contained in:
Krzosa Karol
2022-05-06 21:58:09 +02:00
parent 76a8cc779c
commit 501e42be19
6 changed files with 661 additions and 267 deletions

View File

@@ -4,6 +4,7 @@ global Intern_String keyword_cast;
global Intern_String keyword_else;
global Intern_String keyword_size_type;
global Intern_String keyword_size_expr;
global Intern_String keyword_const;
global Intern_String keyword_typeof;
global Intern_String keyword_while;
global Intern_String keyword_switch;
@@ -14,6 +15,9 @@ global Intern_String keyword_union;
global U8 *first_keyword;
global U8 *last_keyword;
global Intern_String intern_void;
global Intern_String intern_int;
function void
init_default_keywords(Intern_Table *t){
keyword_if = intern_string(t, lit("if"));
@@ -25,6 +29,7 @@ init_default_keywords(Intern_Table *t){
keyword_size_type = intern_string(t, lit("size_type"));
keyword_size_expr = intern_string(t, lit("size_expr"));
keyword_typeof = intern_string(t, lit("typeof"));
keyword_const = intern_string(t, lit("const"));
keyword_while = intern_string(t, lit("while"));
keyword_switch = intern_string(t, lit("switch"));
keyword_case = intern_string(t, lit("case"));
@@ -33,6 +38,9 @@ init_default_keywords(Intern_Table *t){
keyword_union = intern_string(t, lit("union"));
last_keyword = keyword_union.s.str;
intern_void = intern_string(t, lit("void"));
intern_int = intern_string(t, lit("int"));
}
function B32
@@ -489,15 +497,32 @@ lex__stream(Token_Array *array, Lex_Stream *s){
}
}
function Token_Array
lex_stream(Arena *arena, String stream, String file){
function void
lex_add_stream(Token_Array *array, String stream, String file){
Lex_Stream s = {stream, 0, stream.str, file, 0};
lex__stream(array, &s);
}
function Token_Array
lex_make_token_array(Arena *arena){
Token_Array array = token_array_make(arena);
init_default_keywords(&array.interns);
lex__stream(&array, &s);
return array;
}
function Token_Array
lex_stream(Arena *arena, String stream, String file){
Token_Array array = lex_make_token_array(arena);
lex_add_stream(&array, stream, file);
return array;
}
function void
lex_restream(Token_Array *array, String stream, String file){
token_array_reset(array);
lex_add_stream(array, stream, file);
}
function void
lex_test(){
Arena *scratch = arena_begin_scratch();