on 140ac0e help sign in
598 lines 13 kB history raw
1# 4l: atom parsing
2### `++so`
4Coin parser engine
6Core containing arms that parse `++coin`.
8Accepts
9-------
11Produces
12--------
14Source
15------
17 ++ so
18 |%
20Examples
21--------
23 > so
24 <10.mkn 414.hhh 100.xkc 1.ypj %164>
26------------------------------------------------------------------------
28### `++bisk`
30Parse odor-atom pair
32Parsing rule. Parses an unsigned integer of any permitted base,
33producing a `++dime`.
35Accepts
36-------
38Produces
39--------
41Source
42------
44 ++ bisk
45 ;~ pose
46 ;~ pfix (just '0')
47 ;~ pose
48 (stag %ub ;~(pfix (just 'b') bay:ag))
49 (stag %ui ;~(pfix (just 'i') dim:ag))
50 (stag %ux ;~(pfix (just 'x') hex:ag))
51 (stag %uv ;~(pfix (just 'v') viz:ag))
52 (stag %uw ;~(pfix (just 'w') wiz:ag))
53 ==
54 ==
55 (stag %ud dem:ag)
56 ==
58Examples
59--------
61 > (scan "25" bisk:so)
62 [%ud q=25]
63 > (scan "0x12.6401" bisk:so)
64 [%ux q=1.205.249]
66------------------------------------------------------------------------
68### `++crub`
70Parse `@da`, `@dr`, `@p`, `@t`
72Parsing rule. Parses any atom of any of the following odors after a
73leading sig, `~` into a `++dime`: `@da`, `@dr`, `@p`,
74and `@t`, producing a `++dime`.
76Accepts
77-------
79Produces
80--------
82Source
83------
85 ++ crub
86 ~+
87 ;~ pose
88 %+ cook
89 |=(det/date `dime`[%da (year det)])
90 ;~ plug
91 %+ cook
92 |=({a/@ b/?} [b a])
93 ;~(plug dim:ag ;~(pose (cold | hep) (easy &)))
94 ;~(pfix dot dim:ag) :: month
95 ;~(pfix dot dim:ag) :: day
96 ;~ pose
97 ;~ pfix
98 ;~(plug dot dot)
99 ;~ plug
100 dum:ag
101 ;~(pfix dot dum:ag)
102 ;~(pfix dot dum:ag)
103 ;~(pose ;~(pfix ;~(plug dot dot) (most dot qix:ab)) (easy ~))
104 ==
105 ==
106 (easy [0 0 0 ~])
107 ==
108 ==
109 ::
110 %+ cook
111 |= {a/(list {p/?($d $h $m $s) q/@}) b/(list @)}
112 =+ rop=`tarp`[0 0 0 0 b]
113 |- ^- dime
114 ?~ a
115 [%dr (yule rop)]
116 ?- p.i.a
117 $d $(a t.a, d.rop (add q.i.a d.rop))
118 $h $(a t.a, h.rop (add q.i.a h.rop))
119 $m $(a t.a, m.rop (add q.i.a m.rop))
120 $s $(a t.a, s.rop (add q.i.a s.rop))
121 ==
122 ;~ plug
123 %+ most
124 dot
125 ;~ pose
126 ;~(pfix (just 'd') (stag %d dim:ag))
127 ;~(pfix (just 'h') (stag %h dim:ag))
128 ;~(pfix (just 'm') (stag %m dim:ag))
129 ;~(pfix (just 's') (stag %s dim:ag))
130 ==
131 ;~(pose ;~(pfix ;~(plug dot dot) (most dot qix:ab)) (easy ~))
132 ==
133 ::
134 (stag %p fed:ag)
135 ;~(pfix dot (stag %ta urs:ab))
136 ;~(pfix sig (stag %t urx:ab))
137 ;~(pfix hep (stag %c (cook turf urx:ab)))
138 ==
139 ++ nuck
140 ~/ %nuck |= a/nail %. a
141 %+ knee *coin |. ~+
142 %- stew
143 ^. stet ^. limo
144 :~ :- ['a' 'z'] (cook |=(a/@ta [%$ %tas a]) sym)
145 :- ['0' '9'] (stag %$ bisk)
146 :- '-' (stag %$ tash)
147 :- '.' ;~(pfix dot perd)
148 :- '~' ;~(pfix sig ;~(pose twid (easy [%$ %n 0])))
149 ==
150 ++ nusk
151 ~+
152 :(sear |=(a/@ta (rush a nuck)) wick urt:ab)
153 ++ perd
154 ~+
155 ;~ pose
156 (stag %$ zust)
157 (stag %many (ifix [cab ;~(plug cab cab)] (more cab nusk)))
158 ==
159 ++ royl
160 ~+
161 =+ ^= moo
162 |= a/tape
163 :- (lent a)
164 (scan a (bass 10 (plus sid:ab)))
165 =+ ^= voy
166 %+ cook royl-cell
167 ;~ pose
168 ;~ plug
169 (easy %d)
170 ;~ pose (cold | hep) (easy &) ==
171 ;~ plug dim:ag
172 ;~ pose
173 ;~(pfix dot (cook moo (plus (shim '0' '9'))))
174 (easy [0 0])
175 ==
176 ;~ pose
177 ;~ pfix
178 (just 'e')
179 ;~(plug ;~(pose (cold | hep) (easy &)) dim:ag)
180 ==
181 (easy [& 0])
182 ==
183 ==
184 ==
185 ;~ plug
186 (easy %i)
187 ;~ sfix
188 ;~ pose (cold | hep) (easy &) ==
189 (jest 'inf')
190 ==
191 ==
192 ;~ plug
193 (easy %n)
194 (cold ~ (jest 'nan'))
195 ==
196 ==
197 ;~ pose
198 (stag %rh (cook rylh ;~(pfix ;~(plug sig sig) voy)))
199 (stag %rq (cook rylq ;~(pfix ;~(plug sig sig sig) voy)))
200 (stag %rd (cook ryld ;~(pfix sig voy)))
201 (stag %rs (cook ryls voy))
202 ==
203 ::
204 ++ royl-cell
205 |= rn
206 ^- dn
207 ?. ?=({$d *} +<) +<
208 =+ ^= h
209 (dif:si (new:si f.b i.b) (sun:si d.b))
210 [%d a h (add (mul c.b (pow 10 d.b)) e.b)]
211 ::
212 ++ tash
213 ~+
214 =+ ^= neg
215 |= {syn/? mol/dime} ^- dime
216 ?> =('u' (end 3 1 p.mol))
217 [(cat 3 's' (rsh 3 1 p.mol)) (new:si syn q.mol)]
218 ;~ pfix hep
219 ;~ pose
220 (cook |=(a/dime (neg | a)) bisk)
221 ;~(pfix hep (cook |=(a/dime (neg & a)) bisk))
222 ==
223 ==
224 ::
225 ++ twid
226 ~+
227 ;~ pose
228 (cook |=(a/@ [%blob (cue a)]) ;~(pfix (just '0') vum:ag))
229 (stag %$ crub)
230 ==
231 ::
232 ++ zust
233 ~+
234 ;~ pose
235 (stag %is bip:ag)
236 (stag %if lip:ag)
237 (stag %f ;~(pose (cold & (just 'y')) (cold | (just 'n'))))
238 royl
239 ==
240 --
242Examples
243--------
245 > (scan "1926.5.12" crub:so)
246 [p=~.da q=170.141.184.449.747.016.871.285.095.307.149.312.000]
247 > ([%da @da] (scan "1926.5.12" crub:so))
248 [%da ~1926.5.12]
249 > (scan "s10" crub:so)
250 [p=~.dr q=184.467.440.737.095.516.160]
251 > ([%dr @dr] (scan "s10" crub:so))
252 [%dr ~s10]
253 > (scan "doznec" crub:so)
254 [%p 256]
255 > (scan ".mas" crub:so)
256 [%ta 7.561.581]
258------------------------------------------------------------------------
260### `++nuck`
262Top-level coin parser
264Parsing rule. Switches on the first character and applies the
265corresponding `++coin` parser.
267Accepts
268-------
270Produces
271--------
273Source
274------
276 ++ nuck
277 ~/ %nuck |= a/nail %. a
278 %+ knee *coin |. ~+
279 %- stew
280 ^. stet ^. limo
281 :~ :- ['a' 'z'] (cook |=(a/@ta [%$ %tas a]) sym)
282 :- ['0' '9'] (stag %$ bisk)
283 :- '-' (stag %$ tash)
284 :- '.' ;~(pfix dot perd)
285 :- '~' ;~(pfix sig ;~(pose twid (easy [%$ %n 0])))
286 ==
290Examples
291--------
293 > (scan "~pillyt" nuck:so)
294 [% p=[p=~.p q=32.819]]
295 > (scan "0x12" nuck:so)
296 [% p=[p=~.ux q=18]]
297 > (scan ".127.0.0.1" nuck:so)
298 [% p=[p=~.if q=2.130.706.433]]
299 > `@ud`.127.0.0.1
300 2.130.706.433
301 > (scan "._20_0w25_sam__" nuck:so)
302 [ %many
303 p
304 ~[[% p=[p=~.ud q=20]] [% p=[p=~.uw q=133]] [% p=[p=~.tas q=7.168.371]]]
305 ]
306 > `@`%sam
307 7.168.371
308 > (scan "~0ph" nuck:so)
309 [%blob p=[1 1]]
310 > ~0ph
311 [1 1]
312 > `@uv`(jam [1 1])
313 0vph
315------------------------------------------------------------------------
317### `++nusk`
319Parse coin literal with escapes
321Parsing rule. Parses a coin literal with escapes. (See also: xx tuple
322formatting).
324Accepts
325-------
327Produces
328--------
330Source
331------
333 ++ nusk
334 (sear |=(a/@ta (rush (wick a) nuck)) urt:ab)
336Examples
337--------
339 > ~.asd_a
340 ~.asd_a
341 > ._1_~~.asd~-a__
342 [1 ~.asd_a]
343 > (scan "~~.asd~-a" nusk:so)
344 [% p=[p=~.ta q=418.212.246.369]]
345 > ([~ %ta @ta] (scan "~~.asd~-a" nusk:so))
346 [~ %ta ~.asd_a]
348------------------------------------------------------------------------
350### `++perd`
352Parsing rule.
354Parsing rule. Parses a dime or tuple without their respective standard
355prefixes.
357Accepts
358-------
360Produces
361--------
363Source
364------
366 ++ perd
367 ;~ pose
368 (stag ~ zust)
369 (stag %many (ifix [cab ;~(plug cab cab)] (more cab nusk)))
370 ==
372Examples
373--------
375 > (scan "y" perd:so)
376 [~ [%f %.y]]
377 > (scan "n" perd:so)
378 [~ [%f %.n]]
379 > |
380 %.n
381 > (scan "_20_x__" perd:so)
382 [%many [[% p=[p=~.ud q=20]] ~[[% p=[p=~.tas q=120]]]]]
384------------------------------------------------------------------------
386### `++royl`
388Parse dime float
390Parsing rule. Parses a number into a `++dime` float.
392Accepts
393-------
395Produces
396--------
398Source
399------
401 ++ royl
402 ~+
403 =+ ^= moo
404 |= a/tape
405 :- (lent a)
406 (scan a (bass 10 (plus sid:ab)))
407 =+ ^= voy
408 %+ cook royl-cell
409 ;~ pose
410 ;~ plug
411 (easy %d)
412 ;~ pose (cold | hep) (easy &) ==
413 ;~ plug dim:ag
414 ;~ pose
415 ;~(pfix dot (cook moo (plus (shim '0' '9'))))
416 (easy [0 0])
417 ==
418 ;~ pose
419 ;~ pfix
420 (just 'e')
421 ;~(plug ;~(pose (cold | hep) (easy &)) dim:ag)
422 ==
423 (easy [& 0])
424 ==
425 ==
426 ==
427 ;~ plug
428 (easy %i)
429 ;~ sfix
430 ;~ pose (cold | hep) (easy &) ==
431 (jest 'inf')
432 ==
433 ==
434 ;~ plug
435 (easy %n)
436 (cold ~ (jest 'nan'))
437 ==
438 ==
439 ;~ pose
440 (stag %rh (cook rylh ;~(pfix ;~(plug sig sig) voy)))
441 (stag %rq (cook rylq ;~(pfix ;~(plug sig sig sig) voy)))
442 (stag %rd (cook ryld ;~(pfix sig voy)))
443 (stag %rs (cook ryls voy))
444 ==
445 ::
447Examples
448--------
450 > (scan "~3.14" royl:so)
451 [%rd .~3.13999999999999]
452 > .~3.14
453 .~3.13999999999999
455------------------------------------------------------------------------
457### `++royl-cell`
459XX still not fully functional
461Intermediate parsed float convereter
463 ++ royl-cell
464 |= rn
465 ^- dn
466 ?. ?=({$d *} +<) +<
467 =+ ^= h
468 (dif:si (new:si f.b i.b) (sun:si d.b))
469 [%d a h (add (mul c.b (pow 10 d.b)) e.b)]
470 ::
472------------------------------------------------------------------------
474### `++tash`
476Parse signed dime
478Accepts
479-------
481Produces
482--------
484Parsing rule. Parses a signed number into a `++dime`.
486Source
487------
489 ++ tash
490 ~+
491 =+ ^= neg
492 |= {syn/? mol/dime} ^- dime
493 ?> =('u' (end 3 1 p.mol))
494 [(cat 3 's' (rsh 3 1 p.mol)) (new:si syn q.mol)]
495 ;~ pfix hep
496 ;~ pose
497 (cook |=(a/dime (neg | a)) bisk)
498 ;~(pfix hep (cook |=(a/dime (neg & a)) bisk))
499 ==
500 ==
501 ::
503Examples
504--------
506 > (scan "-20" tash:so)
507 [p=~.sd q=39]
508 > (,[%sd @sd] (scan "-20" tash:so))
509 [%sd -20]
510 > (,[%sd @sd] (scan "--20" tash:so))
511 [%sd --20]
512 > (,[%sx @sx] (scan "--0x2e" tash:so))
513 [%sx --0x2e]
515------------------------------------------------------------------------
517### `++twid`
519Parse coins without `~` prefix
521Parsing rule. Parses coins after a leading sig, `~`.
523Accepts
524-------
526Produces
527--------
529Source
530------
532 ++ twid
533 ;~ pose
534 (cook |=(a/@ [%blob (cue a)]) ;~(pfix (just '0') vum:ag))
535 (stag ~ crub)
536 ==
537 ::
539Examples
540--------
542 > (scan "zod" twid:so)
543 [~ [%p 0]]
544 > (scan ".sam" twid:so)
545 [~ [%ta 7.168.371]]
546 > `@ud`~.sam
547 7.168.371
548 > `@t`~.sam
549 'sam'
550 > (scan "0ph" twid:so)
551 [%blob [1 1]]
553------------------------------------------------------------------------
555### `++zust`
557Parse prefixed dimes from `@if`, `@f`, `@rd`
559Parsing rule. Parses an atom of either `@if` (IP address), `@f`
560(loobean), or `rf`(floating point) into a `++dime`.
562Accepts
563-------
565Produces
566--------
568Source
569------
571 ++ zust
572 ;~ pose
573 (stag %is bip:ag)
574 (stag %if lip:ag)
575 (stag %f ;~(pose (cold & (just 'y')) (cold | (just 'n'))))
576 royl
577 ==
578 --
580Examples
581--------
583 > (scan "127.0.0.1" zust:so)
584 [%if q=2.130.706.433]
585 > (scan "af.0.0.0.0.e7a5.30d2.7" zust:so)
586 [%is q=908.651.950.243.594.834.993.091.554.288.205.831]
587 > (,[%is @is] (scan "af.0.0.0.0.e7a5.30d2.7" zust:so))
588 [%is .af.0.0.0.0.e7a5.30d2.7]
589 > (,[%is @ux] (scan "af.0.0.0.0.e7a5.30d2.7" zust:so))
590 [%is 0xaf.0000.0000.0000.0000.e7a5.30d2.0007]
591 > (scan "y" zust:so)
592 [%f %.y]
593 > (scan "12.09" zust:so)
594 [%rd .~12.00999999999999]
598***