diff options
author | dec05eba <dec05eba@protonmail.com> | 2020-01-14 07:54:59 +0100 |
---|---|---|
committer | dec05eba <dec05eba@protonmail.com> | 2020-01-14 07:54:59 +0100 |
commit | f5fc07765303055922e1dfcc35f2f2f620c1e66b (patch) | |
tree | 99c82f033e81948f76d9367531d51a0955cb047f /src/parser.c | |
parent | e27bd78c8211532bf0d39d87d2051222f7e86e26 (diff) |
add parser...
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); +} |