diff options
-rw-r--r-- | include/tokenizer.h | 4 | ||||
-rw-r--r-- | src/parser.c | 6 | ||||
-rw-r--r-- | src/tokenizer.c | 6 |
3 files changed, 14 insertions, 2 deletions
diff --git a/include/tokenizer.h b/include/tokenizer.h index b4c9bfe..fcb9721 100644 --- a/include/tokenizer.h +++ b/include/tokenizer.h @@ -21,7 +21,9 @@ typedef enum { TSL_TOKEN_LBRACE, TSL_TOKEN_RBRACE, TSL_TOKEN_LBRACKET, - TSL_TOKEN_RBRACKET + TSL_TOKEN_RBRACKET, + TSL_TOKEN_COLON, + TSL_TOKEN_COMMA } TslToken; typedef struct { diff --git a/src/parser.c b/src/parser.c index 5e07f0e..3f9c030 100644 --- a/src/parser.c +++ b/src/parser.c @@ -5,6 +5,8 @@ typedef struct { TslTokenizer tokenizer; } TslParser; +static int tsl_parser_parse_rhs(TslParser *self); + static void tsl_parser_init(TslParser *self, const char *code, size_t code_size) { tsl_tokenizer_init(&self->tokenizer, code, code_size); } @@ -13,6 +15,8 @@ static int tsl_parser_parse_map(TslParser *self) { #define parse_map_element_separator \ if(!tsl_tokenizer_accept(&self->tokenizer, TSL_TOKEN_COLON)) \ return -1; \ + if(tsl_parser_parse_rhs(self) != 0) \ + return -1; \ token = tsl_tokenizer_next(&self->tokenizer); \ if(token == TSL_TOKEN_COMMA) { \ continue; \ @@ -85,7 +89,7 @@ static int tsl_parser_parse_list(TslParser *self) { } } -static int tsl_parser_parse_rhs(TslParser *self) { +int tsl_parser_parse_rhs(TslParser *self) { TslToken token = tsl_tokenizer_next(&self->tokenizer); if(token == TSL_TOKEN_NUM) { printf("rhs num: %ld\n", self->tokenizer.number_value); diff --git a/src/tokenizer.c b/src/tokenizer.c index 99ffce5..b310aae 100644 --- a/src/tokenizer.c +++ b/src/tokenizer.c @@ -183,6 +183,12 @@ TslToken tsl_tokenizer_next(TslTokenizer *self) { } else if(c == ']') { ++self->code_index; return TSL_TOKEN_RBRACKET; + } else if(c == ',') { + ++self->code_index; + return TSL_TOKEN_COMMA; + } else if(c == ':') { + ++self->code_index; + return TSL_TOKEN_COLON; } else if(c == '\0') { return TSL_TOKEN_END_OF_FILE; } else { |