From 6ada416e01aa358527b243236eae560399b7d84b Mon Sep 17 00:00:00 2001 From: c+1 Date: Mon, 15 May 2023 17:50:11 -0400 Subject: augh --- src/main.c | 3 ++- src/parser.c | 27 +++++++++++++++++++++++---- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/main.c b/src/main.c index 33be891..5d5b69c 100644 --- a/src/main.c +++ b/src/main.c @@ -12,7 +12,7 @@ int main(int argc, char* argv[]) { long fsource_size; char *source; - fsource = fopen ("examples/hello.halk", "rb"); + fsource = fopen ("examples/simple.halk", "rb"); if (!fsource) { log_err("Source file not found"); exit(1); @@ -49,6 +49,7 @@ int main(int argc, char* argv[]) { log_inf("Tree root created"); printf("TYPE: [%d]\n", tree->type); + printf("SIZE: [%d]\n", tree->data.subtree.size); fclose(fsource); diff --git a/src/parser.c b/src/parser.c index 01b252c..0e6a015 100644 --- a/src/parser.c +++ b/src/parser.c @@ -34,7 +34,7 @@ tree_t* parser_parse(parser_t* parser) { } tree_t* parser_parse_token_id(parser_t* parser) { - if (strcmp(parser->token->value, "var")) { + if (strcmp(parser->token->value, "let")) { return parser_parse_var(parser); } else { // if id not recognized, check for variables under that name return parser_parse_var_def(parser); @@ -49,7 +49,7 @@ tree_t* parser_parse_chunk(parser_t* parser) { break; } default: { - log_dbg("Skiping non-keyword token"); + log_dbg("Skipping non-keyword token"); lexer_next(parser->lexer); break; } @@ -80,7 +80,18 @@ tree_t* parser_parse_chunks(parser_t* parser) { return subtree; } -tree_t* parser_parse_expr(parser_t* parser) {}; +tree_t* parser_parse_expr(parser_t* parser) { + switch (parser->token->type) { + case TOKEN_STR: + parser_parse_str(parser); + break; + + default: + log_war("Skipping unknown token"); + lexer_next(parser->lexer); + + } +}; tree_t* parser_parse_fac(parser_t* parser) {}; @@ -129,7 +140,15 @@ tree_t* parser_parse_var_def(parser_t* parser) { return var_def; }; -tree_t* parser_parse_str(parser_t* parser) {}; +tree_t* parser_parse_str(parser_t* parser) { + log_dbg("Entered str"); + tree_t* str = tree_init(TREE_STR); + str->data.str.val = parser->token->value; + + parser_check_expect(parser, TOKEN_STR); + + return str; +}; tree_t* parser_parse_keyword(parser_t* parser) { if (strcmp(parser->token->value, "let")) { -- cgit v1.2.3