Mirror of espurna firmware for wireless switches and more
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

375 lines
6.7 KiB

  1. /* Generated by re2c 2.2 */
  2. #line 1 "espurna\\ir_parse_simple.re"
  3. /*
  4. Part of the IR MODULE
  5. For more info:
  6. - https://re2c.org/
  7. - https://re2c.org/manual/manual_c.html
  8. */
  9. #pragma once
  10. // TODO: some sanity checks for 'valid' ranges of the parsed values, when state machine reaches individual value decoders?
  11. ParseResult<Payload> parse(StringView view) {
  12. const char* YYCURSOR { view.begin() };
  13. const char* YYLIMIT { view.end() };
  14. const char* YYMARKER;
  15. const char *p0 = nullptr, *p1 = nullptr;
  16. const char *c0 = nullptr, *c1 = nullptr;
  17. const char *b0 = nullptr, *b1 = nullptr;
  18. const char *r0 = nullptr, *r1 = nullptr;
  19. const char *s0 = nullptr, *s1 = nullptr;
  20. const char *d0 = nullptr, *d1 = nullptr;
  21. ParseResult<Payload> out;
  22. #line 33 "espurna\\ir_parse_simple.re.ipp"
  23. const char *yyt1 { nullptr };
  24. const char *yyt2 { nullptr };
  25. const char *yyt3 { nullptr };
  26. const char *yyt4 { nullptr };
  27. const char *yyt5 { nullptr };
  28. const char *yyt6 { nullptr };
  29. #line 29 "espurna\\ir_parse_simple.re"
  30. #line 43 "espurna\\ir_parse_simple.re.ipp"
  31. {
  32. char yych;
  33. unsigned int yyaccept = 0;
  34. yych = *YYCURSOR;
  35. switch (yych) {
  36. case '0' ... '9':
  37. yyt1 = YYCURSOR;
  38. goto yy4;
  39. default:
  40. if (YYLIMIT <= YYCURSOR) goto yy41;
  41. goto yy2;
  42. }
  43. yy2:
  44. ++YYCURSOR;
  45. yy3:
  46. #line 63 "espurna\\ir_parse_simple.re"
  47. { goto return_out; }
  48. #line 61 "espurna\\ir_parse_simple.re.ipp"
  49. yy4:
  50. yyaccept = 0;
  51. yych = *(YYMARKER = ++YYCURSOR);
  52. switch (yych) {
  53. case '0' ... ':': goto yy6;
  54. default: goto yy3;
  55. }
  56. yy5:
  57. yych = *++YYCURSOR;
  58. yy6:
  59. switch (yych) {
  60. case '0' ... '9': goto yy5;
  61. case ':': goto yy8;
  62. default: goto yy7;
  63. }
  64. yy7:
  65. YYCURSOR = YYMARKER;
  66. switch (yyaccept) {
  67. case 0:
  68. goto yy3;
  69. case 1:
  70. goto yy16;
  71. case 2:
  72. goto yy22;
  73. default:
  74. goto yy28;
  75. }
  76. yy8:
  77. yych = *++YYCURSOR;
  78. switch (yych) {
  79. case '0' ... '9':
  80. case 'A' ... 'F':
  81. case 'a' ... 'f':
  82. yyt2 = YYCURSOR;
  83. goto yy9;
  84. default: goto yy7;
  85. }
  86. yy9:
  87. yych = *++YYCURSOR;
  88. switch (yych) {
  89. case '0' ... '9':
  90. case 'A' ... 'F':
  91. case 'a' ... 'f': goto yy10;
  92. default: goto yy7;
  93. }
  94. yy10:
  95. yych = *++YYCURSOR;
  96. switch (yych) {
  97. case '0' ... '9':
  98. case 'A' ... 'F':
  99. case 'a' ... 'f': goto yy11;
  100. case ':': goto yy12;
  101. default: goto yy7;
  102. }
  103. yy11:
  104. yych = *++YYCURSOR;
  105. switch (yych) {
  106. case '0' ... '9':
  107. case 'A' ... 'F':
  108. case 'a' ... 'f': goto yy13;
  109. case ':': goto yy12;
  110. default: goto yy7;
  111. }
  112. yy12:
  113. yych = *++YYCURSOR;
  114. switch (yych) {
  115. case '0' ... '9':
  116. yyt3 = YYCURSOR;
  117. goto yy14;
  118. default: goto yy7;
  119. }
  120. yy13:
  121. yych = *++YYCURSOR;
  122. switch (yych) {
  123. case '0' ... '9':
  124. case 'A' ... 'F':
  125. case 'a' ... 'f': goto yy17;
  126. case ':': goto yy12;
  127. default: goto yy7;
  128. }
  129. yy14:
  130. yyaccept = 1;
  131. yych = *(YYMARKER = ++YYCURSOR);
  132. switch (yych) {
  133. case '0' ... '9': goto yy14;
  134. case ':': goto yy18;
  135. default: goto yy16;
  136. }
  137. yy16:
  138. p0 = yyt1;
  139. c0 = yyt2;
  140. b0 = yyt3;
  141. p1 = yyt2 - 1;
  142. c1 = yyt3 - 1;
  143. b1 = YYCURSOR;
  144. #line 43 "espurna\\ir_parse_simple.re"
  145. { goto update_out; }
  146. #line 159 "espurna\\ir_parse_simple.re.ipp"
  147. yy17:
  148. yych = *++YYCURSOR;
  149. switch (yych) {
  150. case '0' ... '9':
  151. case 'A' ... 'F':
  152. case 'a' ... 'f': goto yy19;
  153. case ':': goto yy12;
  154. default: goto yy7;
  155. }
  156. yy18:
  157. yych = *++YYCURSOR;
  158. switch (yych) {
  159. case '0' ... '9':
  160. yyt4 = YYCURSOR;
  161. goto yy20;
  162. default: goto yy7;
  163. }
  164. yy19:
  165. yych = *++YYCURSOR;
  166. switch (yych) {
  167. case '0' ... '9':
  168. case 'A' ... 'F':
  169. case 'a' ... 'f': goto yy23;
  170. case ':': goto yy12;
  171. default: goto yy7;
  172. }
  173. yy20:
  174. yyaccept = 2;
  175. yych = *(YYMARKER = ++YYCURSOR);
  176. switch (yych) {
  177. case '0' ... '9': goto yy20;
  178. case ':': goto yy24;
  179. default: goto yy22;
  180. }
  181. yy22:
  182. p0 = yyt1;
  183. c0 = yyt2;
  184. b0 = yyt3;
  185. r0 = yyt4;
  186. p1 = yyt2 - 1;
  187. c1 = yyt3 - 1;
  188. b1 = yyt4 - 1;
  189. r1 = YYCURSOR;
  190. #line 48 "espurna\\ir_parse_simple.re"
  191. { goto update_out; }
  192. #line 205 "espurna\\ir_parse_simple.re.ipp"
  193. yy23:
  194. yych = *++YYCURSOR;
  195. switch (yych) {
  196. case '0' ... '9':
  197. case 'A' ... 'F':
  198. case 'a' ... 'f': goto yy25;
  199. case ':': goto yy12;
  200. default: goto yy7;
  201. }
  202. yy24:
  203. yych = *++YYCURSOR;
  204. switch (yych) {
  205. case '0' ... '9':
  206. yyt5 = YYCURSOR;
  207. goto yy26;
  208. default: goto yy7;
  209. }
  210. yy25:
  211. yych = *++YYCURSOR;
  212. switch (yych) {
  213. case '0' ... '9':
  214. case 'A' ... 'F':
  215. case 'a' ... 'f': goto yy29;
  216. case ':': goto yy12;
  217. default: goto yy7;
  218. }
  219. yy26:
  220. yyaccept = 3;
  221. yych = *(YYMARKER = ++YYCURSOR);
  222. switch (yych) {
  223. case '0' ... '9': goto yy26;
  224. case ':': goto yy30;
  225. default: goto yy28;
  226. }
  227. yy28:
  228. p0 = yyt1;
  229. c0 = yyt2;
  230. b0 = yyt3;
  231. r0 = yyt4;
  232. s0 = yyt5;
  233. p1 = yyt2 - 1;
  234. c1 = yyt3 - 1;
  235. b1 = yyt4 - 1;
  236. r1 = yyt5 - 1;
  237. s1 = YYCURSOR;
  238. #line 54 "espurna\\ir_parse_simple.re"
  239. { goto update_out; }
  240. #line 253 "espurna\\ir_parse_simple.re.ipp"
  241. yy29:
  242. yych = *++YYCURSOR;
  243. switch (yych) {
  244. case '0' ... '9':
  245. case 'A' ... 'F':
  246. case 'a' ... 'f': goto yy31;
  247. case ':': goto yy12;
  248. default: goto yy7;
  249. }
  250. yy30:
  251. yych = *++YYCURSOR;
  252. switch (yych) {
  253. case '0' ... '9':
  254. yyt6 = YYCURSOR;
  255. goto yy32;
  256. default: goto yy7;
  257. }
  258. yy31:
  259. yych = *++YYCURSOR;
  260. switch (yych) {
  261. case '0' ... '9':
  262. case 'A' ... 'F':
  263. case 'a' ... 'f': goto yy35;
  264. case ':': goto yy12;
  265. default: goto yy7;
  266. }
  267. yy32:
  268. yych = *++YYCURSOR;
  269. switch (yych) {
  270. case '0' ... '9': goto yy32;
  271. default: goto yy34;
  272. }
  273. yy34:
  274. p0 = yyt1;
  275. c0 = yyt2;
  276. b0 = yyt3;
  277. r0 = yyt4;
  278. s0 = yyt5;
  279. d0 = yyt6;
  280. p1 = yyt2 - 1;
  281. c1 = yyt3 - 1;
  282. b1 = yyt4 - 1;
  283. r1 = yyt5 - 1;
  284. s1 = yyt6 - 1;
  285. d1 = YYCURSOR;
  286. #line 61 "espurna\\ir_parse_simple.re"
  287. { goto update_out; }
  288. #line 301 "espurna\\ir_parse_simple.re.ipp"
  289. yy35:
  290. yych = *++YYCURSOR;
  291. switch (yych) {
  292. case '0' ... '9':
  293. case 'A' ... 'F':
  294. case 'a' ... 'f': goto yy36;
  295. case ':': goto yy12;
  296. default: goto yy7;
  297. }
  298. yy36:
  299. yych = *++YYCURSOR;
  300. switch (yych) {
  301. case '0' ... '9':
  302. case 'A' ... 'F':
  303. case 'a' ... 'f': goto yy37;
  304. case ':': goto yy12;
  305. default: goto yy7;
  306. }
  307. yy37:
  308. yych = *++YYCURSOR;
  309. switch (yych) {
  310. case '0' ... '9':
  311. case 'A' ... 'F':
  312. case 'a' ... 'f': goto yy38;
  313. case ':': goto yy12;
  314. default: goto yy7;
  315. }
  316. yy38:
  317. yych = *++YYCURSOR;
  318. switch (yych) {
  319. case '0' ... '9':
  320. case 'A' ... 'F':
  321. case 'a' ... 'f': goto yy39;
  322. case ':': goto yy12;
  323. default: goto yy7;
  324. }
  325. yy39:
  326. yych = *++YYCURSOR;
  327. switch (yych) {
  328. case '0' ... '9':
  329. case 'A' ... 'F':
  330. case 'a' ... 'f': goto yy40;
  331. case ':': goto yy12;
  332. default: goto yy7;
  333. }
  334. yy40:
  335. yych = *++YYCURSOR;
  336. switch (yych) {
  337. case ':': goto yy12;
  338. default: goto yy7;
  339. }
  340. yy41:
  341. #line 64 "espurna\\ir_parse_simple.re"
  342. { goto return_out; }
  343. #line 356 "espurna\\ir_parse_simple.re.ipp"
  344. }
  345. #line 65 "espurna\\ir_parse_simple.re"
  346. update_out:
  347. {
  348. if (!((c1 - c0) % 2)) {
  349. out = prepare(
  350. StringView{p0, p1},
  351. StringView{c0, c1},
  352. StringView{b0, b1},
  353. StringView{r0, r1},
  354. StringView{s0, s1},
  355. StringView{d0, d1});
  356. }
  357. }
  358. return_out:
  359. return out;
  360. }