Lines Matching refs:parser

22 	parser_t	*parser;
41 token_init(token_t *token, parser_t *parser, token_type_t token_type,
44 token->parser = parser;
55 if (!token->parser->verbose) {
70 write(STDERR_FILENO, &token->parser->buf[token->pos], token->len);
75 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)
88 if (parser->buf != NULL) {
89 dallocx(parser->buf, MALLOCX_TCACHE_NONE);
94 parser_append(parser_t *parser, const char *str)
97 char *buf = (parser->buf == NULL) ? mallocx(len + 1,
98 MALLOCX_TCACHE_NONE) : rallocx(parser->buf, parser->len + len + 1,
103 memcpy(&buf[parser->len], str, len + 1);
104 parser->buf = buf;
105 parser->len += len;
110 parser_tokenize(parser_t *parser)
140 assert_zu_le(parser->pos, parser->len,
144 char c = parser->buf[parser->pos];
148 token_pos = parser->pos;
149 token_line = parser->line;
150 token_col = parser->col;
198 token_init(&parser->token, parser,
199 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1
205 token_init(&parser->token, parser,
206 TOKEN_TYPE_EOI, token_pos, parser->pos -
216 token_init(&parser->token, parser,
217 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1
228 token_init(&parser->token, parser,
229 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1
240 token_init(&parser->token, parser,
241 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1
254 token_init(&parser->token, parser,
255 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1
259 token_init(&parser->token, parser, TOKEN_TYPE_NULL,
260 token_pos, parser->pos - token_pos, token_line,
270 token_init(&parser->token, parser,
271 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1
282 token_init(&parser->token, parser,
283 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1
294 token_init(&parser->token, parser,
295 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1
306 token_init(&parser->token, parser,
307 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1
320 token_init(&parser->token, parser,
321 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1
325 token_init(&parser->token, parser,
326 TOKEN_TYPE_FALSE, token_pos, parser->pos -
336 token_init(&parser->token, parser,
337 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1
348 token_init(&parser->token, parser,
349 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1
360 token_init(&parser->token, parser,
361 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1
374 token_init(&parser->token, parser,
375 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1
379 token_init(&parser->token, parser, TOKEN_TYPE_TRUE,
380 token_pos, parser->pos - token_pos, token_line,
385 token_init(&parser->token, parser, TOKEN_TYPE_LBRACKET,
386 token_pos, parser->pos - token_pos, token_line,
391 token_init(&parser->token, parser, TOKEN_TYPE_RBRACKET,
392 token_pos, parser->pos - token_pos, token_line,
397 token_init(&parser->token, parser, TOKEN_TYPE_LBRACE,
398 token_pos, parser->pos - token_pos, token_line,
403 token_init(&parser->token, parser, TOKEN_TYPE_RBRACE,
404 token_pos, parser->pos - token_pos, token_line,
409 token_init(&parser->token, parser, TOKEN_TYPE_COLON,
410 token_pos, parser->pos - token_pos, token_line,
415 token_init(&parser->token, parser, TOKEN_TYPE_COMMA,
416 token_pos, parser->pos - token_pos, token_line,
435 token_init(&parser->token, parser,
436 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1
453 token_init(&parser->token, parser,
454 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1
470 token_init(&parser->token, parser,
471 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1
487 token_init(&parser->token, parser,
488 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1
504 token_init(&parser->token, parser,
505 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1
521 token_init(&parser->token, parser,
522 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1
528 token_init(&parser->token, parser, TOKEN_TYPE_STRING,
529 token_pos, parser->pos - token_pos, token_line,
543 token_init(&parser->token, parser,
544 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1
555 token_init(&parser->token, parser,
556 TOKEN_TYPE_NUMBER, token_pos, parser->pos -
571 token_init(&parser->token, parser,
572 TOKEN_TYPE_NUMBER, token_pos, parser->pos -
585 token_init(&parser->token, parser,
586 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1
600 token_init(&parser->token, parser,
601 TOKEN_TYPE_NUMBER, token_pos, parser->pos -
617 token_init(&parser->token, parser,
618 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1
630 token_init(&parser->token, parser,
631 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1
642 token_init(&parser->token, parser,
643 TOKEN_TYPE_NUMBER, token_pos, parser->pos -
655 parser->line++;
656 parser->col = 0;
658 parser->col++;
660 parser->pos++;
666 static bool parser_parse_array(parser_t *parser);
667 static bool parser_parse_object(parser_t *parser);
670 parser_parse_value(parser_t *parser)
672 switch (parser->token.token_type) {
680 return parser_parse_object(parser);
682 return parser_parse_array(parser);
690 parser_parse_pair(parser_t *parser)
692 assert_d_eq(parser->token.token_type, TOKEN_TYPE_STRING,
694 if (parser_tokenize(parser)) {
697 switch (parser->token.token_type) {
699 if (parser_tokenize(parser)) {
702 return parser_parse_value(parser);
709 parser_parse_values(parser_t *parser)
711 if (parser_parse_value(parser)) {
716 if (parser_tokenize(parser)) {
719 switch (parser->token.token_type) {
721 if (parser_tokenize(parser)) {
724 if (parser_parse_value(parser)) {
737 parser_parse_array(parser_t *parser)
739 assert_d_eq(parser->token.token_type, TOKEN_TYPE_LBRACKET,
741 if (parser_tokenize(parser)) {
744 switch (parser->token.token_type) {
748 return parser_parse_values(parser);
754 parser_parse_pairs(parser_t *parser)
756 assert_d_eq(parser->token.token_type, TOKEN_TYPE_STRING,
758 if (parser_parse_pair(parser)) {
763 if (parser_tokenize(parser)) {
766 switch (parser->token.token_type) {
768 if (parser_tokenize(parser)) {
771 switch (parser->token.token_type) {
773 if (parser_parse_pair(parser)) {
790 parser_parse_object(parser_t *parser)
792 assert_d_eq(parser->token.token_type, TOKEN_TYPE_LBRACE,
794 if (parser_tokenize(parser)) {
797 switch (parser->token.token_type) {
799 return parser_parse_pairs(parser);
809 parser_parse(parser_t *parser)
811 if (parser_tokenize(parser)) {
814 if (parser_parse_value(parser)) {
818 if (parser_tokenize(parser)) {
821 switch (parser->token.token_type) {
830 token_error(&parser->token);
909 parser_t parser;
910 parser_init(&parser, false);
911 assert_false(parser_append(&parser, input),
913 assert_true(parser_parse(&parser),
915 parser_fini(&parser);
920 parser_t parser;
921 parser_init(&parser, true);
922 assert_false(parser_append(&parser, input),
924 assert_false(parser_parse(&parser),
926 parser_fini(&parser);
934 parser_t *parser = (parser_t *)opaque;
935 if (parser_append(parser, str)) {
988 parser_t parser;
990 parser_init(&parser, true);
991 malloc_stats_print(write_cb, (void *)&parser, opts[j]);
992 assert_false(parser_parse(&parser),
994 parser_fini(&parser);