on 6d45ede help sign in
603 lines 13 kB history raw
1---
2navhome: /docs
3---
6# 4l: atom parsing
7### `++so`
9Coin parser engine
11Core containing arms that parse `++coin`.
13Accepts
14-------
16Produces
17--------
19Source
20------
22 ++ so
23 |%
25Examples
26--------
28 > so
29 <10.mkn 414.hhh 100.xkc 1.ypj %164>
31------------------------------------------------------------------------
33### `++bisk`
35Parse odor-atom pair
37Parsing rule. Parses an unsigned integer of any permitted base,
38producing a `++dime`.
40Accepts
41-------
43Produces
44--------
46Source
47------
49 ++ bisk
50 ;~ pose
51 ;~ pfix (just '0')
52 ;~ pose
53 (stag %ub ;~(pfix (just 'b') bay:ag))
54 (stag %ui ;~(pfix (just 'i') dim:ag))
55 (stag %ux ;~(pfix (just 'x') hex:ag))
56 (stag %uv ;~(pfix (just 'v') viz:ag))
57 (stag %uw ;~(pfix (just 'w') wiz:ag))
58 ==
59 ==
60 (stag %ud dem:ag)
61 ==
63Examples
64--------
66 > (scan "25" bisk:so)
67 [%ud q=25]
68 > (scan "0x12.6401" bisk:so)
69 [%ux q=1.205.249]
71------------------------------------------------------------------------
73### `++crub`
75Parse `@da`, `@dr`, `@p`, `@t`
77Parsing rule. Parses any atom of any of the following odors after a
78leading sig, `~` into a `++dime`: `@da`, `@dr`, `@p`,
79and `@t`, producing a `++dime`.
81Accepts
82-------
84Produces
85--------
87Source
88------
90 ++ crub
91 ~+
92 ;~ pose
93 %+ cook
94 |=(det/date `dime`[%da (year det)])
95 ;~ plug
96 %+ cook
97 |=({a/@ b/?} [b a])
98 ;~(plug dim:ag ;~(pose (cold | hep) (easy &)))
99 ;~(pfix dot dim:ag) :: month
100 ;~(pfix dot dim:ag) :: day
101 ;~ pose
102 ;~ pfix
103 ;~(plug dot dot)
104 ;~ plug
105 dum:ag
106 ;~(pfix dot dum:ag)
107 ;~(pfix dot dum:ag)
108 ;~(pose ;~(pfix ;~(plug dot dot) (most dot qix:ab)) (easy ~))
109 ==
110 ==
111 (easy [0 0 0 ~])
112 ==
113 ==
114 ::
115 %+ cook
116 |= {a/(list {p/?($d $h $m $s) q/@}) b/(list @)}
117 =+ rop=`tarp`[0 0 0 0 b]
118 |- ^- dime
119 ?~ a
120 [%dr (yule rop)]
121 ?- p.i.a
122 $d $(a t.a, d.rop (add q.i.a d.rop))
123 $h $(a t.a, h.rop (add q.i.a h.rop))
124 $m $(a t.a, m.rop (add q.i.a m.rop))
125 $s $(a t.a, s.rop (add q.i.a s.rop))
126 ==
127 ;~ plug
128 %+ most
129 dot
130 ;~ pose
131 ;~(pfix (just 'd') (stag %d dim:ag))
132 ;~(pfix (just 'h') (stag %h dim:ag))
133 ;~(pfix (just 'm') (stag %m dim:ag))
134 ;~(pfix (just 's') (stag %s dim:ag))
135 ==
136 ;~(pose ;~(pfix ;~(plug dot dot) (most dot qix:ab)) (easy ~))
137 ==
138 ::
139 (stag %p fed:ag)
140 ;~(pfix dot (stag %ta urs:ab))
141 ;~(pfix sig (stag %t urx:ab))
142 ;~(pfix hep (stag %c (cook turf urx:ab)))
143 ==
144 ++ nuck
145 ~/ %nuck |= a/nail %. a
146 %+ knee *coin |. ~+
147 %- stew
148 ^. stet ^. limo
149 :~ :- ['a' 'z'] (cook |=(a/@ta [%$ %tas a]) sym)
150 :- ['0' '9'] (stag %$ bisk)
151 :- '-' (stag %$ tash)
152 :- '.' ;~(pfix dot perd)
153 :- '~' ;~(pfix sig ;~(pose twid (easy [%$ %n 0])))
154 ==
155 ++ nusk
156 ~+
157 :(sear |=(a/@ta (rush a nuck)) wick urt:ab)
158 ++ perd
159 ~+
160 ;~ pose
161 (stag %$ zust)
162 (stag %many (ifix [cab ;~(plug cab cab)] (more cab nusk)))
163 ==
164 ++ royl
165 ~+
166 =+ ^= moo
167 |= a/tape
168 :- (lent a)
169 (scan a (bass 10 (plus sid:ab)))
170 =+ ^= voy
171 %+ cook royl-cell
172 ;~ pose
173 ;~ plug
174 (easy %d)
175 ;~ pose (cold | hep) (easy &) ==
176 ;~ plug dim:ag
177 ;~ pose
178 ;~(pfix dot (cook moo (plus (shim '0' '9'))))
179 (easy [0 0])
180 ==
181 ;~ pose
182 ;~ pfix
183 (just 'e')
184 ;~(plug ;~(pose (cold | hep) (easy &)) dim:ag)
185 ==
186 (easy [& 0])
187 ==
188 ==
189 ==
190 ;~ plug
191 (easy %i)
192 ;~ sfix
193 ;~ pose (cold | hep) (easy &) ==
194 (jest 'inf')
195 ==
196 ==
197 ;~ plug
198 (easy %n)
199 (cold ~ (jest 'nan'))
200 ==
201 ==
202 ;~ pose
203 (stag %rh (cook rylh ;~(pfix ;~(plug sig sig) voy)))
204 (stag %rq (cook rylq ;~(pfix ;~(plug sig sig sig) voy)))
205 (stag %rd (cook ryld ;~(pfix sig voy)))
206 (stag %rs (cook ryls voy))
207 ==
208 ::
209 ++ royl-cell
210 |= rn
211 ^- dn
212 ?. ?=({$d *} +<) +<
213 =+ ^= h
214 (dif:si (new:si f.b i.b) (sun:si d.b))
215 [%d a h (add (mul c.b (pow 10 d.b)) e.b)]
216 ::
217 ++ tash
218 ~+
219 =+ ^= neg
220 |= {syn/? mol/dime} ^- dime
221 ?> =('u' (end 3 1 p.mol))
222 [(cat 3 's' (rsh 3 1 p.mol)) (new:si syn q.mol)]
223 ;~ pfix hep
224 ;~ pose
225 (cook |=(a/dime (neg | a)) bisk)
226 ;~(pfix hep (cook |=(a/dime (neg & a)) bisk))
227 ==
228 ==
229 ::
230 ++ twid
231 ~+
232 ;~ pose
233 (cook |=(a/@ [%blob (cue a)]) ;~(pfix (just '0') vum:ag))
234 (stag %$ crub)
235 ==
236 ::
237 ++ zust
238 ~+
239 ;~ pose
240 (stag %is bip:ag)
241 (stag %if lip:ag)
242 (stag %f ;~(pose (cold & (just 'y')) (cold | (just 'n'))))
243 royl
244 ==
245 --
247Examples
248--------
250 > (scan "1926.5.12" crub:so)
251 [p=~.da q=170.141.184.449.747.016.871.285.095.307.149.312.000]
252 > ([%da @da] (scan "1926.5.12" crub:so))
253 [%da ~1926.5.12]
254 > (scan "s10" crub:so)
255 [p=~.dr q=184.467.440.737.095.516.160]
256 > ([%dr @dr] (scan "s10" crub:so))
257 [%dr ~s10]
258 > (scan "doznec" crub:so)
259 [%p 256]
260 > (scan ".mas" crub:so)
261 [%ta 7.561.581]
263------------------------------------------------------------------------
265### `++nuck`
267Top-level coin parser
269Parsing rule. Switches on the first character and applies the
270corresponding `++coin` parser.
272Accepts
273-------
275Produces
276--------
278Source
279------
281 ++ nuck
282 ~/ %nuck |= a/nail %. a
283 %+ knee *coin |. ~+
284 %- stew
285 ^. stet ^. limo
286 :~ :- ['a' 'z'] (cook |=(a/@ta [%$ %tas a]) sym)
287 :- ['0' '9'] (stag %$ bisk)
288 :- '-' (stag %$ tash)
289 :- '.' ;~(pfix dot perd)
290 :- '~' ;~(pfix sig ;~(pose twid (easy [%$ %n 0])))
291 ==
295Examples
296--------
298 > (scan "~pillyt" nuck:so)
299 [% p=[p=~.p q=32.819]]
300 > (scan "0x12" nuck:so)
301 [% p=[p=~.ux q=18]]
302 > (scan ".127.0.0.1" nuck:so)
303 [% p=[p=~.if q=2.130.706.433]]
304 > `@ud`.127.0.0.1
305 2.130.706.433
306 > (scan "._20_0w25_sam__" nuck:so)
307 [ %many
308 p
309 ~[[% p=[p=~.ud q=20]] [% p=[p=~.uw q=133]] [% p=[p=~.tas q=7.168.371]]]
310 ]
311 > `@`%sam
312 7.168.371
313 > (scan "~0ph" nuck:so)
314 [%blob p=[1 1]]
315 > ~0ph
316 [1 1]
317 > `@uv`(jam [1 1])
318 0vph
320------------------------------------------------------------------------
322### `++nusk`
324Parse coin literal with escapes
326Parsing rule. Parses a coin literal with escapes. (See also: xx tuple
327formatting).
329Accepts
330-------
332Produces
333--------
335Source
336------
338 ++ nusk
339 (sear |=(a/@ta (rush (wick a) nuck)) urt:ab)
341Examples
342--------
344 > ~.asd_a
345 ~.asd_a
346 > ._1_~~.asd~-a__
347 [1 ~.asd_a]
348 > (scan "~~.asd~-a" nusk:so)
349 [% p=[p=~.ta q=418.212.246.369]]
350 > ([~ %ta @ta] (scan "~~.asd~-a" nusk:so))
351 [~ %ta ~.asd_a]
353------------------------------------------------------------------------
355### `++perd`
357Parsing rule.
359Parsing rule. Parses a dime or tuple without their respective standard
360prefixes.
362Accepts
363-------
365Produces
366--------
368Source
369------
371 ++ perd
372 ;~ pose
373 (stag ~ zust)
374 (stag %many (ifix [cab ;~(plug cab cab)] (more cab nusk)))
375 ==
377Examples
378--------
380 > (scan "y" perd:so)
381 [~ [%f %.y]]
382 > (scan "n" perd:so)
383 [~ [%f %.n]]
384 > |
385 %.n
386 > (scan "_20_x__" perd:so)
387 [%many [[% p=[p=~.ud q=20]] ~[[% p=[p=~.tas q=120]]]]]
389------------------------------------------------------------------------
391### `++royl`
393Parse dime float
395Parsing rule. Parses a number into a `++dime` float.
397Accepts
398-------
400Produces
401--------
403Source
404------
406 ++ royl
407 ~+
408 =+ ^= moo
409 |= a/tape
410 :- (lent a)
411 (scan a (bass 10 (plus sid:ab)))
412 =+ ^= voy
413 %+ cook royl-cell
414 ;~ pose
415 ;~ plug
416 (easy %d)
417 ;~ pose (cold | hep) (easy &) ==
418 ;~ plug dim:ag
419 ;~ pose
420 ;~(pfix dot (cook moo (plus (shim '0' '9'))))
421 (easy [0 0])
422 ==
423 ;~ pose
424 ;~ pfix
425 (just 'e')
426 ;~(plug ;~(pose (cold | hep) (easy &)) dim:ag)
427 ==
428 (easy [& 0])
429 ==
430 ==
431 ==
432 ;~ plug
433 (easy %i)
434 ;~ sfix
435 ;~ pose (cold | hep) (easy &) ==
436 (jest 'inf')
437 ==
438 ==
439 ;~ plug
440 (easy %n)
441 (cold ~ (jest 'nan'))
442 ==
443 ==
444 ;~ pose
445 (stag %rh (cook rylh ;~(pfix ;~(plug sig sig) voy)))
446 (stag %rq (cook rylq ;~(pfix ;~(plug sig sig sig) voy)))
447 (stag %rd (cook ryld ;~(pfix sig voy)))
448 (stag %rs (cook ryls voy))
449 ==
450 ::
452Examples
453--------
455 > (scan "~3.14" royl:so)
456 [%rd .~3.13999999999999]
457 > .~3.14
458 .~3.13999999999999
460------------------------------------------------------------------------
462### `++royl-cell`
464XX still not fully functional
466Intermediate parsed float convereter
468 ++ royl-cell
469 |= rn
470 ^- dn
471 ?. ?=({$d *} +<) +<
472 =+ ^= h
473 (dif:si (new:si f.b i.b) (sun:si d.b))
474 [%d a h (add (mul c.b (pow 10 d.b)) e.b)]
475 ::
477------------------------------------------------------------------------
479### `++tash`
481Parse signed dime
483Accepts
484-------
486Produces
487--------
489Parsing rule. Parses a signed number into a `++dime`.
491Source
492------
494 ++ tash
495 ~+
496 =+ ^= neg
497 |= {syn/? mol/dime} ^- dime
498 ?> =('u' (end 3 1 p.mol))
499 [(cat 3 's' (rsh 3 1 p.mol)) (new:si syn q.mol)]
500 ;~ pfix hep
501 ;~ pose
502 (cook |=(a/dime (neg | a)) bisk)
503 ;~(pfix hep (cook |=(a/dime (neg & a)) bisk))
504 ==
505 ==
506 ::
508Examples
509--------
511 > (scan "-20" tash:so)
512 [p=~.sd q=39]
513 > (,[%sd @sd] (scan "-20" tash:so))
514 [%sd -20]
515 > (,[%sd @sd] (scan "--20" tash:so))
516 [%sd --20]
517 > (,[%sx @sx] (scan "--0x2e" tash:so))
518 [%sx --0x2e]
520------------------------------------------------------------------------
522### `++twid`
524Parse coins without `~` prefix
526Parsing rule. Parses coins after a leading sig, `~`.
528Accepts
529-------
531Produces
532--------
534Source
535------
537 ++ twid
538 ;~ pose
539 (cook |=(a/@ [%blob (cue a)]) ;~(pfix (just '0') vum:ag))
540 (stag ~ crub)
541 ==
542 ::
544Examples
545--------
547 > (scan "zod" twid:so)
548 [~ [%p 0]]
549 > (scan ".sam" twid:so)
550 [~ [%ta 7.168.371]]
551 > `@ud`~.sam
552 7.168.371
553 > `@t`~.sam
554 'sam'
555 > (scan "0ph" twid:so)
556 [%blob [1 1]]
558------------------------------------------------------------------------
560### `++zust`
562Parse prefixed dimes from `@if`, `@f`, `@rd`
564Parsing rule. Parses an atom of either `@if` (IP address), `@f`
565(loobean), or `rf`(floating point) into a `++dime`.
567Accepts
568-------
570Produces
571--------
573Source
574------
576 ++ zust
577 ;~ pose
578 (stag %is bip:ag)
579 (stag %if lip:ag)
580 (stag %f ;~(pose (cold & (just 'y')) (cold | (just 'n'))))
581 royl
582 ==
583 --
585Examples
586--------
588 > (scan "127.0.0.1" zust:so)
589 [%if q=2.130.706.433]
590 > (scan "af.0.0.0.0.e7a5.30d2.7" zust:so)
591 [%is q=908.651.950.243.594.834.993.091.554.288.205.831]
592 > (,[%is @is] (scan "af.0.0.0.0.e7a5.30d2.7" zust:so))
593 [%is .af.0.0.0.0.e7a5.30d2.7]
594 > (,[%is @ux] (scan "af.0.0.0.0.e7a5.30d2.7" zust:so))
595 [%is 0xaf.0000.0000.0000.0000.e7a5.30d2.0007]
596 > (scan "y" zust:so)
597 [%f %.y]
598 > (scan "12.09" zust:so)
599 [%rd .~12.00999999999999]
603***