PostgreSQL Source Code git master
stem_KOI8_R_russian.c
Go to the documentation of this file.
1/* Generated from russian.sbl by Snowball 3.0.0 - https://snowballstem.org/ */
2
4
5#include <stddef.h>
6
7#include "snowball_runtime.h"
8
9struct SN_local {
10 struct SN_env z;
11 int i_p2;
12 int i_pV;
13};
14
15typedef struct SN_local SN_local;
16
17#ifdef __cplusplus
18extern "C" {
19#endif
20extern int russian_KOI8_R_stem(struct SN_env * z);
21#ifdef __cplusplus
22}
23#endif
24
25static int r_tidy_up(struct SN_env * z);
26static int r_derivational(struct SN_env * z);
27static int r_noun(struct SN_env * z);
28static int r_verb(struct SN_env * z);
29static int r_reflexive(struct SN_env * z);
30static int r_adjectival(struct SN_env * z);
31static int r_adjective(struct SN_env * z);
32static int r_perfective_gerund(struct SN_env * z);
33static int r_R2(struct SN_env * z);
34static int r_mark_regions(struct SN_env * z);
35
36static const symbol s_0[] = { 0xC5 };
37
38static const symbol s_0_0[3] = { 0xD7, 0xDB, 0xC9 };
39static const symbol s_0_1[4] = { 0xC9, 0xD7, 0xDB, 0xC9 };
40static const symbol s_0_2[4] = { 0xD9, 0xD7, 0xDB, 0xC9 };
41static const symbol s_0_3[1] = { 0xD7 };
42static const symbol s_0_4[2] = { 0xC9, 0xD7 };
43static const symbol s_0_5[2] = { 0xD9, 0xD7 };
44static const symbol s_0_6[5] = { 0xD7, 0xDB, 0xC9, 0xD3, 0xD8 };
45static const symbol s_0_7[6] = { 0xC9, 0xD7, 0xDB, 0xC9, 0xD3, 0xD8 };
46static const symbol s_0_8[6] = { 0xD9, 0xD7, 0xDB, 0xC9, 0xD3, 0xD8 };
47static const struct among a_0[9] = {
48{ 3, s_0_0, 0, 1, 0},
49{ 4, s_0_1, -1, 2, 0},
50{ 4, s_0_2, -2, 2, 0},
51{ 1, s_0_3, 0, 1, 0},
52{ 2, s_0_4, -1, 2, 0},
53{ 2, s_0_5, -2, 2, 0},
54{ 5, s_0_6, 0, 1, 0},
55{ 6, s_0_7, -1, 2, 0},
56{ 6, s_0_8, -2, 2, 0}
57};
58
59static const symbol s_1_0[2] = { 0xC0, 0xC0 };
60static const symbol s_1_1[2] = { 0xC5, 0xC0 };
61static const symbol s_1_2[2] = { 0xCF, 0xC0 };
62static const symbol s_1_3[2] = { 0xD5, 0xC0 };
63static const symbol s_1_4[2] = { 0xC5, 0xC5 };
64static const symbol s_1_5[2] = { 0xC9, 0xC5 };
65static const symbol s_1_6[2] = { 0xCF, 0xC5 };
66static const symbol s_1_7[2] = { 0xD9, 0xC5 };
67static const symbol s_1_8[2] = { 0xC9, 0xC8 };
68static const symbol s_1_9[2] = { 0xD9, 0xC8 };
69static const symbol s_1_10[3] = { 0xC9, 0xCD, 0xC9 };
70static const symbol s_1_11[3] = { 0xD9, 0xCD, 0xC9 };
71static const symbol s_1_12[2] = { 0xC5, 0xCA };
72static const symbol s_1_13[2] = { 0xC9, 0xCA };
73static const symbol s_1_14[2] = { 0xCF, 0xCA };
74static const symbol s_1_15[2] = { 0xD9, 0xCA };
75static const symbol s_1_16[2] = { 0xC5, 0xCD };
76static const symbol s_1_17[2] = { 0xC9, 0xCD };
77static const symbol s_1_18[2] = { 0xCF, 0xCD };
78static const symbol s_1_19[2] = { 0xD9, 0xCD };
79static const symbol s_1_20[3] = { 0xC5, 0xC7, 0xCF };
80static const symbol s_1_21[3] = { 0xCF, 0xC7, 0xCF };
81static const symbol s_1_22[2] = { 0xC1, 0xD1 };
82static const symbol s_1_23[2] = { 0xD1, 0xD1 };
83static const symbol s_1_24[3] = { 0xC5, 0xCD, 0xD5 };
84static const symbol s_1_25[3] = { 0xCF, 0xCD, 0xD5 };
85static const struct among a_1[26] = {
86{ 2, s_1_0, 0, 1, 0},
87{ 2, s_1_1, 0, 1, 0},
88{ 2, s_1_2, 0, 1, 0},
89{ 2, s_1_3, 0, 1, 0},
90{ 2, s_1_4, 0, 1, 0},
91{ 2, s_1_5, 0, 1, 0},
92{ 2, s_1_6, 0, 1, 0},
93{ 2, s_1_7, 0, 1, 0},
94{ 2, s_1_8, 0, 1, 0},
95{ 2, s_1_9, 0, 1, 0},
96{ 3, s_1_10, 0, 1, 0},
97{ 3, s_1_11, 0, 1, 0},
98{ 2, s_1_12, 0, 1, 0},
99{ 2, s_1_13, 0, 1, 0},
100{ 2, s_1_14, 0, 1, 0},
101{ 2, s_1_15, 0, 1, 0},
102{ 2, s_1_16, 0, 1, 0},
103{ 2, s_1_17, 0, 1, 0},
104{ 2, s_1_18, 0, 1, 0},
105{ 2, s_1_19, 0, 1, 0},
106{ 3, s_1_20, 0, 1, 0},
107{ 3, s_1_21, 0, 1, 0},
108{ 2, s_1_22, 0, 1, 0},
109{ 2, s_1_23, 0, 1, 0},
110{ 3, s_1_24, 0, 1, 0},
111{ 3, s_1_25, 0, 1, 0}
112};
113
114static const symbol s_2_0[2] = { 0xC5, 0xCD };
115static const symbol s_2_1[2] = { 0xCE, 0xCE };
116static const symbol s_2_2[2] = { 0xD7, 0xDB };
117static const symbol s_2_3[3] = { 0xC9, 0xD7, 0xDB };
118static const symbol s_2_4[3] = { 0xD9, 0xD7, 0xDB };
119static const symbol s_2_5[1] = { 0xDD };
120static const symbol s_2_6[2] = { 0xC0, 0xDD };
121static const symbol s_2_7[3] = { 0xD5, 0xC0, 0xDD };
122static const struct among a_2[8] = {
123{ 2, s_2_0, 0, 1, 0},
124{ 2, s_2_1, 0, 1, 0},
125{ 2, s_2_2, 0, 1, 0},
126{ 3, s_2_3, -1, 2, 0},
127{ 3, s_2_4, -2, 2, 0},
128{ 1, s_2_5, 0, 1, 0},
129{ 2, s_2_6, -1, 1, 0},
130{ 3, s_2_7, -1, 2, 0}
131};
132
133static const symbol s_3_0[2] = { 0xD3, 0xD1 };
134static const symbol s_3_1[2] = { 0xD3, 0xD8 };
135static const struct among a_3[2] = {
136{ 2, s_3_0, 0, 1, 0},
137{ 2, s_3_1, 0, 1, 0}
138};
139
140static const symbol s_4_0[1] = { 0xC0 };
141static const symbol s_4_1[2] = { 0xD5, 0xC0 };
142static const symbol s_4_2[2] = { 0xCC, 0xC1 };
143static const symbol s_4_3[3] = { 0xC9, 0xCC, 0xC1 };
144static const symbol s_4_4[3] = { 0xD9, 0xCC, 0xC1 };
145static const symbol s_4_5[2] = { 0xCE, 0xC1 };
146static const symbol s_4_6[3] = { 0xC5, 0xCE, 0xC1 };
147static const symbol s_4_7[3] = { 0xC5, 0xD4, 0xC5 };
148static const symbol s_4_8[3] = { 0xC9, 0xD4, 0xC5 };
149static const symbol s_4_9[3] = { 0xCA, 0xD4, 0xC5 };
150static const symbol s_4_10[4] = { 0xC5, 0xCA, 0xD4, 0xC5 };
151static const symbol s_4_11[4] = { 0xD5, 0xCA, 0xD4, 0xC5 };
152static const symbol s_4_12[2] = { 0xCC, 0xC9 };
153static const symbol s_4_13[3] = { 0xC9, 0xCC, 0xC9 };
154static const symbol s_4_14[3] = { 0xD9, 0xCC, 0xC9 };
155static const symbol s_4_15[1] = { 0xCA };
156static const symbol s_4_16[2] = { 0xC5, 0xCA };
157static const symbol s_4_17[2] = { 0xD5, 0xCA };
158static const symbol s_4_18[1] = { 0xCC };
159static const symbol s_4_19[2] = { 0xC9, 0xCC };
160static const symbol s_4_20[2] = { 0xD9, 0xCC };
161static const symbol s_4_21[2] = { 0xC5, 0xCD };
162static const symbol s_4_22[2] = { 0xC9, 0xCD };
163static const symbol s_4_23[2] = { 0xD9, 0xCD };
164static const symbol s_4_24[1] = { 0xCE };
165static const symbol s_4_25[2] = { 0xC5, 0xCE };
166static const symbol s_4_26[2] = { 0xCC, 0xCF };
167static const symbol s_4_27[3] = { 0xC9, 0xCC, 0xCF };
168static const symbol s_4_28[3] = { 0xD9, 0xCC, 0xCF };
169static const symbol s_4_29[2] = { 0xCE, 0xCF };
170static const symbol s_4_30[3] = { 0xC5, 0xCE, 0xCF };
171static const symbol s_4_31[3] = { 0xCE, 0xCE, 0xCF };
172static const symbol s_4_32[2] = { 0xC0, 0xD4 };
173static const symbol s_4_33[3] = { 0xD5, 0xC0, 0xD4 };
174static const symbol s_4_34[2] = { 0xC5, 0xD4 };
175static const symbol s_4_35[3] = { 0xD5, 0xC5, 0xD4 };
176static const symbol s_4_36[2] = { 0xC9, 0xD4 };
177static const symbol s_4_37[2] = { 0xD1, 0xD4 };
178static const symbol s_4_38[2] = { 0xD9, 0xD4 };
179static const symbol s_4_39[2] = { 0xD4, 0xD8 };
180static const symbol s_4_40[3] = { 0xC9, 0xD4, 0xD8 };
181static const symbol s_4_41[3] = { 0xD9, 0xD4, 0xD8 };
182static const symbol s_4_42[3] = { 0xC5, 0xDB, 0xD8 };
183static const symbol s_4_43[3] = { 0xC9, 0xDB, 0xD8 };
184static const symbol s_4_44[2] = { 0xCE, 0xD9 };
185static const symbol s_4_45[3] = { 0xC5, 0xCE, 0xD9 };
186static const struct among a_4[46] = {
187{ 1, s_4_0, 0, 2, 0},
188{ 2, s_4_1, -1, 2, 0},
189{ 2, s_4_2, 0, 1, 0},
190{ 3, s_4_3, -1, 2, 0},
191{ 3, s_4_4, -2, 2, 0},
192{ 2, s_4_5, 0, 1, 0},
193{ 3, s_4_6, -1, 2, 0},
194{ 3, s_4_7, 0, 1, 0},
195{ 3, s_4_8, 0, 2, 0},
196{ 3, s_4_9, 0, 1, 0},
197{ 4, s_4_10, -1, 2, 0},
198{ 4, s_4_11, -2, 2, 0},
199{ 2, s_4_12, 0, 1, 0},
200{ 3, s_4_13, -1, 2, 0},
201{ 3, s_4_14, -2, 2, 0},
202{ 1, s_4_15, 0, 1, 0},
203{ 2, s_4_16, -1, 2, 0},
204{ 2, s_4_17, -2, 2, 0},
205{ 1, s_4_18, 0, 1, 0},
206{ 2, s_4_19, -1, 2, 0},
207{ 2, s_4_20, -2, 2, 0},
208{ 2, s_4_21, 0, 1, 0},
209{ 2, s_4_22, 0, 2, 0},
210{ 2, s_4_23, 0, 2, 0},
211{ 1, s_4_24, 0, 1, 0},
212{ 2, s_4_25, -1, 2, 0},
213{ 2, s_4_26, 0, 1, 0},
214{ 3, s_4_27, -1, 2, 0},
215{ 3, s_4_28, -2, 2, 0},
216{ 2, s_4_29, 0, 1, 0},
217{ 3, s_4_30, -1, 2, 0},
218{ 3, s_4_31, -2, 1, 0},
219{ 2, s_4_32, 0, 1, 0},
220{ 3, s_4_33, -1, 2, 0},
221{ 2, s_4_34, 0, 1, 0},
222{ 3, s_4_35, -1, 2, 0},
223{ 2, s_4_36, 0, 2, 0},
224{ 2, s_4_37, 0, 2, 0},
225{ 2, s_4_38, 0, 2, 0},
226{ 2, s_4_39, 0, 1, 0},
227{ 3, s_4_40, -1, 2, 0},
228{ 3, s_4_41, -2, 2, 0},
229{ 3, s_4_42, 0, 1, 0},
230{ 3, s_4_43, 0, 2, 0},
231{ 2, s_4_44, 0, 1, 0},
232{ 3, s_4_45, -1, 2, 0}
233};
234
235static const symbol s_5_0[1] = { 0xC0 };
236static const symbol s_5_1[2] = { 0xC9, 0xC0 };
237static const symbol s_5_2[2] = { 0xD8, 0xC0 };
238static const symbol s_5_3[1] = { 0xC1 };
239static const symbol s_5_4[1] = { 0xC5 };
240static const symbol s_5_5[2] = { 0xC9, 0xC5 };
241static const symbol s_5_6[2] = { 0xD8, 0xC5 };
242static const symbol s_5_7[2] = { 0xC1, 0xC8 };
243static const symbol s_5_8[2] = { 0xD1, 0xC8 };
244static const symbol s_5_9[3] = { 0xC9, 0xD1, 0xC8 };
245static const symbol s_5_10[1] = { 0xC9 };
246static const symbol s_5_11[2] = { 0xC5, 0xC9 };
247static const symbol s_5_12[2] = { 0xC9, 0xC9 };
248static const symbol s_5_13[3] = { 0xC1, 0xCD, 0xC9 };
249static const symbol s_5_14[3] = { 0xD1, 0xCD, 0xC9 };
250static const symbol s_5_15[4] = { 0xC9, 0xD1, 0xCD, 0xC9 };
251static const symbol s_5_16[1] = { 0xCA };
252static const symbol s_5_17[2] = { 0xC5, 0xCA };
253static const symbol s_5_18[3] = { 0xC9, 0xC5, 0xCA };
254static const symbol s_5_19[2] = { 0xC9, 0xCA };
255static const symbol s_5_20[2] = { 0xCF, 0xCA };
256static const symbol s_5_21[2] = { 0xC1, 0xCD };
257static const symbol s_5_22[2] = { 0xC5, 0xCD };
258static const symbol s_5_23[3] = { 0xC9, 0xC5, 0xCD };
259static const symbol s_5_24[2] = { 0xCF, 0xCD };
260static const symbol s_5_25[2] = { 0xD1, 0xCD };
261static const symbol s_5_26[3] = { 0xC9, 0xD1, 0xCD };
262static const symbol s_5_27[1] = { 0xCF };
263static const symbol s_5_28[1] = { 0xD1 };
264static const symbol s_5_29[2] = { 0xC9, 0xD1 };
265static const symbol s_5_30[2] = { 0xD8, 0xD1 };
266static const symbol s_5_31[1] = { 0xD5 };
267static const symbol s_5_32[2] = { 0xC5, 0xD7 };
268static const symbol s_5_33[2] = { 0xCF, 0xD7 };
269static const symbol s_5_34[1] = { 0xD8 };
270static const symbol s_5_35[1] = { 0xD9 };
271static const struct among a_5[36] = {
272{ 1, s_5_0, 0, 1, 0},
273{ 2, s_5_1, -1, 1, 0},
274{ 2, s_5_2, -2, 1, 0},
275{ 1, s_5_3, 0, 1, 0},
276{ 1, s_5_4, 0, 1, 0},
277{ 2, s_5_5, -1, 1, 0},
278{ 2, s_5_6, -2, 1, 0},
279{ 2, s_5_7, 0, 1, 0},
280{ 2, s_5_8, 0, 1, 0},
281{ 3, s_5_9, -1, 1, 0},
282{ 1, s_5_10, 0, 1, 0},
283{ 2, s_5_11, -1, 1, 0},
284{ 2, s_5_12, -2, 1, 0},
285{ 3, s_5_13, -3, 1, 0},
286{ 3, s_5_14, -4, 1, 0},
287{ 4, s_5_15, -1, 1, 0},
288{ 1, s_5_16, 0, 1, 0},
289{ 2, s_5_17, -1, 1, 0},
290{ 3, s_5_18, -1, 1, 0},
291{ 2, s_5_19, -3, 1, 0},
292{ 2, s_5_20, -4, 1, 0},
293{ 2, s_5_21, 0, 1, 0},
294{ 2, s_5_22, 0, 1, 0},
295{ 3, s_5_23, -1, 1, 0},
296{ 2, s_5_24, 0, 1, 0},
297{ 2, s_5_25, 0, 1, 0},
298{ 3, s_5_26, -1, 1, 0},
299{ 1, s_5_27, 0, 1, 0},
300{ 1, s_5_28, 0, 1, 0},
301{ 2, s_5_29, -1, 1, 0},
302{ 2, s_5_30, -2, 1, 0},
303{ 1, s_5_31, 0, 1, 0},
304{ 2, s_5_32, 0, 1, 0},
305{ 2, s_5_33, 0, 1, 0},
306{ 1, s_5_34, 0, 1, 0},
307{ 1, s_5_35, 0, 1, 0}
308};
309
310static const symbol s_6_0[3] = { 0xCF, 0xD3, 0xD4 };
311static const symbol s_6_1[4] = { 0xCF, 0xD3, 0xD4, 0xD8 };
312static const struct among a_6[2] = {
313{ 3, s_6_0, 0, 1, 0},
314{ 4, s_6_1, 0, 1, 0}
315};
316
317static const symbol s_7_0[4] = { 0xC5, 0xCA, 0xDB, 0xC5 };
318static const symbol s_7_1[1] = { 0xCE };
319static const symbol s_7_2[1] = { 0xD8 };
320static const symbol s_7_3[3] = { 0xC5, 0xCA, 0xDB };
321static const struct among a_7[4] = {
322{ 4, s_7_0, 0, 1, 0},
323{ 1, s_7_1, 0, 2, 0},
324{ 1, s_7_2, 0, 3, 0},
325{ 3, s_7_3, 0, 1, 0}
326};
327
328static const unsigned char g_v[] = { 35, 130, 34, 18 };
329
330static int r_mark_regions(struct SN_env * z) {
331 ((SN_local *)z)->i_pV = z->l;
332 ((SN_local *)z)->i_p2 = z->l;
333 {
334 int v_1 = z->c;
335 {
336 int ret = out_grouping(z, g_v, 192, 220, 1);
337 if (ret < 0) goto lab0;
338 z->c += ret;
339 }
340 ((SN_local *)z)->i_pV = z->c;
341 {
342 int ret = in_grouping(z, g_v, 192, 220, 1);
343 if (ret < 0) goto lab0;
344 z->c += ret;
345 }
346 {
347 int ret = out_grouping(z, g_v, 192, 220, 1);
348 if (ret < 0) goto lab0;
349 z->c += ret;
350 }
351 {
352 int ret = in_grouping(z, g_v, 192, 220, 1);
353 if (ret < 0) goto lab0;
354 z->c += ret;
355 }
356 ((SN_local *)z)->i_p2 = z->c;
357 lab0:
358 z->c = v_1;
359 }
360 return 1;
361}
362
363static int r_R2(struct SN_env * z) {
364 return ((SN_local *)z)->i_p2 <= z->c;
365}
366
367static int r_perfective_gerund(struct SN_env * z) {
368 int among_var;
369 z->ket = z->c;
370 if (z->c <= z->lb || z->p[z->c - 1] >> 5 != 6 || !((25166336 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0;
371 among_var = find_among_b(z, a_0, 9, 0);
372 if (!among_var) return 0;
373 z->bra = z->c;
374 switch (among_var) {
375 case 1:
376 do {
377 int v_1 = z->l - z->c;
378 if (z->c <= z->lb || z->p[z->c - 1] != 0xC1) goto lab0;
379 z->c--;
380 break;
381 lab0:
382 z->c = z->l - v_1;
383 if (z->c <= z->lb || z->p[z->c - 1] != 0xD1) return 0;
384 z->c--;
385 } while (0);
386 {
387 int ret = slice_del(z);
388 if (ret < 0) return ret;
389 }
390 break;
391 case 2:
392 {
393 int ret = slice_del(z);
394 if (ret < 0) return ret;
395 }
396 break;
397 }
398 return 1;
399}
400
401static int r_adjective(struct SN_env * z) {
402 z->ket = z->c;
403 if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 6 || !((2271009 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0;
404 if (!find_among_b(z, a_1, 26, 0)) return 0;
405 z->bra = z->c;
406 {
407 int ret = slice_del(z);
408 if (ret < 0) return ret;
409 }
410 return 1;
411}
412
413static int r_adjectival(struct SN_env * z) {
414 int among_var;
415 {
416 int ret = r_adjective(z);
417 if (ret <= 0) return ret;
418 }
419 {
420 int v_1 = z->l - z->c;
421 z->ket = z->c;
422 if (z->c <= z->lb || z->p[z->c - 1] >> 5 != 6 || !((671113216 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->c = z->l - v_1; goto lab0; }
423 among_var = find_among_b(z, a_2, 8, 0);
424 if (!among_var) { z->c = z->l - v_1; goto lab0; }
425 z->bra = z->c;
426 switch (among_var) {
427 case 1:
428 do {
429 int v_2 = z->l - z->c;
430 if (z->c <= z->lb || z->p[z->c - 1] != 0xC1) goto lab1;
431 z->c--;
432 break;
433 lab1:
434 z->c = z->l - v_2;
435 if (z->c <= z->lb || z->p[z->c - 1] != 0xD1) { z->c = z->l - v_1; goto lab0; }
436 z->c--;
437 } while (0);
438 {
439 int ret = slice_del(z);
440 if (ret < 0) return ret;
441 }
442 break;
443 case 2:
444 {
445 int ret = slice_del(z);
446 if (ret < 0) return ret;
447 }
448 break;
449 }
450 lab0:
451 ;
452 }
453 return 1;
454}
455
456static int r_reflexive(struct SN_env * z) {
457 z->ket = z->c;
458 if (z->c - 1 <= z->lb || (z->p[z->c - 1] != 209 && z->p[z->c - 1] != 216)) return 0;
459 if (!find_among_b(z, a_3, 2, 0)) return 0;
460 z->bra = z->c;
461 {
462 int ret = slice_del(z);
463 if (ret < 0) return ret;
464 }
465 return 1;
466}
467
468static int r_verb(struct SN_env * z) {
469 int among_var;
470 z->ket = z->c;
471 if (z->c <= z->lb || z->p[z->c - 1] >> 5 != 6 || !((51443235 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0;
472 among_var = find_among_b(z, a_4, 46, 0);
473 if (!among_var) return 0;
474 z->bra = z->c;
475 switch (among_var) {
476 case 1:
477 do {
478 int v_1 = z->l - z->c;
479 if (z->c <= z->lb || z->p[z->c - 1] != 0xC1) goto lab0;
480 z->c--;
481 break;
482 lab0:
483 z->c = z->l - v_1;
484 if (z->c <= z->lb || z->p[z->c - 1] != 0xD1) return 0;
485 z->c--;
486 } while (0);
487 {
488 int ret = slice_del(z);
489 if (ret < 0) return ret;
490 }
491 break;
492 case 2:
493 {
494 int ret = slice_del(z);
495 if (ret < 0) return ret;
496 }
497 break;
498 }
499 return 1;
500}
501
502static int r_noun(struct SN_env * z) {
503 z->ket = z->c;
504 if (z->c <= z->lb || z->p[z->c - 1] >> 5 != 6 || !((60991267 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0;
505 if (!find_among_b(z, a_5, 36, 0)) return 0;
506 z->bra = z->c;
507 {
508 int ret = slice_del(z);
509 if (ret < 0) return ret;
510 }
511 return 1;
512}
513
514static int r_derivational(struct SN_env * z) {
515 z->ket = z->c;
516 if (z->c - 2 <= z->lb || (z->p[z->c - 1] != 212 && z->p[z->c - 1] != 216)) return 0;
517 if (!find_among_b(z, a_6, 2, 0)) return 0;
518 z->bra = z->c;
519 {
520 int ret = r_R2(z);
521 if (ret <= 0) return ret;
522 }
523 {
524 int ret = slice_del(z);
525 if (ret < 0) return ret;
526 }
527 return 1;
528}
529
530static int r_tidy_up(struct SN_env * z) {
531 int among_var;
532 z->ket = z->c;
533 if (z->c <= z->lb || z->p[z->c - 1] >> 5 != 6 || !((151011360 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0;
534 among_var = find_among_b(z, a_7, 4, 0);
535 if (!among_var) return 0;
536 z->bra = z->c;
537 switch (among_var) {
538 case 1:
539 {
540 int ret = slice_del(z);
541 if (ret < 0) return ret;
542 }
543 z->ket = z->c;
544 if (z->c <= z->lb || z->p[z->c - 1] != 0xCE) return 0;
545 z->c--;
546 z->bra = z->c;
547 if (z->c <= z->lb || z->p[z->c - 1] != 0xCE) return 0;
548 z->c--;
549 {
550 int ret = slice_del(z);
551 if (ret < 0) return ret;
552 }
553 break;
554 case 2:
555 if (z->c <= z->lb || z->p[z->c - 1] != 0xCE) return 0;
556 z->c--;
557 {
558 int ret = slice_del(z);
559 if (ret < 0) return ret;
560 }
561 break;
562 case 3:
563 {
564 int ret = slice_del(z);
565 if (ret < 0) return ret;
566 }
567 break;
568 }
569 return 1;
570}
571
572extern int russian_KOI8_R_stem(struct SN_env * z) {
573 {
574 int v_1 = z->c;
575 while (1) {
576 int v_2 = z->c;
577 while (1) {
578 int v_3 = z->c;
579 z->bra = z->c;
580 if (z->c == z->l || z->p[z->c] != 0xA3) goto lab2;
581 z->c++;
582 z->ket = z->c;
583 z->c = v_3;
584 break;
585 lab2:
586 z->c = v_3;
587 if (z->c >= z->l) goto lab1;
588 z->c++;
589 }
590 {
591 int ret = slice_from_s(z, 1, s_0);
592 if (ret < 0) return ret;
593 }
594 continue;
595 lab1:
596 z->c = v_2;
597 break;
598 }
599 z->c = v_1;
600 }
601 {
602 int ret = r_mark_regions(z);
603 if (ret < 0) return ret;
604 }
605 z->lb = z->c; z->c = z->l;
606 {
607 int v_4;
608 if (z->c < ((SN_local *)z)->i_pV) return 0;
609 v_4 = z->lb; z->lb = ((SN_local *)z)->i_pV;
610 {
611 int v_5 = z->l - z->c;
612 do {
613 int v_6 = z->l - z->c;
614 {
615 int ret = r_perfective_gerund(z);
616 if (ret == 0) goto lab4;
617 if (ret < 0) return ret;
618 }
619 break;
620 lab4:
621 z->c = z->l - v_6;
622 {
623 int v_7 = z->l - z->c;
624 {
625 int ret = r_reflexive(z);
626 if (ret == 0) { z->c = z->l - v_7; goto lab5; }
627 if (ret < 0) return ret;
628 }
629 lab5:
630 ;
631 }
632 do {
633 int v_8 = z->l - z->c;
634 {
635 int ret = r_adjectival(z);
636 if (ret == 0) goto lab6;
637 if (ret < 0) return ret;
638 }
639 break;
640 lab6:
641 z->c = z->l - v_8;
642 {
643 int ret = r_verb(z);
644 if (ret == 0) goto lab7;
645 if (ret < 0) return ret;
646 }
647 break;
648 lab7:
649 z->c = z->l - v_8;
650 {
651 int ret = r_noun(z);
652 if (ret == 0) goto lab3;
653 if (ret < 0) return ret;
654 }
655 } while (0);
656 } while (0);
657 lab3:
658 z->c = z->l - v_5;
659 }
660 {
661 int v_9 = z->l - z->c;
662 z->ket = z->c;
663 if (z->c <= z->lb || z->p[z->c - 1] != 0xC9) { z->c = z->l - v_9; goto lab8; }
664 z->c--;
665 z->bra = z->c;
666 {
667 int ret = slice_del(z);
668 if (ret < 0) return ret;
669 }
670 lab8:
671 ;
672 }
673 {
674 int v_10 = z->l - z->c;
675 {
676 int ret = r_derivational(z);
677 if (ret < 0) return ret;
678 }
679 z->c = z->l - v_10;
680 }
681 {
682 int v_11 = z->l - z->c;
683 {
684 int ret = r_tidy_up(z);
685 if (ret < 0) return ret;
686 }
687 z->c = z->l - v_11;
688 }
689 z->lb = v_4;
690 }
691 z->c = z->lb;
692 return 1;
693}
694
695extern struct SN_env * russian_KOI8_R_create_env(void) {
696 struct SN_env * z = SN_new_env(sizeof(SN_local));
697 if (z) {
698 ((SN_local *)z)->i_p2 = 0;
699 ((SN_local *)z)->i_pV = 0;
700 }
701 return z;
702}
703
704extern void russian_KOI8_R_close_env(struct SN_env * z) {
705 SN_delete_env(z);
706}
707
void SN_delete_env(struct SN_env *z)
Definition: api.c:18
struct SN_env * SN_new_env(int alloc_size)
Definition: api.c:5
unsigned char symbol
Definition: api.h:4
static const symbol s_4_3[3]
static const symbol s_0_2[4]
static const symbol s_1_5[2]
static const symbol s_1_19[2]
static const symbol s_4_37[2]
static const symbol s_4_22[2]
static const symbol s_1_13[2]
static const struct among a_7[4]
static const symbol s_5_30[2]
static const symbol s_0_4[2]
static int r_adjective(struct SN_env *z)
static const struct among a_3[2]
static const symbol s_2_2[2]
static const symbol s_4_18[1]
static const symbol s_1_24[3]
static const symbol s_4_32[2]
static const symbol s_0_5[2]
static const symbol s_1_11[3]
static const symbol s_1_10[3]
static const symbol s_1_9[2]
static const symbol s_5_35[1]
static const symbol s_5_28[1]
static int r_tidy_up(struct SN_env *z)
static const symbol s_1_6[2]
static const symbol s_1_23[2]
static const symbol s_4_29[2]
static const symbol s_4_15[1]
static const symbol s_5_12[2]
static const symbol s_0_8[6]
static const symbol s_5_18[3]
static const symbol s_1_2[2]
static const symbol s_0_6[5]
static const symbol s_3_1[2]
static const symbol s_7_2[1]
static const symbol s_5_27[1]
static const symbol s_1_18[2]
static const symbol s_5_11[2]
static const symbol s_2_3[3]
static const symbol s_5_9[3]
static const symbol s_4_1[2]
static const symbol s_2_0[2]
static const symbol s_4_9[3]
static const symbol s_5_6[2]
static const symbol s_5_16[1]
static const symbol s_1_3[2]
static int r_adjectival(struct SN_env *z)
static const symbol s_1_0[2]
static const symbol s_7_1[1]
static const symbol s_5_17[2]
static int r_verb(struct SN_env *z)
void russian_KOI8_R_close_env(struct SN_env *z)
static const symbol s_3_0[2]
static const symbol s_2_5[1]
static const symbol s_5_4[1]
static const symbol s_1_15[2]
static const symbol s_4_35[3]
static int r_R2(struct SN_env *z)
static const symbol s_5_24[2]
static const struct among a_5[36]
static const symbol s_5_31[1]
static const symbol s_5_8[2]
static const symbol s_1_7[2]
static const struct among a_6[2]
static const symbol s_4_36[2]
static const symbol s_4_30[3]
static const struct among a_2[8]
static const symbol s_5_33[2]
static const symbol s_1_1[2]
static const symbol s_0_0[3]
static const symbol s_4_21[2]
static const symbol s_5_21[2]
static const symbol s_5_22[2]
static const symbol s_4_4[3]
static const symbol s_5_3[1]
static const symbol s_4_6[3]
static int r_derivational(struct SN_env *z)
static const symbol s_1_21[3]
static const symbol s_2_7[3]
static const symbol s_5_7[2]
int russian_KOI8_R_stem(struct SN_env *z)
static const symbol s_4_24[1]
static const symbol s_4_16[2]
static const symbol s_5_14[3]
static const symbol s_4_17[2]
static const struct among a_1[26]
static const symbol s_4_42[3]
static const symbol s_5_23[3]
static int r_perfective_gerund(struct SN_env *z)
static const symbol s_4_43[3]
static const symbol s_4_40[3]
static const symbol s_1_17[2]
static const symbol s_2_4[3]
static const symbol s_4_12[2]
static const struct among a_0[9]
static const symbol s_4_33[3]
static const symbol s_5_25[2]
static const symbol s_4_26[2]
static const symbol s_4_8[3]
static const symbol s_5_20[2]
static const symbol s_4_2[2]
static const symbol s_4_45[3]
static const symbol s_1_14[2]
static const symbol s_4_0[1]
static const symbol s_4_39[2]
static const symbol s_4_19[2]
static const symbol s_4_23[2]
static const symbol s_0_7[6]
static const symbol s_1_8[2]
static const symbol s_5_2[2]
static const symbol s_5_0[1]
static const symbol s_7_0[4]
static const symbol s_1_4[2]
static const symbol s_4_11[4]
static const symbol s_4_25[2]
static const struct among a_4[46]
static const symbol s_4_44[2]
static const symbol s_4_14[3]
static int r_mark_regions(struct SN_env *z)
static const symbol s_7_3[3]
static const symbol s_0_3[1]
static const symbol s_6_0[3]
static const symbol s_5_29[2]
static const symbol s_5_32[2]
static const symbol s_4_13[3]
static const symbol s_5_1[2]
static const symbol s_4_34[2]
static const symbol s_6_1[4]
static const symbol s_1_16[2]
static const symbol s_5_34[1]
static const symbol s_1_25[3]
static const symbol s_4_41[3]
static const symbol s_5_5[2]
static const symbol s_5_13[3]
static const symbol s_4_27[3]
static const symbol s_2_6[2]
static const symbol s_2_1[2]
static const symbol s_5_26[3]
static const unsigned char g_v[]
static const symbol s_1_22[2]
static const symbol s_1_20[3]
static const symbol s_4_7[3]
static int r_reflexive(struct SN_env *z)
static const symbol s_4_31[3]
static const symbol s_5_19[2]
static int r_noun(struct SN_env *z)
struct SN_env * russian_KOI8_R_create_env(void)
static const symbol s_1_12[2]
static const symbol s_5_10[1]
static const symbol s_4_10[4]
static const symbol s_4_28[3]
static const symbol s_0_1[4]
static const symbol s_4_5[2]
static const symbol s_0[]
static const symbol s_4_20[2]
static const symbol s_5_15[4]
static const symbol s_4_38[2]
Definition: api.h:15
int lb
Definition: api.h:17
symbol * p
Definition: api.h:16
int ket
Definition: api.h:17
int c
Definition: api.h:17
int bra
Definition: api.h:17
int l
Definition: api.h:17
struct SN_env z
SNOWBALL_ERR slice_from_s(struct SN_env *z, int s_size, const symbol *s)
Definition: utilities.c:432
int in_grouping(struct SN_env *z, const unsigned char *s, int min, int max, int repeat)
Definition: utilities.c:183
int find_among_b(struct SN_env *z, const struct among *v, int v_size, int(*call_among_func)(struct SN_env *))
Definition: utilities.c:315
int out_grouping(struct SN_env *z, const unsigned char *s, int min, int max, int repeat)
Definition: utilities.c:207
SNOWBALL_ERR slice_del(struct SN_env *z)
Definition: utilities.c:443