comparison string.rhope @ 100:f51c4c17457c

Broken port of parser to compiler
author Mike Pavone <pavone@retrodev.com>
date Mon, 09 Aug 2010 02:03:57 -0400
parents e09c2d1d6d5b
children 2d2da148d844 43cc42df26cc
comparison
equal deleted inserted replaced
99:e09c2d1d6d5b 100:f51c4c17457c
104 read[0, [Array[]]Set[0, 0u8], 1i64] 104 read[0, [Array[]]Set[0, 0u8], 1i64]
105 {} 105 {}
106 { out <- String[~] } 106 { out <- String[~] }
107 } 107 }
108 108
109 _String to Int32[current,index,array:out] 109 _String to Int[current,index,array,ten,conv:out]
110 { 110 {
111 char <- [array]Index[index] 111 char <- [array]Index[index]
112 { 112 {
113 If[[char]<[48u8]] 113 If[[char]<[48u8]]
114 { 114 {
116 }{ 116 }{
117 If[[char]>[57u8]] 117 If[[char]>[57u8]]
118 { 118 {
119 out <- Val[current] 119 out <- Val[current]
120 }{ 120 }{
121 out <- _String to Int32[[[current]*[10i32]]+[Int32[[char]-[48u8]]], [index]+[1], array] 121 out <- _String to Int[[[current]*[ten]]+[[conv]Call[[char]-[48u8]]], [index]+[1], array, ten, conv]
122 } 122 }
123 } 123 }
124 124
125 }{ 125 }{
126 out <- Val[current] 126 out <- Val[current]
127 } 127 }
128 } 128 }
129 129
130 Int32@String[string:out] 130 U8toI8[val:out]
131 {
132 out <- Trunc Int8[Int16[val]]
133 }
134
135 Int8@String[string:out]
131 { 136 {
132 buf <- [string]Buffer >> 137 buf <- [string]Buffer >>
133 [buf]Index[0] 138 [buf]Index[0]
134 { 139 {
135 If[[~]=[45u8]] 140 If[[~]=[45u8]]
136 { 141 {
137 out <- [0i32]-[_String to Int32[0i32, 1, buf]] 142 out <- [0i8]-[_String to Int[0i8, 1, buf, 10i8, U8toI8[?]]]
138 }{ 143 }{
139 out <- _String to Int32[0i32, 0, buf] 144 out <- _String to Int[0i8, 0, buf, 10i8, U8toI8[?]]
145 }
146 }{
147 out <- 0i8
148 }
149
150 }
151
152
153 Int16@String[string:out]
154 {
155 buf <- [string]Buffer >>
156 [buf]Index[0]
157 {
158 If[[~]=[45u8]]
159 {
160 out <- [0i16]-[_String to Int[0i16, 1, buf, 10i16, Int16[?]]]
161 }{
162 out <- _String to Int[0i16, 0, buf, 10i16, Int16[?]]
163 }
164 }{
165 out <- 0i16
166 }
167
168 }
169
170 Int32@String[string:out]
171 {
172 buf <- [string]Buffer >>
173 [buf]Index[0]
174 {
175 If[[~]=[45u8]]
176 {
177 out <- [0i32]-[_String to Int[0i32, 1, buf, 10i32, Int32[?]]]
178 }{
179 out <- _String to Int[0i32, 0, buf, 10i32, Int32[?]]
140 } 180 }
141 }{ 181 }{
142 out <- 0i32 182 out <- 0i32
143 } 183 }
144 184
145 } 185 }
146 186
187 _Hex Int32[str,cur,idx:out]
188 {
189 char <- [str]Byte[idx]
190 {
191 //0-9
192 [char]Between[47u8, 58u8]
193 {
194 adjust <- 48u8
195 }{
196 //A-F
197 [char]Between[64u8, 71u8]
198 {
199 adjust <- 55u8
200 }{
201 //a-f
202 [char]Between[96u8, 103u8]
203 {
204 adjust <- 87u8
205 }{
206 out <- cur
207 }
208 }
209 }
210 Val[adjust]
211 {
212 out <- _Hex Int32[str, [[cur]*[16i32]]+[Int32[[char]-[adjust]]], [idx]+[1]]
213 }
214 }{
215 out <- cur
216 }
217 }
218
219 Hex Int32[str:out]
220 {
221 out <- _Hex Int32[str, 0i32, 0]
222 }
223
224 Int64@String[string:out]
225 {
226 buf <- [string]Buffer >>
227 [buf]Index[0]
228 {
229 If[[~]=[45u8]]
230 {
231 out <- [0i64]-[_String to Int[0i64, 1, buf, 10i64, Int64[?]]]
232 }{
233 out <- _String to Int[0i64, 0, buf, 10i64, Int64[?]]
234 }
235 }{
236 out <- 0i64
237 }
238
239 }
240
241 UInt8@String[string:out]
242 {
243 out <- _String to Int[0u8, 0, [string]Buffer >>, 10u8, Val[?]]
244 }
245
246
247 UInt16@String[string:out]
248 {
249 out <- _String to Int[0u16, 0, [string]Buffer >>, 10u16, UInt16[?]]
250
251 }
252
253 UInt32@String[string:out]
254 {
255 out <- _String to Int[0u32, 0, [string]Buffer >>, 10u32, UInt32[?]]
256
257 }
258
259 UInt64@String[string:out]
260 {
261 out <- _String to Int[0u64, 0, [string]Buffer >>, 10u64, UInt64[?]]
262 }
263
264 Int8@String Slice[string:out]
265 {
266 out <- Int8[[string]Flatten]
267 }
268
269 Int8@String Cat[string:out]
270 {
271 out <- Int8[[string]Flatten]
272 }
273
274 Int16@String Slice[string:out]
275 {
276 out <- Int16[[string]Flatten]
277 }
278
279 Int16@String Cat[string:out]
280 {
281 out <- Int16[[string]Flatten]
282 }
283
147 Int32@String Slice[string:out] 284 Int32@String Slice[string:out]
148 { 285 {
149 out <- Int32[[string]Flatten] 286 out <- Int32[[string]Flatten]
150 } 287 }
151 288
152 Int32@String Cat[string:out] 289 Int32@String Cat[string:out]
153 { 290 {
154 out <- Int32[[string]Flatten] 291 out <- Int32[[string]Flatten]
292 }
293
294 Int64@String Slice[string:out]
295 {
296 out <- Int64[[string]Flatten]
297 }
298
299 Int64@String Cat[string:out]
300 {
301 out <- Int64[[string]Flatten]
302 }
303
304 UInt8@String Slice[string:out]
305 {
306 out <- UInt8[[string]Flatten]
307 }
308
309 UInt8@String Cat[string:out]
310 {
311 out <- UInt8[[string]Flatten]
312 }
313
314 UInt16@String Slice[string:out]
315 {
316 out <- UInt16[[string]Flatten]
317 }
318
319 UInt16@String Cat[string:out]
320 {
321 out <- UInt16[[string]Flatten]
322 }
323
324 UInt32@String Slice[string:out]
325 {
326 out <- UInt32[[string]Flatten]
327 }
328
329 UInt32@String Cat[string:out]
330 {
331 out <- UInt32[[string]Flatten]
332 }
333
334 UInt64@String Slice[string:out]
335 {
336 out <- UInt64[[string]Flatten]
337 }
338
339 UInt64@String Cat[string:out]
340 {
341 out <- UInt64[[string]Flatten]
342 }
343
344 //TODO: Implement me once Real64 support is added
345 Real64[string:out]
346 {
347 out <- string
155 } 348 }
156 349
157 Flatten@String[string:out] 350 Flatten@String[string:out]
158 { 351 {
159 out <- string 352 out <- string
234 } 427 }
235 } 428 }
236 429
237 Slice@String[string,slicepoint:left,right] 430 Slice@String[string,slicepoint:left,right]
238 { 431 {
239 //TODO: Handle invalid slicepoints 432 If[[slicepoint]>=[[string]Length]]
240 sliceoffset <- CPOff to BOff[[string]Buffer >>, 0i32, 0i32, slicepoint] 433 {
241 left <- String Slice[string, 0i32, slicepoint, sliceoffset] 434 left <- string
242 right <- String Slice[string, sliceoffset, [[string]Length >>]-[slicepoint], [[[string]Buffer >>]Length]-[sliceoffset]] 435 right <- ""
436 }{
437 If[[slicepoint]<=[0]]
438 {
439 left <- ""
440 right <- string
441 }{
442 sliceoffset <- CPOff to BOff[[string]Buffer >>, 0i32, 0i32, slicepoint]
443 left <- String Slice[string, 0i32, slicepoint, sliceoffset]
444 right <- String Slice[string, sliceoffset, [[string]Length >>]-[slicepoint], [[[string]Buffer >>]Length]-[sliceoffset]]
445 }
446 }
243 } 447 }
244 448
245 Byte@String[string,index:out,invalid] 449 Byte@String[string,index:out,invalid]
246 { 450 {
247 out,invalid <- [[string]Buffer >>]Index[index] 451 out,invalid <- [[string]Buffer >>]Index[index]
371 out <- String Cat[left,right] 575 out <- String Cat[left,right]
372 } 576 }
373 577
374 Slice@String Slice[string,slicepoint:left,right] 578 Slice@String Slice[string,slicepoint:left,right]
375 { 579 {
376 //TODO: Handle invalid slicepoints 580 If[[slicepoint]>=[[string]Length]]
377 sliceoffset <- CPOff to BOff[[[string]Source >>]Buffer >>, 0i32, [string]Offset >>, slicepoint] 581 {
378 left <- String Slice[[string]Source >>, [string]Offset >>, slicepoint, [sliceoffset]-[[string]Offset >>]] 582 left <- string
379 right <- String Slice[[string]Source >>, sliceoffset, [[string]Length >>]-[slicepoint], [[string]Byte Length]-[[sliceoffset]-[[string]Offset >>]]] 583 right <- ""
584 }{
585 If[[slicepoint]<=[0]]
586 {
587 left <- ""
588 right <- string
589 }{
590 sliceoffset <- CPOff to BOff[[[string]Source >>]Buffer >>, 0i32, [string]Offset >>, slicepoint]
591 left <- String Slice[[string]Source >>, [string]Offset >>, slicepoint, [sliceoffset]-[[string]Offset >>]]
592 right <- String Slice[[string]Source >>, sliceoffset, [[string]Length >>]-[slicepoint], [[string]Byte Length]-[[sliceoffset]-[[string]Offset >>]]]
593 }
594 }
380 } 595 }
381 596
382 Blueprint String Cat 597 Blueprint String Cat
383 { 598 {
384 Left 599 Left
677 If[string] 892 If[string]
678 { out <- _Split[(),string,delim] } 893 { out <- _Split[(),string,delim] }
679 { out <- () } 894 { out <- () }
680 } 895 }
681 896
897 In[needle,haystack:out]
898 {
899 If[haystack]
900 {
901 out <- If[[[haystack]Slice[Length[needle]]]=[needle]] {}
902 {
903 [haystack]Slice[1] {}
904 { out <- [needle]In[~] }
905 }
906 }{
907 out <- No
908 }
909 }
910
911 Left Trim[string,trim:trimmed]
912 {
913 If[ [[string]Length] > [0] ]
914 {
915 first,rest <- [string]Slice[1]
916 If[ [first]In[trim] ]
917 {
918 trimmed <- Left Trim[rest, trim]
919 }{
920 trimmed <- string
921 }
922 }{
923 trimmed <- string
924 }
925 }
926
927 Right Trim[string,trim:trimmed]
928 {
929 If[ [[string]Length] > [0] ]
930 {
931 rest,last <- [string]Slice[ [[string]Length] - [1]]
932 If[ [last]In[trim] ]
933 {
934 trimmed <- Right Trim[rest, trim]
935 }{
936 trimmed <- string
937 }
938 }{
939 trimmed <- string
940 }
941 }
942
943 Trim[string,trim:trimmed]
944 {
945 left <- Left Trim[string, trim]
946 trimmed <- Right Trim[left, trim]
947 }
948
949 Contains[haystack,needle:out]
950 {
951 [haystack]Partition[needle]
952 {
953 out <- Yes
954 } {} {} {
955 out <- No
956 }
957 }
958