Lines Matching refs:parser

24 	parser_t	*parser;
43 token_init(token_t *token, parser_t *parser, token_type_t token_type,
45 token->parser = parser;
55 if (!token->parser->verbose) {
71 &token->parser->buf[token->pos], token->len);
76 parser_init(parser_t *parser, bool verbose) {
77 parser->verbose = verbose;
78 parser->buf = NULL;
79 parser->len = 0;
80 parser->pos = 0;
81 parser->line = 1;
82 parser->col = 0;
86 parser_fini(parser_t *parser) {
87 if (parser->buf != NULL) {
88 dallocx(parser->buf, MALLOCX_TCACHE_NONE);
93 parser_append(parser_t *parser, const char *str) {
95 char *buf = (parser->buf == NULL) ? mallocx(len + 1,
96 MALLOCX_TCACHE_NONE) : rallocx(parser->buf, parser->len + len + 1,
101 memcpy(&buf[parser->len], str, len + 1);
102 parser->buf = buf;
103 parser->len += len;
108 parser_tokenize(parser_t *parser) {
139 assert_zu_le(parser->pos, parser->len,
143 char c = parser->buf[parser->pos];
147 token_pos = parser->pos;
148 token_line = parser->line;
149 token_col = parser->col;
197 token_init(&parser->token, parser,
198 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1
204 token_init(&parser->token, parser,
205 TOKEN_TYPE_EOI, token_pos, parser->pos -
215 token_init(&parser->token, parser,
216 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1
227 token_init(&parser->token, parser,
228 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1
239 token_init(&parser->token, parser,
240 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1
253 token_init(&parser->token, parser,
254 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1
258 token_init(&parser->token, parser, TOKEN_TYPE_NULL,
259 token_pos, parser->pos - token_pos, token_line,
269 token_init(&parser->token, parser,
270 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1
281 token_init(&parser->token, parser,
282 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1
293 token_init(&parser->token, parser,
294 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1
305 token_init(&parser->token, parser,
306 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1
319 token_init(&parser->token, parser,
320 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1
324 token_init(&parser->token, parser,
325 TOKEN_TYPE_FALSE, token_pos, parser->pos -
335 token_init(&parser->token, parser,
336 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1
347 token_init(&parser->token, parser,
348 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1
359 token_init(&parser->token, parser,
360 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1
373 token_init(&parser->token, parser,
374 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1
378 token_init(&parser->token, parser, TOKEN_TYPE_TRUE,
379 token_pos, parser->pos - token_pos, token_line,
384 token_init(&parser->token, parser, TOKEN_TYPE_LBRACKET,
385 token_pos, parser->pos - token_pos, token_line,
390 token_init(&parser->token, parser, TOKEN_TYPE_RBRACKET,
391 token_pos, parser->pos - token_pos, token_line,
396 token_init(&parser->token, parser, TOKEN_TYPE_LBRACE,
397 token_pos, parser->pos - token_pos, token_line,
402 token_init(&parser->token, parser, TOKEN_TYPE_RBRACE,
403 token_pos, parser->pos - token_pos, token_line,
408 token_init(&parser->token, parser, TOKEN_TYPE_COLON,
409 token_pos, parser->pos - token_pos, token_line,
414 token_init(&parser->token, parser, TOKEN_TYPE_COMMA,
415 token_pos, parser->pos - token_pos, token_line,
434 token_init(&parser->token, parser,
435 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1
452 token_init(&parser->token, parser,
453 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1
469 token_init(&parser->token, parser,
470 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1
486 token_init(&parser->token, parser,
487 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1
503 token_init(&parser->token, parser,
504 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1
520 token_init(&parser->token, parser,
521 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1
527 token_init(&parser->token, parser, TOKEN_TYPE_STRING,
528 token_pos, parser->pos - token_pos, token_line,
542 token_init(&parser->token, parser,
543 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1
554 token_init(&parser->token, parser,
555 TOKEN_TYPE_NUMBER, token_pos, parser->pos -
570 token_init(&parser->token, parser,
571 TOKEN_TYPE_NUMBER, token_pos, parser->pos -
584 token_init(&parser->token, parser,
585 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1
599 token_init(&parser->token, parser,
600 TOKEN_TYPE_NUMBER, token_pos, parser->pos -
616 token_init(&parser->token, parser,
617 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1
629 token_init(&parser->token, parser,
630 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1
641 token_init(&parser->token, parser,
642 TOKEN_TYPE_NUMBER, token_pos, parser->pos -
654 parser->line++;
655 parser->col = 0;
657 parser->col++;
659 parser->pos++;
665 static bool parser_parse_array(parser_t *parser);
666 static bool parser_parse_object(parser_t *parser);
669 parser_parse_value(parser_t *parser) {
670 switch (parser->token.token_type) {
678 return parser_parse_object(parser);
680 return parser_parse_array(parser);
688 parser_parse_pair(parser_t *parser) {
689 assert_d_eq(parser->token.token_type, TOKEN_TYPE_STRING,
691 if (parser_tokenize(parser)) {
694 switch (parser->token.token_type) {
696 if (parser_tokenize(parser)) {
699 return parser_parse_value(parser);
706 parser_parse_values(parser_t *parser) {
707 if (parser_parse_value(parser)) {
712 if (parser_tokenize(parser)) {
715 switch (parser->token.token_type) {
717 if (parser_tokenize(parser)) {
720 if (parser_parse_value(parser)) {
733 parser_parse_array(parser_t *parser) {
734 assert_d_eq(parser->token.token_type, TOKEN_TYPE_LBRACKET,
736 if (parser_tokenize(parser)) {
739 switch (parser->token.token_type) {
743 return parser_parse_values(parser);
749 parser_parse_pairs(parser_t *parser) {
750 assert_d_eq(parser->token.token_type, TOKEN_TYPE_STRING,
752 if (parser_parse_pair(parser)) {
757 if (parser_tokenize(parser)) {
760 switch (parser->token.token_type) {
762 if (parser_tokenize(parser)) {
765 switch (parser->token.token_type) {
767 if (parser_parse_pair(parser)) {
784 parser_parse_object(parser_t *parser) {
785 assert_d_eq(parser->token.token_type, TOKEN_TYPE_LBRACE,
787 if (parser_tokenize(parser)) {
790 switch (parser->token.token_type) {
792 return parser_parse_pairs(parser);
802 parser_parse(parser_t *parser) {
803 if (parser_tokenize(parser)) {
806 if (parser_parse_value(parser)) {
810 if (parser_tokenize(parser)) {
813 switch (parser->token.token_type) {
822 token_error(&parser->token);
900 parser_t parser;
901 parser_init(&parser, false);
902 assert_false(parser_append(&parser, input),
904 assert_true(parser_parse(&parser),
906 parser_fini(&parser);
911 parser_t parser;
912 parser_init(&parser, true);
913 assert_false(parser_append(&parser, input),
915 assert_false(parser_parse(&parser),
917 parser_fini(&parser);
924 parser_t *parser = (parser_t *)opaque;
925 if (parser_append(parser, str)) {
982 parser_t parser;
984 parser_init(&parser, true);
985 malloc_stats_print(write_cb, (void *)&parser, opts[j]);
986 assert_false(parser_parse(&parser),
988 parser_fini(&parser);