1 | #include <rf_core.hh> |
---|
2 | #include <refal/StdIO.hh> |
---|
3 | |
---|
4 | namespace refal |
---|
5 | { |
---|
6 | |
---|
7 | using namespace rfrt; |
---|
8 | |
---|
9 | namespace select |
---|
10 | { |
---|
11 | |
---|
12 | RF_DECL (Main); |
---|
13 | |
---|
14 | RF_DECL (MkArg); |
---|
15 | |
---|
16 | RF_DECL (Select); |
---|
17 | |
---|
18 | RF_DECL (OneOf); |
---|
19 | |
---|
20 | } |
---|
21 | |
---|
22 | |
---|
23 | namespace select |
---|
24 | { |
---|
25 | |
---|
26 | RF_FUNC (Main, (), (RF_RES _v_res1)) |
---|
27 | Expr _v_MkArg1; |
---|
28 | RF_CALL_NOFAIL (MkArg, ("1234567890a"), (_v_MkArg1)); |
---|
29 | Expr _v_ePrefixes; |
---|
30 | _v_ePrefixes = _v_MkArg1; |
---|
31 | RF_CALL_NOFAIL (StdIO::PrintLN, (_v_ePrefixes), ()); |
---|
32 | Expr _v_Select1; |
---|
33 | RF_CALL_NOFAIL (Select, (empty, _v_ePrefixes), (_v_Select1)); |
---|
34 | Expr _v_eXs_m_or_m_sFail; |
---|
35 | _v_eXs_m_or_m_sFail = _v_Select1; |
---|
36 | RF_CALL_NOFAIL (StdIO::PrintLN, (_v_eXs_m_or_m_sFail), ()); |
---|
37 | _v_res1 = empty; |
---|
38 | return true; |
---|
39 | RF_END |
---|
40 | |
---|
41 | RF_FUNC (MkArg, (RF_ARG _v_eString), (RF_RES _v_res1)) |
---|
42 | { |
---|
43 | { |
---|
44 | int _v_leneString_m__m_; |
---|
45 | _v_leneString_m__m_ = (((int) _v_eString.get_len ()) - (1)); |
---|
46 | if (((_v_leneString_m__m_) >= (((1) * (0)))) && !((_v_leneString_m__m_) % (1))) |
---|
47 | { |
---|
48 | if (_v_eString.symbol_at (((_v_leneString_m__m_) / (1)))) |
---|
49 | { |
---|
50 | Expr _v_eString_m__m_ (_v_eString, 0, ((_v_leneString_m__m_) / (1))); |
---|
51 | Expr _v_s_e__e_tmp_m_selectrf_m_18_m_19 (_v_eString, ((_v_leneString_m__m_) / (1)), 1); |
---|
52 | Expr _v_MkArg1; |
---|
53 | RF_CALL_NOFAIL (MkArg, (_v_eString_m__m_), (_v_MkArg1)); |
---|
54 | _v_res1 = _v_eString () + _v_MkArg1; |
---|
55 | return true; |
---|
56 | } |
---|
57 | } |
---|
58 | goto LBranch1; |
---|
59 | } |
---|
60 | LBranch1: {} |
---|
61 | { |
---|
62 | if ((((int) _v_eString.get_len ()) == (0))) |
---|
63 | { |
---|
64 | _v_res1 = empty; |
---|
65 | return true; |
---|
66 | } |
---|
67 | goto LBranch2; |
---|
68 | } |
---|
69 | LBranch2: {} |
---|
70 | error ("Unexpected fail"); |
---|
71 | } |
---|
72 | LBlock1: {} |
---|
73 | return true; |
---|
74 | RF_END |
---|
75 | |
---|
76 | RF_FUNC (Select, (RF_ARG _v_eXs, _v_eSets), (RF_RES _v_res1)) |
---|
77 | { |
---|
78 | { |
---|
79 | if ((((int) _v_eSets.get_len ()) == (0))) |
---|
80 | { |
---|
81 | _v_res1 = _v_eXs (); |
---|
82 | return true; |
---|
83 | } |
---|
84 | goto LBranch1; |
---|
85 | } |
---|
86 | LBranch1: {} |
---|
87 | { |
---|
88 | int _v_leneSets_m__m_; |
---|
89 | _v_leneSets_m__m_ = (((int) _v_eSets.get_len ()) - (1)); |
---|
90 | if (((_v_leneSets_m__m_) >= (((1) * (0)))) && !((_v_leneSets_m__m_) % (1))) |
---|
91 | { |
---|
92 | if (!_v_eSets.symbol_at (0)) |
---|
93 | { |
---|
94 | Expr _v_lderefeSets1 (_v_eSets, 0); |
---|
95 | int _v_leneSet; |
---|
96 | _v_leneSet = (((int) _v_lderefeSets1.get_len ()) - (0)); |
---|
97 | if (((_v_leneSet) >= (((1) * (0)))) && !((_v_leneSet) % (1))) |
---|
98 | { |
---|
99 | int _v_mine_e__e_tmp_m_selectrf_m_27_m_17; |
---|
100 | _v_mine_e__e_tmp_m_selectrf_m_27_m_17 = pxx_max (0, ((((((_v_leneSet) / (1))) - (1 + ((((((_v_leneSet) / (1))) - (1 + 0))) / (1))))) / (1))); |
---|
101 | if (((_v_mine_e__e_tmp_m_selectrf_m_27_m_17) <= (((((((_v_leneSet) / (1))) - (1 + 0))) / (1))))) |
---|
102 | { |
---|
103 | int _v_mine_e__e_tmp_m_selectrf_m_27_m_22; |
---|
104 | _v_mine_e__e_tmp_m_selectrf_m_27_m_22 = pxx_max (0, ((((((_v_leneSet) / (1))) - (1 + ((((((_v_leneSet) / (1))) - (1 + 0))) / (1))))) / (1))); |
---|
105 | if (((_v_mine_e__e_tmp_m_selectrf_m_27_m_22) <= (((((((_v_leneSet) / (1))) - (1 + 0))) / (1))))) |
---|
106 | { |
---|
107 | Expr _v_eSet (_v_lderefeSets1, 0, ((_v_leneSet) / (1))); |
---|
108 | lsplit (_v_eSet, _v_mine_e__e_tmp_m_selectrf_m_27_m_17, _v_e_e__e_tmp_m_selectrf_m_27_m_17, _v_lspliteSet1); |
---|
109 | { |
---|
110 | for ( ; ; iter(_v_eSet)++) |
---|
111 | { |
---|
112 | int _v_lene_e__e_tmp_m_selectrf_m_27_m_22; |
---|
113 | _v_lene_e__e_tmp_m_selectrf_m_27_m_22 = (((int) _v_lspliteSet1.get_len ()) - (1)); |
---|
114 | if (((_v_lene_e__e_tmp_m_selectrf_m_27_m_22) >= (((1) * (0)))) && !((_v_lene_e__e_tmp_m_selectrf_m_27_m_22) % (1))) |
---|
115 | { |
---|
116 | if (_v_lspliteSet1.symbol_at (0)) |
---|
117 | { |
---|
118 | Expr _v_eSets_m__m_ (_v_eSets, 1, ((_v_leneSets_m__m_) / (1))); |
---|
119 | Expr _v_sX (_v_lspliteSet1, 0, 1); |
---|
120 | Expr _v_e_e__e_tmp_m_selectrf_m_27_m_22 (_v_lspliteSet1, 1, ((_v_lene_e__e_tmp_m_selectrf_m_27_m_22) / (1))); |
---|
121 | Expr _v_OneOf1; |
---|
122 | RF_CALL_NOFAIL (OneOf, (_v_eXs, _v_sX), (_v_OneOf1)); |
---|
123 | if (((1) == (1))) |
---|
124 | { |
---|
125 | if (_v_OneOf1.symbol_at (0)) |
---|
126 | { |
---|
127 | Expr _v_constwordF ("F"); |
---|
128 | if (Expr::flat_eq (_v_constwordF, 0, _v_OneOf1, 0, 1)) |
---|
129 | { |
---|
130 | Expr _v_Select1; |
---|
131 | RF_CALL_NOFAIL (Select, (_v_eXs + _v_sX, _v_eSets_m__m_), (_v_Select1)); |
---|
132 | if ((((int) _v_Select1.get_len ()) == (1))) |
---|
133 | { |
---|
134 | if (!_v_Select1.symbol_at (0)) |
---|
135 | { |
---|
136 | Expr _v_lderefSelect11 (_v_Select1, 0); |
---|
137 | int _v_leneXs_m_; |
---|
138 | _v_leneXs_m_ = (((int) _v_lderefSelect11.get_len ()) - (0)); |
---|
139 | if (((_v_leneXs_m_) >= (((1) * (0)))) && !((_v_leneXs_m_) % (1))) |
---|
140 | { |
---|
141 | Expr _v_eXs_m_ (_v_lderefSelect11, 0, ((_v_leneXs_m_) / (1))); |
---|
142 | _v_res1 = _v_eXs_m_ (); |
---|
143 | return true; |
---|
144 | } |
---|
145 | } |
---|
146 | } |
---|
147 | goto LForCont1; |
---|
148 | } |
---|
149 | } |
---|
150 | } |
---|
151 | goto LForCont1; |
---|
152 | } |
---|
153 | goto LForCont1; |
---|
154 | } |
---|
155 | goto LForBreak1; |
---|
156 | LForCont1: {} |
---|
157 | } |
---|
158 | } |
---|
159 | LForBreak1: {} |
---|
160 | } |
---|
161 | } |
---|
162 | } |
---|
163 | } |
---|
164 | } |
---|
165 | goto LBranch2; |
---|
166 | } |
---|
167 | LBranch2: {} |
---|
168 | { |
---|
169 | int _v_lene_e__e_tmp_m_selectrf_m_31_m_6; |
---|
170 | _v_lene_e__e_tmp_m_selectrf_m_31_m_6 = (((int) _v_eSets.get_len ()) - (0)); |
---|
171 | if (((_v_lene_e__e_tmp_m_selectrf_m_31_m_6) >= (((1) * (0)))) && !((_v_lene_e__e_tmp_m_selectrf_m_31_m_6) % (1))) |
---|
172 | { |
---|
173 | Expr _v_e_e__e_tmp_m_selectrf_m_31_m_6 (_v_eSets, 0, ((_v_lene_e__e_tmp_m_selectrf_m_31_m_6) / (1))); |
---|
174 | Expr _v_constchars_p_ ("+"); |
---|
175 | _v_res1 = _v_constchars_p_; |
---|
176 | return true; |
---|
177 | } |
---|
178 | goto LBranch3; |
---|
179 | } |
---|
180 | LBranch3: {} |
---|
181 | error ("Unexpected fail"); |
---|
182 | } |
---|
183 | LBlock1: {} |
---|
184 | return true; |
---|
185 | RF_END |
---|
186 | |
---|
187 | RF_FUNC (OneOf, (RF_ARG _v_eXs, _v_sX), (RF_RES _v_res1)) |
---|
188 | { |
---|
189 | { |
---|
190 | int _v_mine_e__e_tmp_m_selectrf_m_36_m_6; |
---|
191 | _v_mine_e__e_tmp_m_selectrf_m_36_m_6 = pxx_max (0, (((((int) _v_eXs.get_len ()) - (1 + (((((int) _v_eXs.get_len ()) - (1 + 0))) / (1))))) / (1))); |
---|
192 | if (((_v_mine_e__e_tmp_m_selectrf_m_36_m_6) <= ((((((int) _v_eXs.get_len ()) - (1 + 0))) / (1))))) |
---|
193 | { |
---|
194 | int _v_mine_e__e_tmp_m_selectrf_m_36_m_11; |
---|
195 | _v_mine_e__e_tmp_m_selectrf_m_36_m_11 = pxx_max (0, (((((int) _v_eXs.get_len ()) - (1 + (((((int) _v_eXs.get_len ()) - (1 + 0))) / (1))))) / (1))); |
---|
196 | if (((_v_mine_e__e_tmp_m_selectrf_m_36_m_11) <= ((((((int) _v_eXs.get_len ()) - (1 + 0))) / (1))))) |
---|
197 | { |
---|
198 | lsplit (_v_eXs, _v_mine_e__e_tmp_m_selectrf_m_36_m_6, _v_e_e__e_tmp_m_selectrf_m_36_m_6, _v_lspliteXs1); |
---|
199 | { |
---|
200 | for ( ; ; iter(_v_eXs)++) |
---|
201 | { |
---|
202 | int _v_lene_e__e_tmp_m_selectrf_m_36_m_11; |
---|
203 | _v_lene_e__e_tmp_m_selectrf_m_36_m_11 = (((int) _v_lspliteXs1.get_len ()) - (1)); |
---|
204 | if (((_v_lene_e__e_tmp_m_selectrf_m_36_m_11) >= (((1) * (0)))) && !((_v_lene_e__e_tmp_m_selectrf_m_36_m_11) % (1))) |
---|
205 | { |
---|
206 | if (_v_lspliteXs1.symbol_at (0)) |
---|
207 | { |
---|
208 | if (Expr::flat_eq (_v_sX, 0, _v_lspliteXs1, 0, 1)) |
---|
209 | { |
---|
210 | Expr _v_e_e__e_tmp_m_selectrf_m_36_m_11 (_v_lspliteXs1, 1, ((_v_lene_e__e_tmp_m_selectrf_m_36_m_11) / (1))); |
---|
211 | Expr _v_constwordT ("T"); |
---|
212 | _v_res1 = _v_constwordT; |
---|
213 | return true; |
---|
214 | } |
---|
215 | } |
---|
216 | goto LForCont1; |
---|
217 | } |
---|
218 | goto LForBreak1; |
---|
219 | LForCont1: {} |
---|
220 | } |
---|
221 | } |
---|
222 | LForBreak1: {} |
---|
223 | } |
---|
224 | } |
---|
225 | goto LBranch1; |
---|
226 | } |
---|
227 | LBranch1: {} |
---|
228 | { |
---|
229 | int _v_lene_e__e_tmp_m_selectrf_m_38_m_6; |
---|
230 | _v_lene_e__e_tmp_m_selectrf_m_38_m_6 = (((int) _v_eXs.get_len ()) - (0)); |
---|
231 | if (((_v_lene_e__e_tmp_m_selectrf_m_38_m_6) >= (((1) * (0)))) && !((_v_lene_e__e_tmp_m_selectrf_m_38_m_6) % (1))) |
---|
232 | { |
---|
233 | Expr _v_e_e__e_tmp_m_selectrf_m_38_m_6 (_v_eXs, 0, ((_v_lene_e__e_tmp_m_selectrf_m_38_m_6) / (1))); |
---|
234 | Expr _v_constwordF ("F"); |
---|
235 | _v_res1 = _v_constwordF; |
---|
236 | return true; |
---|
237 | } |
---|
238 | goto LBranch2; |
---|
239 | } |
---|
240 | LBranch2: {} |
---|
241 | error ("Unexpected fail"); |
---|
242 | } |
---|
243 | LBlock1: {} |
---|
244 | return true; |
---|
245 | RF_END |
---|
246 | |
---|
247 | } |
---|
248 | |
---|
249 | rfrt::Entry rf_entry (select::Main); |
---|
250 | |
---|
251 | } |
---|