00001
00002
00003
00004 #include "header.h"
00005
00006 #ifdef __cplusplus
00007 extern "C" {
00008 #endif
00009 extern int russian_UTF_8_stem(struct SN_env * z);
00010 #ifdef __cplusplus
00011 }
00012 #endif
00013 static int r_tidy_up(struct SN_env * z);
00014 static int r_derivational(struct SN_env * z);
00015 static int r_noun(struct SN_env * z);
00016 static int r_verb(struct SN_env * z);
00017 static int r_reflexive(struct SN_env * z);
00018 static int r_adjectival(struct SN_env * z);
00019 static int r_adjective(struct SN_env * z);
00020 static int r_perfective_gerund(struct SN_env * z);
00021 static int r_R2(struct SN_env * z);
00022 static int r_mark_regions(struct SN_env * z);
00023 #ifdef __cplusplus
00024 extern "C" {
00025 #endif
00026
00027
00028 extern struct SN_env * russian_UTF_8_create_env(void);
00029 extern void russian_UTF_8_close_env(struct SN_env * z);
00030
00031
00032 #ifdef __cplusplus
00033 }
00034 #endif
00035 static const symbol s_0_0[10] = { 0xD0, 0xB2, 0xD1, 0x88, 0xD0, 0xB8, 0xD1, 0x81, 0xD1, 0x8C };
00036 static const symbol s_0_1[12] = { 0xD1, 0x8B, 0xD0, 0xB2, 0xD1, 0x88, 0xD0, 0xB8, 0xD1, 0x81, 0xD1, 0x8C };
00037 static const symbol s_0_2[12] = { 0xD0, 0xB8, 0xD0, 0xB2, 0xD1, 0x88, 0xD0, 0xB8, 0xD1, 0x81, 0xD1, 0x8C };
00038 static const symbol s_0_3[2] = { 0xD0, 0xB2 };
00039 static const symbol s_0_4[4] = { 0xD1, 0x8B, 0xD0, 0xB2 };
00040 static const symbol s_0_5[4] = { 0xD0, 0xB8, 0xD0, 0xB2 };
00041 static const symbol s_0_6[6] = { 0xD0, 0xB2, 0xD1, 0x88, 0xD0, 0xB8 };
00042 static const symbol s_0_7[8] = { 0xD1, 0x8B, 0xD0, 0xB2, 0xD1, 0x88, 0xD0, 0xB8 };
00043 static const symbol s_0_8[8] = { 0xD0, 0xB8, 0xD0, 0xB2, 0xD1, 0x88, 0xD0, 0xB8 };
00044
00045 static const struct among a_0[9] =
00046 {
00047 { 10, s_0_0, -1, 1, 0},
00048 { 12, s_0_1, 0, 2, 0},
00049 { 12, s_0_2, 0, 2, 0},
00050 { 2, s_0_3, -1, 1, 0},
00051 { 4, s_0_4, 3, 2, 0},
00052 { 4, s_0_5, 3, 2, 0},
00053 { 6, s_0_6, -1, 1, 0},
00054 { 8, s_0_7, 6, 2, 0},
00055 { 8, s_0_8, 6, 2, 0}
00056 };
00057
00058 static const symbol s_1_0[6] = { 0xD0, 0xB5, 0xD0, 0xBC, 0xD1, 0x83 };
00059 static const symbol s_1_1[6] = { 0xD0, 0xBE, 0xD0, 0xBC, 0xD1, 0x83 };
00060 static const symbol s_1_2[4] = { 0xD1, 0x8B, 0xD1, 0x85 };
00061 static const symbol s_1_3[4] = { 0xD0, 0xB8, 0xD1, 0x85 };
00062 static const symbol s_1_4[4] = { 0xD1, 0x83, 0xD1, 0x8E };
00063 static const symbol s_1_5[4] = { 0xD1, 0x8E, 0xD1, 0x8E };
00064 static const symbol s_1_6[4] = { 0xD0, 0xB5, 0xD1, 0x8E };
00065 static const symbol s_1_7[4] = { 0xD0, 0xBE, 0xD1, 0x8E };
00066 static const symbol s_1_8[4] = { 0xD1, 0x8F, 0xD1, 0x8F };
00067 static const symbol s_1_9[4] = { 0xD0, 0xB0, 0xD1, 0x8F };
00068 static const symbol s_1_10[4] = { 0xD1, 0x8B, 0xD0, 0xB5 };
00069 static const symbol s_1_11[4] = { 0xD0, 0xB5, 0xD0, 0xB5 };
00070 static const symbol s_1_12[4] = { 0xD0, 0xB8, 0xD0, 0xB5 };
00071 static const symbol s_1_13[4] = { 0xD0, 0xBE, 0xD0, 0xB5 };
00072 static const symbol s_1_14[6] = { 0xD1, 0x8B, 0xD0, 0xBC, 0xD0, 0xB8 };
00073 static const symbol s_1_15[6] = { 0xD0, 0xB8, 0xD0, 0xBC, 0xD0, 0xB8 };
00074 static const symbol s_1_16[4] = { 0xD1, 0x8B, 0xD0, 0xB9 };
00075 static const symbol s_1_17[4] = { 0xD0, 0xB5, 0xD0, 0xB9 };
00076 static const symbol s_1_18[4] = { 0xD0, 0xB8, 0xD0, 0xB9 };
00077 static const symbol s_1_19[4] = { 0xD0, 0xBE, 0xD0, 0xB9 };
00078 static const symbol s_1_20[4] = { 0xD1, 0x8B, 0xD0, 0xBC };
00079 static const symbol s_1_21[4] = { 0xD0, 0xB5, 0xD0, 0xBC };
00080 static const symbol s_1_22[4] = { 0xD0, 0xB8, 0xD0, 0xBC };
00081 static const symbol s_1_23[4] = { 0xD0, 0xBE, 0xD0, 0xBC };
00082 static const symbol s_1_24[6] = { 0xD0, 0xB5, 0xD0, 0xB3, 0xD0, 0xBE };
00083 static const symbol s_1_25[6] = { 0xD0, 0xBE, 0xD0, 0xB3, 0xD0, 0xBE };
00084
00085 static const struct among a_1[26] =
00086 {
00087 { 6, s_1_0, -1, 1, 0},
00088 { 6, s_1_1, -1, 1, 0},
00089 { 4, s_1_2, -1, 1, 0},
00090 { 4, s_1_3, -1, 1, 0},
00091 { 4, s_1_4, -1, 1, 0},
00092 { 4, s_1_5, -1, 1, 0},
00093 { 4, s_1_6, -1, 1, 0},
00094 { 4, s_1_7, -1, 1, 0},
00095 { 4, s_1_8, -1, 1, 0},
00096 { 4, s_1_9, -1, 1, 0},
00097 { 4, s_1_10, -1, 1, 0},
00098 { 4, s_1_11, -1, 1, 0},
00099 { 4, s_1_12, -1, 1, 0},
00100 { 4, s_1_13, -1, 1, 0},
00101 { 6, s_1_14, -1, 1, 0},
00102 { 6, s_1_15, -1, 1, 0},
00103 { 4, s_1_16, -1, 1, 0},
00104 { 4, s_1_17, -1, 1, 0},
00105 { 4, s_1_18, -1, 1, 0},
00106 { 4, s_1_19, -1, 1, 0},
00107 { 4, s_1_20, -1, 1, 0},
00108 { 4, s_1_21, -1, 1, 0},
00109 { 4, s_1_22, -1, 1, 0},
00110 { 4, s_1_23, -1, 1, 0},
00111 { 6, s_1_24, -1, 1, 0},
00112 { 6, s_1_25, -1, 1, 0}
00113 };
00114
00115 static const symbol s_2_0[4] = { 0xD0, 0xB2, 0xD1, 0x88 };
00116 static const symbol s_2_1[6] = { 0xD1, 0x8B, 0xD0, 0xB2, 0xD1, 0x88 };
00117 static const symbol s_2_2[6] = { 0xD0, 0xB8, 0xD0, 0xB2, 0xD1, 0x88 };
00118 static const symbol s_2_3[2] = { 0xD1, 0x89 };
00119 static const symbol s_2_4[4] = { 0xD1, 0x8E, 0xD1, 0x89 };
00120 static const symbol s_2_5[6] = { 0xD1, 0x83, 0xD1, 0x8E, 0xD1, 0x89 };
00121 static const symbol s_2_6[4] = { 0xD0, 0xB5, 0xD0, 0xBC };
00122 static const symbol s_2_7[4] = { 0xD0, 0xBD, 0xD0, 0xBD };
00123
00124 static const struct among a_2[8] =
00125 {
00126 { 4, s_2_0, -1, 1, 0},
00127 { 6, s_2_1, 0, 2, 0},
00128 { 6, s_2_2, 0, 2, 0},
00129 { 2, s_2_3, -1, 1, 0},
00130 { 4, s_2_4, 3, 1, 0},
00131 { 6, s_2_5, 4, 2, 0},
00132 { 4, s_2_6, -1, 1, 0},
00133 { 4, s_2_7, -1, 1, 0}
00134 };
00135
00136 static const symbol s_3_0[4] = { 0xD1, 0x81, 0xD1, 0x8C };
00137 static const symbol s_3_1[4] = { 0xD1, 0x81, 0xD1, 0x8F };
00138
00139 static const struct among a_3[2] =
00140 {
00141 { 4, s_3_0, -1, 1, 0},
00142 { 4, s_3_1, -1, 1, 0}
00143 };
00144
00145 static const symbol s_4_0[4] = { 0xD1, 0x8B, 0xD1, 0x82 };
00146 static const symbol s_4_1[4] = { 0xD1, 0x8E, 0xD1, 0x82 };
00147 static const symbol s_4_2[6] = { 0xD1, 0x83, 0xD1, 0x8E, 0xD1, 0x82 };
00148 static const symbol s_4_3[4] = { 0xD1, 0x8F, 0xD1, 0x82 };
00149 static const symbol s_4_4[4] = { 0xD0, 0xB5, 0xD1, 0x82 };
00150 static const symbol s_4_5[6] = { 0xD1, 0x83, 0xD0, 0xB5, 0xD1, 0x82 };
00151 static const symbol s_4_6[4] = { 0xD0, 0xB8, 0xD1, 0x82 };
00152 static const symbol s_4_7[4] = { 0xD0, 0xBD, 0xD1, 0x8B };
00153 static const symbol s_4_8[6] = { 0xD0, 0xB5, 0xD0, 0xBD, 0xD1, 0x8B };
00154 static const symbol s_4_9[4] = { 0xD1, 0x82, 0xD1, 0x8C };
00155 static const symbol s_4_10[6] = { 0xD1, 0x8B, 0xD1, 0x82, 0xD1, 0x8C };
00156 static const symbol s_4_11[6] = { 0xD0, 0xB8, 0xD1, 0x82, 0xD1, 0x8C };
00157 static const symbol s_4_12[6] = { 0xD0, 0xB5, 0xD1, 0x88, 0xD1, 0x8C };
00158 static const symbol s_4_13[6] = { 0xD0, 0xB8, 0xD1, 0x88, 0xD1, 0x8C };
00159 static const symbol s_4_14[2] = { 0xD1, 0x8E };
00160 static const symbol s_4_15[4] = { 0xD1, 0x83, 0xD1, 0x8E };
00161 static const symbol s_4_16[4] = { 0xD0, 0xBB, 0xD0, 0xB0 };
00162 static const symbol s_4_17[6] = { 0xD1, 0x8B, 0xD0, 0xBB, 0xD0, 0xB0 };
00163 static const symbol s_4_18[6] = { 0xD0, 0xB8, 0xD0, 0xBB, 0xD0, 0xB0 };
00164 static const symbol s_4_19[4] = { 0xD0, 0xBD, 0xD0, 0xB0 };
00165 static const symbol s_4_20[6] = { 0xD0, 0xB5, 0xD0, 0xBD, 0xD0, 0xB0 };
00166 static const symbol s_4_21[6] = { 0xD0, 0xB5, 0xD1, 0x82, 0xD0, 0xB5 };
00167 static const symbol s_4_22[6] = { 0xD0, 0xB8, 0xD1, 0x82, 0xD0, 0xB5 };
00168 static const symbol s_4_23[6] = { 0xD0, 0xB9, 0xD1, 0x82, 0xD0, 0xB5 };
00169 static const symbol s_4_24[8] = { 0xD1, 0x83, 0xD0, 0xB9, 0xD1, 0x82, 0xD0, 0xB5 };
00170 static const symbol s_4_25[8] = { 0xD0, 0xB5, 0xD0, 0xB9, 0xD1, 0x82, 0xD0, 0xB5 };
00171 static const symbol s_4_26[4] = { 0xD0, 0xBB, 0xD0, 0xB8 };
00172 static const symbol s_4_27[6] = { 0xD1, 0x8B, 0xD0, 0xBB, 0xD0, 0xB8 };
00173 static const symbol s_4_28[6] = { 0xD0, 0xB8, 0xD0, 0xBB, 0xD0, 0xB8 };
00174 static const symbol s_4_29[2] = { 0xD0, 0xB9 };
00175 static const symbol s_4_30[4] = { 0xD1, 0x83, 0xD0, 0xB9 };
00176 static const symbol s_4_31[4] = { 0xD0, 0xB5, 0xD0, 0xB9 };
00177 static const symbol s_4_32[2] = { 0xD0, 0xBB };
00178 static const symbol s_4_33[4] = { 0xD1, 0x8B, 0xD0, 0xBB };
00179 static const symbol s_4_34[4] = { 0xD0, 0xB8, 0xD0, 0xBB };
00180 static const symbol s_4_35[4] = { 0xD1, 0x8B, 0xD0, 0xBC };
00181 static const symbol s_4_36[4] = { 0xD0, 0xB5, 0xD0, 0xBC };
00182 static const symbol s_4_37[4] = { 0xD0, 0xB8, 0xD0, 0xBC };
00183 static const symbol s_4_38[2] = { 0xD0, 0xBD };
00184 static const symbol s_4_39[4] = { 0xD0, 0xB5, 0xD0, 0xBD };
00185 static const symbol s_4_40[4] = { 0xD0, 0xBB, 0xD0, 0xBE };
00186 static const symbol s_4_41[6] = { 0xD1, 0x8B, 0xD0, 0xBB, 0xD0, 0xBE };
00187 static const symbol s_4_42[6] = { 0xD0, 0xB8, 0xD0, 0xBB, 0xD0, 0xBE };
00188 static const symbol s_4_43[4] = { 0xD0, 0xBD, 0xD0, 0xBE };
00189 static const symbol s_4_44[6] = { 0xD0, 0xB5, 0xD0, 0xBD, 0xD0, 0xBE };
00190 static const symbol s_4_45[6] = { 0xD0, 0xBD, 0xD0, 0xBD, 0xD0, 0xBE };
00191
00192 static const struct among a_4[46] =
00193 {
00194 { 4, s_4_0, -1, 2, 0},
00195 { 4, s_4_1, -1, 1, 0},
00196 { 6, s_4_2, 1, 2, 0},
00197 { 4, s_4_3, -1, 2, 0},
00198 { 4, s_4_4, -1, 1, 0},
00199 { 6, s_4_5, 4, 2, 0},
00200 { 4, s_4_6, -1, 2, 0},
00201 { 4, s_4_7, -1, 1, 0},
00202 { 6, s_4_8, 7, 2, 0},
00203 { 4, s_4_9, -1, 1, 0},
00204 { 6, s_4_10, 9, 2, 0},
00205 { 6, s_4_11, 9, 2, 0},
00206 { 6, s_4_12, -1, 1, 0},
00207 { 6, s_4_13, -1, 2, 0},
00208 { 2, s_4_14, -1, 2, 0},
00209 { 4, s_4_15, 14, 2, 0},
00210 { 4, s_4_16, -1, 1, 0},
00211 { 6, s_4_17, 16, 2, 0},
00212 { 6, s_4_18, 16, 2, 0},
00213 { 4, s_4_19, -1, 1, 0},
00214 { 6, s_4_20, 19, 2, 0},
00215 { 6, s_4_21, -1, 1, 0},
00216 { 6, s_4_22, -1, 2, 0},
00217 { 6, s_4_23, -1, 1, 0},
00218 { 8, s_4_24, 23, 2, 0},
00219 { 8, s_4_25, 23, 2, 0},
00220 { 4, s_4_26, -1, 1, 0},
00221 { 6, s_4_27, 26, 2, 0},
00222 { 6, s_4_28, 26, 2, 0},
00223 { 2, s_4_29, -1, 1, 0},
00224 { 4, s_4_30, 29, 2, 0},
00225 { 4, s_4_31, 29, 2, 0},
00226 { 2, s_4_32, -1, 1, 0},
00227 { 4, s_4_33, 32, 2, 0},
00228 { 4, s_4_34, 32, 2, 0},
00229 { 4, s_4_35, -1, 2, 0},
00230 { 4, s_4_36, -1, 1, 0},
00231 { 4, s_4_37, -1, 2, 0},
00232 { 2, s_4_38, -1, 1, 0},
00233 { 4, s_4_39, 38, 2, 0},
00234 { 4, s_4_40, -1, 1, 0},
00235 { 6, s_4_41, 40, 2, 0},
00236 { 6, s_4_42, 40, 2, 0},
00237 { 4, s_4_43, -1, 1, 0},
00238 { 6, s_4_44, 43, 2, 0},
00239 { 6, s_4_45, 43, 1, 0}
00240 };
00241
00242 static const symbol s_5_0[2] = { 0xD1, 0x83 };
00243 static const symbol s_5_1[4] = { 0xD1, 0x8F, 0xD1, 0x85 };
00244 static const symbol s_5_2[6] = { 0xD0, 0xB8, 0xD1, 0x8F, 0xD1, 0x85 };
00245 static const symbol s_5_3[4] = { 0xD0, 0xB0, 0xD1, 0x85 };
00246 static const symbol s_5_4[2] = { 0xD1, 0x8B };
00247 static const symbol s_5_5[2] = { 0xD1, 0x8C };
00248 static const symbol s_5_6[2] = { 0xD1, 0x8E };
00249 static const symbol s_5_7[4] = { 0xD1, 0x8C, 0xD1, 0x8E };
00250 static const symbol s_5_8[4] = { 0xD0, 0xB8, 0xD1, 0x8E };
00251 static const symbol s_5_9[2] = { 0xD1, 0x8F };
00252 static const symbol s_5_10[4] = { 0xD1, 0x8C, 0xD1, 0x8F };
00253 static const symbol s_5_11[4] = { 0xD0, 0xB8, 0xD1, 0x8F };
00254 static const symbol s_5_12[2] = { 0xD0, 0xB0 };
00255 static const symbol s_5_13[4] = { 0xD0, 0xB5, 0xD0, 0xB2 };
00256 static const symbol s_5_14[4] = { 0xD0, 0xBE, 0xD0, 0xB2 };
00257 static const symbol s_5_15[2] = { 0xD0, 0xB5 };
00258 static const symbol s_5_16[4] = { 0xD1, 0x8C, 0xD0, 0xB5 };
00259 static const symbol s_5_17[4] = { 0xD0, 0xB8, 0xD0, 0xB5 };
00260 static const symbol s_5_18[2] = { 0xD0, 0xB8 };
00261 static const symbol s_5_19[4] = { 0xD0, 0xB5, 0xD0, 0xB8 };
00262 static const symbol s_5_20[4] = { 0xD0, 0xB8, 0xD0, 0xB8 };
00263 static const symbol s_5_21[6] = { 0xD1, 0x8F, 0xD0, 0xBC, 0xD0, 0xB8 };
00264 static const symbol s_5_22[8] = { 0xD0, 0xB8, 0xD1, 0x8F, 0xD0, 0xBC, 0xD0, 0xB8 };
00265 static const symbol s_5_23[6] = { 0xD0, 0xB0, 0xD0, 0xBC, 0xD0, 0xB8 };
00266 static const symbol s_5_24[2] = { 0xD0, 0xB9 };
00267 static const symbol s_5_25[4] = { 0xD0, 0xB5, 0xD0, 0xB9 };
00268 static const symbol s_5_26[6] = { 0xD0, 0xB8, 0xD0, 0xB5, 0xD0, 0xB9 };
00269 static const symbol s_5_27[4] = { 0xD0, 0xB8, 0xD0, 0xB9 };
00270 static const symbol s_5_28[4] = { 0xD0, 0xBE, 0xD0, 0xB9 };
00271 static const symbol s_5_29[4] = { 0xD1, 0x8F, 0xD0, 0xBC };
00272 static const symbol s_5_30[6] = { 0xD0, 0xB8, 0xD1, 0x8F, 0xD0, 0xBC };
00273 static const symbol s_5_31[4] = { 0xD0, 0xB0, 0xD0, 0xBC };
00274 static const symbol s_5_32[4] = { 0xD0, 0xB5, 0xD0, 0xBC };
00275 static const symbol s_5_33[6] = { 0xD0, 0xB8, 0xD0, 0xB5, 0xD0, 0xBC };
00276 static const symbol s_5_34[4] = { 0xD0, 0xBE, 0xD0, 0xBC };
00277 static const symbol s_5_35[2] = { 0xD0, 0xBE };
00278
00279 static const struct among a_5[36] =
00280 {
00281 { 2, s_5_0, -1, 1, 0},
00282 { 4, s_5_1, -1, 1, 0},
00283 { 6, s_5_2, 1, 1, 0},
00284 { 4, s_5_3, -1, 1, 0},
00285 { 2, s_5_4, -1, 1, 0},
00286 { 2, s_5_5, -1, 1, 0},
00287 { 2, s_5_6, -1, 1, 0},
00288 { 4, s_5_7, 6, 1, 0},
00289 { 4, s_5_8, 6, 1, 0},
00290 { 2, s_5_9, -1, 1, 0},
00291 { 4, s_5_10, 9, 1, 0},
00292 { 4, s_5_11, 9, 1, 0},
00293 { 2, s_5_12, -1, 1, 0},
00294 { 4, s_5_13, -1, 1, 0},
00295 { 4, s_5_14, -1, 1, 0},
00296 { 2, s_5_15, -1, 1, 0},
00297 { 4, s_5_16, 15, 1, 0},
00298 { 4, s_5_17, 15, 1, 0},
00299 { 2, s_5_18, -1, 1, 0},
00300 { 4, s_5_19, 18, 1, 0},
00301 { 4, s_5_20, 18, 1, 0},
00302 { 6, s_5_21, 18, 1, 0},
00303 { 8, s_5_22, 21, 1, 0},
00304 { 6, s_5_23, 18, 1, 0},
00305 { 2, s_5_24, -1, 1, 0},
00306 { 4, s_5_25, 24, 1, 0},
00307 { 6, s_5_26, 25, 1, 0},
00308 { 4, s_5_27, 24, 1, 0},
00309 { 4, s_5_28, 24, 1, 0},
00310 { 4, s_5_29, -1, 1, 0},
00311 { 6, s_5_30, 29, 1, 0},
00312 { 4, s_5_31, -1, 1, 0},
00313 { 4, s_5_32, -1, 1, 0},
00314 { 6, s_5_33, 32, 1, 0},
00315 { 4, s_5_34, -1, 1, 0},
00316 { 2, s_5_35, -1, 1, 0}
00317 };
00318
00319 static const symbol s_6_0[6] = { 0xD0, 0xBE, 0xD1, 0x81, 0xD1, 0x82 };
00320 static const symbol s_6_1[8] = { 0xD0, 0xBE, 0xD1, 0x81, 0xD1, 0x82, 0xD1, 0x8C };
00321
00322 static const struct among a_6[2] =
00323 {
00324 { 6, s_6_0, -1, 1, 0},
00325 { 8, s_6_1, -1, 1, 0}
00326 };
00327
00328 static const symbol s_7_0[6] = { 0xD0, 0xB5, 0xD0, 0xB9, 0xD1, 0x88 };
00329 static const symbol s_7_1[2] = { 0xD1, 0x8C };
00330 static const symbol s_7_2[8] = { 0xD0, 0xB5, 0xD0, 0xB9, 0xD1, 0x88, 0xD0, 0xB5 };
00331 static const symbol s_7_3[2] = { 0xD0, 0xBD };
00332
00333 static const struct among a_7[4] =
00334 {
00335 { 6, s_7_0, -1, 1, 0},
00336 { 2, s_7_1, -1, 3, 0},
00337 { 8, s_7_2, -1, 1, 0},
00338 { 2, s_7_3, -1, 2, 0}
00339 };
00340
00341 static const unsigned char g_v[] = { 33, 65, 8, 232 };
00342
00343 static const symbol s_0[] = { 0xD0, 0xB0 };
00344 static const symbol s_1[] = { 0xD1, 0x8F };
00345 static const symbol s_2[] = { 0xD0, 0xB0 };
00346 static const symbol s_3[] = { 0xD1, 0x8F };
00347 static const symbol s_4[] = { 0xD0, 0xB0 };
00348 static const symbol s_5[] = { 0xD1, 0x8F };
00349 static const symbol s_6[] = { 0xD0, 0xBD };
00350 static const symbol s_7[] = { 0xD0, 0xBD };
00351 static const symbol s_8[] = { 0xD0, 0xBD };
00352 static const symbol s_9[] = { 0xD0, 0xB8 };
00353
00354 static int r_mark_regions(struct SN_env * z) {
00355 z->I[0] = z->l;
00356 z->I[1] = z->l;
00357 { int c1 = z->c;
00358 {
00359 int ret = out_grouping_U(z, g_v, 1072, 1103, 1);
00360 if (ret < 0) goto lab0;
00361 z->c += ret;
00362 }
00363 z->I[0] = z->c;
00364 {
00365 int ret = in_grouping_U(z, g_v, 1072, 1103, 1);
00366 if (ret < 0) goto lab0;
00367 z->c += ret;
00368 }
00369 {
00370 int ret = out_grouping_U(z, g_v, 1072, 1103, 1);
00371 if (ret < 0) goto lab0;
00372 z->c += ret;
00373 }
00374 {
00375 int ret = in_grouping_U(z, g_v, 1072, 1103, 1);
00376 if (ret < 0) goto lab0;
00377 z->c += ret;
00378 }
00379 z->I[1] = z->c;
00380 lab0:
00381 z->c = c1;
00382 }
00383 return 1;
00384 }
00385
00386 static int r_R2(struct SN_env * z) {
00387 if (!(z->I[1] <= z->c)) return 0;
00388 return 1;
00389 }
00390
00391 static int r_perfective_gerund(struct SN_env * z) {
00392 int among_var;
00393 z->ket = z->c;
00394 among_var = find_among_b(z, a_0, 9);
00395 if (!(among_var)) return 0;
00396 z->bra = z->c;
00397 switch(among_var) {
00398 case 0: return 0;
00399 case 1:
00400 { int m1 = z->l - z->c; (void)m1;
00401 if (!(eq_s_b(z, 2, s_0))) goto lab1;
00402 goto lab0;
00403 lab1:
00404 z->c = z->l - m1;
00405 if (!(eq_s_b(z, 2, s_1))) return 0;
00406 }
00407 lab0:
00408 { int ret = slice_del(z);
00409 if (ret < 0) return ret;
00410 }
00411 break;
00412 case 2:
00413 { int ret = slice_del(z);
00414 if (ret < 0) return ret;
00415 }
00416 break;
00417 }
00418 return 1;
00419 }
00420
00421 static int r_adjective(struct SN_env * z) {
00422 int among_var;
00423 z->ket = z->c;
00424 among_var = find_among_b(z, a_1, 26);
00425 if (!(among_var)) return 0;
00426 z->bra = z->c;
00427 switch(among_var) {
00428 case 0: return 0;
00429 case 1:
00430 { int ret = slice_del(z);
00431 if (ret < 0) return ret;
00432 }
00433 break;
00434 }
00435 return 1;
00436 }
00437
00438 static int r_adjectival(struct SN_env * z) {
00439 int among_var;
00440 { int ret = r_adjective(z);
00441 if (ret == 0) return 0;
00442 if (ret < 0) return ret;
00443 }
00444 { int m_keep = z->l - z->c;
00445 z->ket = z->c;
00446 among_var = find_among_b(z, a_2, 8);
00447 if (!(among_var)) { z->c = z->l - m_keep; goto lab0; }
00448 z->bra = z->c;
00449 switch(among_var) {
00450 case 0: { z->c = z->l - m_keep; goto lab0; }
00451 case 1:
00452 { int m1 = z->l - z->c; (void)m1;
00453 if (!(eq_s_b(z, 2, s_2))) goto lab2;
00454 goto lab1;
00455 lab2:
00456 z->c = z->l - m1;
00457 if (!(eq_s_b(z, 2, s_3))) { z->c = z->l - m_keep; goto lab0; }
00458 }
00459 lab1:
00460 { int ret = slice_del(z);
00461 if (ret < 0) return ret;
00462 }
00463 break;
00464 case 2:
00465 { int ret = slice_del(z);
00466 if (ret < 0) return ret;
00467 }
00468 break;
00469 }
00470 lab0:
00471 ;
00472 }
00473 return 1;
00474 }
00475
00476 static int r_reflexive(struct SN_env * z) {
00477 int among_var;
00478 z->ket = z->c;
00479 if (z->c - 3 <= z->lb || (z->p[z->c - 1] != 140 && z->p[z->c - 1] != 143)) return 0;
00480 among_var = find_among_b(z, a_3, 2);
00481 if (!(among_var)) return 0;
00482 z->bra = z->c;
00483 switch(among_var) {
00484 case 0: return 0;
00485 case 1:
00486 { int ret = slice_del(z);
00487 if (ret < 0) return ret;
00488 }
00489 break;
00490 }
00491 return 1;
00492 }
00493
00494 static int r_verb(struct SN_env * z) {
00495 int among_var;
00496 z->ket = z->c;
00497 among_var = find_among_b(z, a_4, 46);
00498 if (!(among_var)) return 0;
00499 z->bra = z->c;
00500 switch(among_var) {
00501 case 0: return 0;
00502 case 1:
00503 { int m1 = z->l - z->c; (void)m1;
00504 if (!(eq_s_b(z, 2, s_4))) goto lab1;
00505 goto lab0;
00506 lab1:
00507 z->c = z->l - m1;
00508 if (!(eq_s_b(z, 2, s_5))) return 0;
00509 }
00510 lab0:
00511 { int ret = slice_del(z);
00512 if (ret < 0) return ret;
00513 }
00514 break;
00515 case 2:
00516 { int ret = slice_del(z);
00517 if (ret < 0) return ret;
00518 }
00519 break;
00520 }
00521 return 1;
00522 }
00523
00524 static int r_noun(struct SN_env * z) {
00525 int among_var;
00526 z->ket = z->c;
00527 among_var = find_among_b(z, a_5, 36);
00528 if (!(among_var)) return 0;
00529 z->bra = z->c;
00530 switch(among_var) {
00531 case 0: return 0;
00532 case 1:
00533 { int ret = slice_del(z);
00534 if (ret < 0) return ret;
00535 }
00536 break;
00537 }
00538 return 1;
00539 }
00540
00541 static int r_derivational(struct SN_env * z) {
00542 int among_var;
00543 z->ket = z->c;
00544 if (z->c - 5 <= z->lb || (z->p[z->c - 1] != 130 && z->p[z->c - 1] != 140)) return 0;
00545 among_var = find_among_b(z, a_6, 2);
00546 if (!(among_var)) return 0;
00547 z->bra = z->c;
00548 { int ret = r_R2(z);
00549 if (ret == 0) return 0;
00550 if (ret < 0) return ret;
00551 }
00552 switch(among_var) {
00553 case 0: return 0;
00554 case 1:
00555 { int ret = slice_del(z);
00556 if (ret < 0) return ret;
00557 }
00558 break;
00559 }
00560 return 1;
00561 }
00562
00563 static int r_tidy_up(struct SN_env * z) {
00564 int among_var;
00565 z->ket = z->c;
00566 among_var = find_among_b(z, a_7, 4);
00567 if (!(among_var)) return 0;
00568 z->bra = z->c;
00569 switch(among_var) {
00570 case 0: return 0;
00571 case 1:
00572 { int ret = slice_del(z);
00573 if (ret < 0) return ret;
00574 }
00575 z->ket = z->c;
00576 if (!(eq_s_b(z, 2, s_6))) return 0;
00577 z->bra = z->c;
00578 if (!(eq_s_b(z, 2, s_7))) return 0;
00579 { int ret = slice_del(z);
00580 if (ret < 0) return ret;
00581 }
00582 break;
00583 case 2:
00584 if (!(eq_s_b(z, 2, s_8))) return 0;
00585 { int ret = slice_del(z);
00586 if (ret < 0) return ret;
00587 }
00588 break;
00589 case 3:
00590 { int ret = slice_del(z);
00591 if (ret < 0) return ret;
00592 }
00593 break;
00594 }
00595 return 1;
00596 }
00597
00598 extern int russian_UTF_8_stem(struct SN_env * z) {
00599 { int c1 = z->c;
00600 { int ret = r_mark_regions(z);
00601 if (ret == 0) goto lab0;
00602 if (ret < 0) return ret;
00603 }
00604 lab0:
00605 z->c = c1;
00606 }
00607 z->lb = z->c; z->c = z->l;
00608
00609 { int mlimit;
00610 int m2 = z->l - z->c; (void)m2;
00611 if (z->c < z->I[0]) return 0;
00612 z->c = z->I[0];
00613 mlimit = z->lb; z->lb = z->c;
00614 z->c = z->l - m2;
00615 { int m3 = z->l - z->c; (void)m3;
00616 { int m4 = z->l - z->c; (void)m4;
00617 { int ret = r_perfective_gerund(z);
00618 if (ret == 0) goto lab3;
00619 if (ret < 0) return ret;
00620 }
00621 goto lab2;
00622 lab3:
00623 z->c = z->l - m4;
00624 { int m_keep = z->l - z->c;
00625 { int ret = r_reflexive(z);
00626 if (ret == 0) { z->c = z->l - m_keep; goto lab4; }
00627 if (ret < 0) return ret;
00628 }
00629 lab4:
00630 ;
00631 }
00632 { int m5 = z->l - z->c; (void)m5;
00633 { int ret = r_adjectival(z);
00634 if (ret == 0) goto lab6;
00635 if (ret < 0) return ret;
00636 }
00637 goto lab5;
00638 lab6:
00639 z->c = z->l - m5;
00640 { int ret = r_verb(z);
00641 if (ret == 0) goto lab7;
00642 if (ret < 0) return ret;
00643 }
00644 goto lab5;
00645 lab7:
00646 z->c = z->l - m5;
00647 { int ret = r_noun(z);
00648 if (ret == 0) goto lab1;
00649 if (ret < 0) return ret;
00650 }
00651 }
00652 lab5:
00653 ;
00654 }
00655 lab2:
00656 lab1:
00657 z->c = z->l - m3;
00658 }
00659 { int m_keep = z->l - z->c;
00660 z->ket = z->c;
00661 if (!(eq_s_b(z, 2, s_9))) { z->c = z->l - m_keep; goto lab8; }
00662 z->bra = z->c;
00663 { int ret = slice_del(z);
00664 if (ret < 0) return ret;
00665 }
00666 lab8:
00667 ;
00668 }
00669 { int m6 = z->l - z->c; (void)m6;
00670 { int ret = r_derivational(z);
00671 if (ret == 0) goto lab9;
00672 if (ret < 0) return ret;
00673 }
00674 lab9:
00675 z->c = z->l - m6;
00676 }
00677 { int m7 = z->l - z->c; (void)m7;
00678 { int ret = r_tidy_up(z);
00679 if (ret == 0) goto lab10;
00680 if (ret < 0) return ret;
00681 }
00682 lab10:
00683 z->c = z->l - m7;
00684 }
00685 z->lb = mlimit;
00686 }
00687 z->c = z->lb;
00688 return 1;
00689 }
00690
00691 extern struct SN_env * russian_UTF_8_create_env(void) { return SN_create_env(0, 2, 0); }
00692
00693 extern void russian_UTF_8_close_env(struct SN_env * z) { SN_close_env(z, 0); }
00694