diff options
Diffstat (limited to 'src/parser.c')
-rw-r--r-- | src/parser.c | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/src/parser.c b/src/parser.c new file mode 100644 index 0000000..35a4abb --- /dev/null +++ b/src/parser.c @@ -0,0 +1,39 @@ +#include "../include/parser.h" +#include <stdio.h> + +typedef struct { + TslTokenizer tokenizer; +} TslParser; + +static void tsl_parser_init(TslParser *self, const char *code, size_t code_size) { + tsl_tokenizer_init(&self->tokenizer, code, code_size); +} + +static int tsl_parser_parse_rhs(TslParser *self) { + return 0; +} + +static int tsl_parser_parse(TslParser *self) { + for(;;) { + TslToken token = tsl_tokenizer_next(&self->tokenizer); + if(token == TSL_TOKEN_IDENTIFIER) { + TslStringView identifier = self->tokenizer.identifier; + if(!tsl_tokenizer_accept(&self->tokenizer, TSL_TOKEN_EQUAL)) { + return -1; + } + tsl_parser_parse_rhs(self); + } else if(token == TSL_TOKEN_END_OF_FILE) { + break; + } else { + fprintf(stderr, "Error: Expected identifier, got TODO\n"); + return -1; + } + } + return 0; +} + +int tsl_parse(const char *code, size_t code_size) { + TslParser parser; + tsl_parser_init(&parser, code, code_size); + return tsl_parser_parse(&parser); +} |