/* Generated by re2c 2.2 */ #line 1 "espurna\\ir_parse_simple.re" /* Part of the IR MODULE For more info: - https://re2c.org/ - https://re2c.org/manual/manual_c.html */ #pragma once // TODO: some sanity checks for 'valid' ranges of the parsed values, when state machine reaches individual value decoders? ParseResult parse(StringView view) { const char* YYCURSOR { view.begin() }; const char* YYLIMIT { view.end() }; const char* YYMARKER; const char *p0 = nullptr, *p1 = nullptr; const char *c0 = nullptr, *c1 = nullptr; const char *b0 = nullptr, *b1 = nullptr; const char *r0 = nullptr, *r1 = nullptr; const char *s0 = nullptr, *s1 = nullptr; const char *d0 = nullptr, *d1 = nullptr; ParseResult out; #line 33 "espurna\\ir_parse_simple.re.ipp" const char *yyt1 { nullptr }; const char *yyt2 { nullptr }; const char *yyt3 { nullptr }; const char *yyt4 { nullptr }; const char *yyt5 { nullptr }; const char *yyt6 { nullptr }; #line 29 "espurna\\ir_parse_simple.re" #line 43 "espurna\\ir_parse_simple.re.ipp" { char yych; unsigned int yyaccept = 0; yych = *YYCURSOR; switch (yych) { case '0' ... '9': yyt1 = YYCURSOR; goto yy4; default: if (YYLIMIT <= YYCURSOR) goto yy41; goto yy2; } yy2: ++YYCURSOR; yy3: #line 63 "espurna\\ir_parse_simple.re" { goto return_out; } #line 61 "espurna\\ir_parse_simple.re.ipp" yy4: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); switch (yych) { case '0' ... ':': goto yy6; default: goto yy3; } yy5: yych = *++YYCURSOR; yy6: switch (yych) { case '0' ... '9': goto yy5; case ':': goto yy8; default: goto yy7; } yy7: YYCURSOR = YYMARKER; switch (yyaccept) { case 0: goto yy3; case 1: goto yy16; case 2: goto yy22; default: goto yy28; } yy8: yych = *++YYCURSOR; switch (yych) { case '0' ... '9': case 'A' ... 'F': case 'a' ... 'f': yyt2 = YYCURSOR; goto yy9; default: goto yy7; } yy9: yych = *++YYCURSOR; switch (yych) { case '0' ... '9': case 'A' ... 'F': case 'a' ... 'f': goto yy10; default: goto yy7; } yy10: yych = *++YYCURSOR; switch (yych) { case '0' ... '9': case 'A' ... 'F': case 'a' ... 'f': goto yy11; case ':': goto yy12; default: goto yy7; } yy11: yych = *++YYCURSOR; switch (yych) { case '0' ... '9': case 'A' ... 'F': case 'a' ... 'f': goto yy13; case ':': goto yy12; default: goto yy7; } yy12: yych = *++YYCURSOR; switch (yych) { case '0' ... '9': yyt3 = YYCURSOR; goto yy14; default: goto yy7; } yy13: yych = *++YYCURSOR; switch (yych) { case '0' ... '9': case 'A' ... 'F': case 'a' ... 'f': goto yy17; case ':': goto yy12; default: goto yy7; } yy14: yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); switch (yych) { case '0' ... '9': goto yy14; case ':': goto yy18; default: goto yy16; } yy16: p0 = yyt1; c0 = yyt2; b0 = yyt3; p1 = yyt2 - 1; c1 = yyt3 - 1; b1 = YYCURSOR; #line 43 "espurna\\ir_parse_simple.re" { goto update_out; } #line 159 "espurna\\ir_parse_simple.re.ipp" yy17: yych = *++YYCURSOR; switch (yych) { case '0' ... '9': case 'A' ... 'F': case 'a' ... 'f': goto yy19; case ':': goto yy12; default: goto yy7; } yy18: yych = *++YYCURSOR; switch (yych) { case '0' ... '9': yyt4 = YYCURSOR; goto yy20; default: goto yy7; } yy19: yych = *++YYCURSOR; switch (yych) { case '0' ... '9': case 'A' ... 'F': case 'a' ... 'f': goto yy23; case ':': goto yy12; default: goto yy7; } yy20: yyaccept = 2; yych = *(YYMARKER = ++YYCURSOR); switch (yych) { case '0' ... '9': goto yy20; case ':': goto yy24; default: goto yy22; } yy22: p0 = yyt1; c0 = yyt2; b0 = yyt3; r0 = yyt4; p1 = yyt2 - 1; c1 = yyt3 - 1; b1 = yyt4 - 1; r1 = YYCURSOR; #line 48 "espurna\\ir_parse_simple.re" { goto update_out; } #line 205 "espurna\\ir_parse_simple.re.ipp" yy23: yych = *++YYCURSOR; switch (yych) { case '0' ... '9': case 'A' ... 'F': case 'a' ... 'f': goto yy25; case ':': goto yy12; default: goto yy7; } yy24: yych = *++YYCURSOR; switch (yych) { case '0' ... '9': yyt5 = YYCURSOR; goto yy26; default: goto yy7; } yy25: yych = *++YYCURSOR; switch (yych) { case '0' ... '9': case 'A' ... 'F': case 'a' ... 'f': goto yy29; case ':': goto yy12; default: goto yy7; } yy26: yyaccept = 3; yych = *(YYMARKER = ++YYCURSOR); switch (yych) { case '0' ... '9': goto yy26; case ':': goto yy30; default: goto yy28; } yy28: p0 = yyt1; c0 = yyt2; b0 = yyt3; r0 = yyt4; s0 = yyt5; p1 = yyt2 - 1; c1 = yyt3 - 1; b1 = yyt4 - 1; r1 = yyt5 - 1; s1 = YYCURSOR; #line 54 "espurna\\ir_parse_simple.re" { goto update_out; } #line 253 "espurna\\ir_parse_simple.re.ipp" yy29: yych = *++YYCURSOR; switch (yych) { case '0' ... '9': case 'A' ... 'F': case 'a' ... 'f': goto yy31; case ':': goto yy12; default: goto yy7; } yy30: yych = *++YYCURSOR; switch (yych) { case '0' ... '9': yyt6 = YYCURSOR; goto yy32; default: goto yy7; } yy31: yych = *++YYCURSOR; switch (yych) { case '0' ... '9': case 'A' ... 'F': case 'a' ... 'f': goto yy35; case ':': goto yy12; default: goto yy7; } yy32: yych = *++YYCURSOR; switch (yych) { case '0' ... '9': goto yy32; default: goto yy34; } yy34: p0 = yyt1; c0 = yyt2; b0 = yyt3; r0 = yyt4; s0 = yyt5; d0 = yyt6; p1 = yyt2 - 1; c1 = yyt3 - 1; b1 = yyt4 - 1; r1 = yyt5 - 1; s1 = yyt6 - 1; d1 = YYCURSOR; #line 61 "espurna\\ir_parse_simple.re" { goto update_out; } #line 301 "espurna\\ir_parse_simple.re.ipp" yy35: yych = *++YYCURSOR; switch (yych) { case '0' ... '9': case 'A' ... 'F': case 'a' ... 'f': goto yy36; case ':': goto yy12; default: goto yy7; } yy36: yych = *++YYCURSOR; switch (yych) { case '0' ... '9': case 'A' ... 'F': case 'a' ... 'f': goto yy37; case ':': goto yy12; default: goto yy7; } yy37: yych = *++YYCURSOR; switch (yych) { case '0' ... '9': case 'A' ... 'F': case 'a' ... 'f': goto yy38; case ':': goto yy12; default: goto yy7; } yy38: yych = *++YYCURSOR; switch (yych) { case '0' ... '9': case 'A' ... 'F': case 'a' ... 'f': goto yy39; case ':': goto yy12; default: goto yy7; } yy39: yych = *++YYCURSOR; switch (yych) { case '0' ... '9': case 'A' ... 'F': case 'a' ... 'f': goto yy40; case ':': goto yy12; default: goto yy7; } yy40: yych = *++YYCURSOR; switch (yych) { case ':': goto yy12; default: goto yy7; } yy41: #line 64 "espurna\\ir_parse_simple.re" { goto return_out; } #line 356 "espurna\\ir_parse_simple.re.ipp" } #line 65 "espurna\\ir_parse_simple.re" update_out: { if (!((c1 - c0) % 2)) { out = prepare( StringView{p0, p1}, StringView{c0, c1}, StringView{b0, b1}, StringView{r0, r1}, StringView{s0, s1}, StringView{d0, d1}); } } return_out: return out; }