This function implements a scanner for JSON. It is specified using regular expressions that try to follow RFC 7159 and ECMA-404 as close as possible. These regular expressions are then translated into a deterministic finite automaton (DFA) by the tool re2c http://re2c.org. As a result, the translated code for this function consists of a large block of code with goto jumps.
3510 unsigned int yyaccept = 0;
3511 static const unsigned char yybm[] =
3513 0, 64, 64, 64, 64, 64, 64, 64,
3514 64, 96, 96, 64, 64, 96, 64, 64,
3515 64, 64, 64, 64, 64, 64, 64, 64,
3516 64, 64, 64, 64, 64, 64, 64, 64,
3517 96, 64, 0, 64, 64, 64, 64, 64,
3518 64, 64, 64, 64, 64, 64, 64, 64,
3519 192, 192, 192, 192, 192, 192, 192, 192,
3520 192, 192, 64, 64, 64, 64, 64, 64,
3521 64, 64, 64, 64, 64, 64, 64, 64,
3522 64, 64, 64, 64, 64, 64, 64, 64,
3523 64, 64, 64, 64, 64, 64, 64, 64,
3524 64, 64, 64, 64, 0, 64, 64, 64,
3525 64, 64, 64, 64, 64, 64, 64, 64,
3526 64, 64, 64, 64, 64, 64, 64, 64,
3527 64, 64, 64, 64, 64, 64, 64, 64,
3528 64, 64, 64, 64, 64, 64, 64, 64,
3529 64, 64, 64, 64, 64, 64, 64, 64,
3530 64, 64, 64, 64, 64, 64, 64, 64,
3531 64, 64, 64, 64, 64, 64, 64, 64,
3532 64, 64, 64, 64, 64, 64, 64, 64,
3533 64, 64, 64, 64, 64, 64, 64, 64,
3534 64, 64, 64, 64, 64, 64, 64, 64,
3535 64, 64, 64, 64, 64, 64, 64, 64,
3536 64, 64, 64, 64, 64, 64, 64, 64,
3537 64, 64, 64, 64, 64, 64, 64, 64,
3538 64, 64, 64, 64, 64, 64, 64, 64,
3539 64, 64, 64, 64, 64, 64, 64, 64,
3540 64, 64, 64, 64, 64, 64, 64, 64,
3541 64, 64, 64, 64, 64, 64, 64, 64,
3542 64, 64, 64, 64, 64, 64, 64, 64,
3543 64, 64, 64, 64, 64, 64, 64, 64,
3544 64, 64, 64, 64, 64, 64, 64, 64,
3560 goto basic_json_parser_27;
3564 goto basic_json_parser_29;
3568 goto basic_json_parser_4;
3575 goto basic_json_parser_2;
3579 goto basic_json_parser_29;
3589 goto basic_json_parser_26;
3593 goto basic_json_parser_29;
3595 goto basic_json_parser_14;
3601 goto basic_json_parser_22;
3605 goto basic_json_parser_29;
3609 goto basic_json_parser_23;
3611 goto basic_json_parser_25;
3623 goto basic_json_parser_16;
3627 goto basic_json_parser_6;
3629 goto basic_json_parser_29;
3635 goto basic_json_parser_8;
3639 goto basic_json_parser_21;
3641 goto basic_json_parser_29;
3650 goto basic_json_parser_18;
3654 goto basic_json_parser_20;
3656 goto basic_json_parser_29;
3662 goto basic_json_parser_10;
3666 goto basic_json_parser_12;
3668 goto basic_json_parser_29;
3672 basic_json_parser_2:
3675 goto basic_json_parser_5;
3676 basic_json_parser_3:
3680 basic_json_parser_4:
3687 basic_json_parser_5:
3688 if (yybm[0 + yych] & 32)
3690 goto basic_json_parser_4;
3692 goto basic_json_parser_3;
3693 basic_json_parser_6:
3698 basic_json_parser_8:
3703 basic_json_parser_10:
3708 basic_json_parser_12:
3713 basic_json_parser_14:
3718 basic_json_parser_16:
3723 basic_json_parser_18:
3728 goto basic_json_parser_59;
3730 basic_json_parser_19:
3734 basic_json_parser_20:
3739 goto basic_json_parser_55;
3741 goto basic_json_parser_19;
3742 basic_json_parser_21:
3747 goto basic_json_parser_50;
3749 goto basic_json_parser_19;
3750 basic_json_parser_22:
3754 goto basic_json_parser_19;
3758 goto basic_json_parser_49;
3762 goto basic_json_parser_40;
3764 goto basic_json_parser_19;
3765 basic_json_parser_23:
3772 goto basic_json_parser_42;
3779 goto basic_json_parser_43;
3783 goto basic_json_parser_43;
3786 basic_json_parser_24:
3790 basic_json_parser_25:
3793 goto basic_json_parser_41;
3794 basic_json_parser_26:
3799 goto basic_json_parser_19;
3801 goto basic_json_parser_31;
3802 basic_json_parser_27:
3807 basic_json_parser_29:
3809 goto basic_json_parser_19;
3810 basic_json_parser_30:
3817 basic_json_parser_31:
3818 if (yybm[0 + yych] & 64)
3820 goto basic_json_parser_30;
3824 goto basic_json_parser_32;
3828 goto basic_json_parser_34;
3830 goto basic_json_parser_33;
3831 basic_json_parser_32:
3835 goto basic_json_parser_19;
3839 goto basic_json_parser_24;
3841 basic_json_parser_33:
3854 goto basic_json_parser_30;
3858 goto basic_json_parser_32;
3860 goto basic_json_parser_30;
3868 goto basic_json_parser_32;
3870 goto basic_json_parser_30;
3876 goto basic_json_parser_30;
3878 goto basic_json_parser_32;
3888 goto basic_json_parser_30;
3892 goto basic_json_parser_30;
3894 goto basic_json_parser_32;
3902 goto basic_json_parser_30;
3904 goto basic_json_parser_32;
3910 goto basic_json_parser_30;
3914 goto basic_json_parser_36;
3916 goto basic_json_parser_32;
3920 basic_json_parser_34:
3925 basic_json_parser_36:
3936 goto basic_json_parser_32;
3940 goto basic_json_parser_32;
3947 goto basic_json_parser_37;
3951 goto basic_json_parser_32;
3955 goto basic_json_parser_32;
3958 basic_json_parser_37:
3969 goto basic_json_parser_32;
3973 goto basic_json_parser_32;
3980 goto basic_json_parser_38;
3984 goto basic_json_parser_32;
3988 goto basic_json_parser_32;
3991 basic_json_parser_38:
4002 goto basic_json_parser_32;
4006 goto basic_json_parser_32;
4013 goto basic_json_parser_39;
4017 goto basic_json_parser_32;
4021 goto basic_json_parser_32;
4024 basic_json_parser_39:
4035 goto basic_json_parser_32;
4039 goto basic_json_parser_30;
4041 goto basic_json_parser_32;
4047 goto basic_json_parser_30;
4051 goto basic_json_parser_32;
4055 goto basic_json_parser_30;
4057 goto basic_json_parser_32;
4059 basic_json_parser_40:
4067 basic_json_parser_41:
4068 if (yybm[0 + yych] & 128)
4070 goto basic_json_parser_40;
4076 goto basic_json_parser_24;
4083 goto basic_json_parser_43;
4087 goto basic_json_parser_43;
4089 goto basic_json_parser_24;
4091 basic_json_parser_42:
4095 goto basic_json_parser_32;
4099 goto basic_json_parser_47;
4101 goto basic_json_parser_32;
4102 basic_json_parser_43:
4108 goto basic_json_parser_32;
4115 goto basic_json_parser_44;
4119 goto basic_json_parser_32;
4123 goto basic_json_parser_45;
4125 goto basic_json_parser_32;
4127 basic_json_parser_44:
4131 goto basic_json_parser_32;
4135 goto basic_json_parser_32;
4137 basic_json_parser_45:
4146 goto basic_json_parser_24;
4150 goto basic_json_parser_45;
4152 goto basic_json_parser_24;
4153 basic_json_parser_47:
4165 goto basic_json_parser_24;
4169 goto basic_json_parser_47;
4171 goto basic_json_parser_24;
4177 goto basic_json_parser_43;
4181 goto basic_json_parser_43;
4183 goto basic_json_parser_24;
4185 basic_json_parser_49:
4192 goto basic_json_parser_42;
4194 goto basic_json_parser_24;
4200 goto basic_json_parser_43;
4204 goto basic_json_parser_43;
4206 goto basic_json_parser_24;
4208 basic_json_parser_50:
4212 goto basic_json_parser_32;
4217 goto basic_json_parser_32;
4222 goto basic_json_parser_32;
4228 basic_json_parser_55:
4232 goto basic_json_parser_32;
4237 goto basic_json_parser_32;
4243 basic_json_parser_59:
4247 goto basic_json_parser_32;
4252 goto basic_json_parser_32;
the character for array begin "["
const lexer_char_t * m_marker
pointer for backtracking information
the "null" literal
the "false" literal
the character for object end "}"
indicating the end of the input buffer
a string - use get_string() for actual value
the "true" literal
const lexer_char_t * m_start
pointer to the beginning of the current symbol
the name separator ":"
void yyfill() noexcept
append data from the stream to the internal buffer
unsigned char lexer_char_t
the char type to use in the lexer
const lexer_char_t * m_cursor
pointer to the current symbol
token_type scan() noexcept
const lexer_char_t * m_limit
pointer to the end of the buffer
the character for array end "]"
a number - use get_number() for actual value
the character for object begin "{"
the value separator ","