Sources/TreeSitterScanners/yaml/schema.core.c
204 lines · 6630 bytes
1#include <stdint.h>
2
3#include <stdlib.h>
4
5#define SCH_STT_FRZ -1
6
7#define HAS_TIMESTAMP 0
8
9typedef enum {
10 RS_STR,
11 RS_INT,
12 RS_NULL,
13 RS_BOOL,
14 RS_FLOAT,
15} ResultSchema;
16
17static int8_t adv_sch_stt(int8_t sch_stt, int32_t cur_chr, ResultSchema *rlt_sch) {
18 switch (sch_stt) {
19 case SCH_STT_FRZ:
20 break;
21 case 0:
22 if (cur_chr == '.') {*rlt_sch = RS_STR; return 6;}
23 if (cur_chr == '0') {*rlt_sch = RS_INT; return 37;}
24 if (cur_chr == 'F') {*rlt_sch = RS_STR; return 2;}
25 if (cur_chr == 'N') {*rlt_sch = RS_STR; return 16;}
26 if (cur_chr == 'T') {*rlt_sch = RS_STR; return 13;}
27 if (cur_chr == 'f') {*rlt_sch = RS_STR; return 17;}
28 if (cur_chr == 'n') {*rlt_sch = RS_STR; return 29;}
29 if (cur_chr == 't') {*rlt_sch = RS_STR; return 26;}
30 if (cur_chr == '~') {*rlt_sch = RS_NULL; return 35;}
31 if (cur_chr == '+') {*rlt_sch = RS_STR; return 1;}
32 if (cur_chr == '-') {*rlt_sch = RS_STR; return 1;}
33 if (('1' <= cur_chr && cur_chr <= '9')) {*rlt_sch = RS_INT; return 38;}
34 break;
35 case 1:
36 if (cur_chr == '.') {*rlt_sch = RS_STR; return 7;}
37 if (('0' <= cur_chr && cur_chr <= '9')) {*rlt_sch = RS_INT; return 38;}
38 break;
39 case 2:
40 if (cur_chr == 'A') {*rlt_sch = RS_STR; return 9;}
41 if (cur_chr == 'a') {*rlt_sch = RS_STR; return 22;}
42 break;
43 case 3:
44 if (cur_chr == 'A') {*rlt_sch = RS_STR; return 12;}
45 if (cur_chr == 'a') {*rlt_sch = RS_STR; return 12;}
46 break;
47 case 4:
48 if (cur_chr == 'E') {*rlt_sch = RS_BOOL; return 36;}
49 break;
50 case 5:
51 if (cur_chr == 'F') {*rlt_sch = RS_FLOAT; return 41;}
52 break;
53 case 6:
54 if (cur_chr == 'I') {*rlt_sch = RS_STR; return 11;}
55 if (cur_chr == 'N') {*rlt_sch = RS_STR; return 3;}
56 if (cur_chr == 'i') {*rlt_sch = RS_STR; return 24;}
57 if (cur_chr == 'n') {*rlt_sch = RS_STR; return 18;}
58 if (('0' <= cur_chr && cur_chr <= '9')) {*rlt_sch = RS_FLOAT; return 42;}
59 break;
60 case 7:
61 if (cur_chr == 'I') {*rlt_sch = RS_STR; return 11;}
62 if (cur_chr == 'i') {*rlt_sch = RS_STR; return 24;}
63 if (('0' <= cur_chr && cur_chr <= '9')) {*rlt_sch = RS_FLOAT; return 42;}
64 break;
65 case 8:
66 if (cur_chr == 'L') {*rlt_sch = RS_NULL; return 35;}
67 break;
68 case 9:
69 if (cur_chr == 'L') {*rlt_sch = RS_STR; return 14;}
70 break;
71 case 10:
72 if (cur_chr == 'L') {*rlt_sch = RS_STR; return 8;}
73 break;
74 case 11:
75 if (cur_chr == 'N') {*rlt_sch = RS_STR; return 5;}
76 if (cur_chr == 'n') {*rlt_sch = RS_STR; return 20;}
77 break;
78 case 12:
79 if (cur_chr == 'N') {*rlt_sch = RS_FLOAT; return 41;}
80 break;
81 case 13:
82 if (cur_chr == 'R') {*rlt_sch = RS_STR; return 15;}
83 if (cur_chr == 'r') {*rlt_sch = RS_STR; return 28;}
84 break;
85 case 14:
86 if (cur_chr == 'S') {*rlt_sch = RS_STR; return 4;}
87 break;
88 case 15:
89 if (cur_chr == 'U') {*rlt_sch = RS_STR; return 4;}
90 break;
91 case 16:
92 if (cur_chr == 'U') {*rlt_sch = RS_STR; return 10;}
93 if (cur_chr == 'u') {*rlt_sch = RS_STR; return 23;}
94 break;
95 case 17:
96 if (cur_chr == 'a') {*rlt_sch = RS_STR; return 22;}
97 break;
98 case 18:
99 if (cur_chr == 'a') {*rlt_sch = RS_STR; return 25;}
100 break;
101 case 19:
102 if (cur_chr == 'e') {*rlt_sch = RS_BOOL; return 36;}
103 break;
104 case 20:
105 if (cur_chr == 'f') {*rlt_sch = RS_FLOAT; return 41;}
106 break;
107 case 21:
108 if (cur_chr == 'l') {*rlt_sch = RS_NULL; return 35;}
109 break;
110 case 22:
111 if (cur_chr == 'l') {*rlt_sch = RS_STR; return 27;}
112 break;
113 case 23:
114 if (cur_chr == 'l') {*rlt_sch = RS_STR; return 21;}
115 break;
116 case 24:
117 if (cur_chr == 'n') {*rlt_sch = RS_STR; return 20;}
118 break;
119 case 25:
120 if (cur_chr == 'n') {*rlt_sch = RS_FLOAT; return 41;}
121 break;
122 case 26:
123 if (cur_chr == 'r') {*rlt_sch = RS_STR; return 28;}
124 break;
125 case 27:
126 if (cur_chr == 's') {*rlt_sch = RS_STR; return 19;}
127 break;
128 case 28:
129 if (cur_chr == 'u') {*rlt_sch = RS_STR; return 19;}
130 break;
131 case 29:
132 if (cur_chr == 'u') {*rlt_sch = RS_STR; return 23;}
133 break;
134 case 30:
135 if (cur_chr == '+' ||
136 cur_chr == '-') {*rlt_sch = RS_STR; return 32;}
137 if (('0' <= cur_chr && cur_chr <= '9')) {*rlt_sch = RS_FLOAT; return 43;}
138 break;
139 case 31:
140 if (('0' <= cur_chr && cur_chr <= '7')) {*rlt_sch = RS_INT; return 39;}
141 break;
142 case 32:
143 if (('0' <= cur_chr && cur_chr <= '9')) {*rlt_sch = RS_FLOAT; return 43;}
144 break;
145 case 33:
146 if (('0' <= cur_chr && cur_chr <= '9') ||
147 ('A' <= cur_chr && cur_chr <= 'F') ||
148 ('a' <= cur_chr && cur_chr <= 'f')) {*rlt_sch = RS_INT; return 40;}
149 break;
150 case 34:
151 abort();
152 break;
153 case 35:
154 *rlt_sch = RS_NULL;
155 break;
156 case 36:
157 *rlt_sch = RS_BOOL;
158 break;
159 case 37:
160 *rlt_sch = RS_INT;
161 if (cur_chr == '.') {*rlt_sch = RS_FLOAT; return 42;}
162 if (cur_chr == 'o') {*rlt_sch = RS_STR; return 31;}
163 if (cur_chr == 'x') {*rlt_sch = RS_STR; return 33;}
164 if (cur_chr == 'E' ||
165 cur_chr == 'e') {*rlt_sch = RS_STR; return 30;}
166 if (('0' <= cur_chr && cur_chr <= '9')) {*rlt_sch = RS_INT; return 38;}
167 break;
168 case 38:
169 *rlt_sch = RS_INT;
170 if (cur_chr == '.') {*rlt_sch = RS_FLOAT; return 42;}
171 if (cur_chr == 'E' ||
172 cur_chr == 'e') {*rlt_sch = RS_STR; return 30;}
173 if (('0' <= cur_chr && cur_chr <= '9')) {*rlt_sch = RS_INT; return 38;}
174 break;
175 case 39:
176 *rlt_sch = RS_INT;
177 if (('0' <= cur_chr && cur_chr <= '7')) {*rlt_sch = RS_INT; return 39;}
178 break;
179 case 40:
180 *rlt_sch = RS_INT;
181 if (('0' <= cur_chr && cur_chr <= '9') ||
182 ('A' <= cur_chr && cur_chr <= 'F') ||
183 ('a' <= cur_chr && cur_chr <= 'f')) {*rlt_sch = RS_INT; return 40;}
184 break;
185 case 41:
186 *rlt_sch = RS_FLOAT;
187 break;
188 case 42:
189 *rlt_sch = RS_FLOAT;
190 if (cur_chr == 'E' ||
191 cur_chr == 'e') {*rlt_sch = RS_STR; return 30;}
192 if (('0' <= cur_chr && cur_chr <= '9')) {*rlt_sch = RS_FLOAT; return 42;}
193 break;
194 case 43:
195 *rlt_sch = RS_FLOAT;
196 if (('0' <= cur_chr && cur_chr <= '9')) {*rlt_sch = RS_FLOAT; return 43;}
197 break;
198 default:
199 *rlt_sch = RS_STR;
200 return SCH_STT_FRZ;
201 }
202 if (cur_chr != '\r' && cur_chr != '\n' && cur_chr != ' ' && cur_chr != 0) *rlt_sch = RS_STR;
203 return SCH_STT_FRZ;
204}