2title = "4l: Atom Parsing"
10Core containing arms that parse `++coin`.
27 <10.mkn 414.hhh 100.xkc 1.ypj %164>
30------------------------------------------------------------------------
36Parsing rule. Parses an unsigned integer of any permitted base,
50 (stag %ub ;~(pfix (just 'b') bay:ag))
51 (stag %ui ;~(pfix (just 'i') dim:ag))
52 (stag %ux ;~(pfix (just 'x') hex:ag))
53 (stag %uv ;~(pfix (just 'v') viz:ag))
54 (stag %uw ;~(pfix (just 'w') wiz:ag))
66 > (scan "0x12.6401" bisk:so)
70------------------------------------------------------------------------
74Parse `@da`, `@dr`, `@p`, `@t`
76Parsing rule. Parses any atom of any of the following odors after a
77leading sig, `~` into a `++dime`: `@da`, `@dr`, `@p`,
78and `@t`, producing a `++dime`.
91 |=(det/date `dime`[%da (year det)])
95 ;~(plug dim:ag ;~(pose (cold | hep) (easy &)))
96 ;~(pfix dot dim:ag) :: month
97 ;~(pfix dot dim:ag) :: day
105 ;~(pose ;~(pfix ;~(plug dot dot) (most dot qix:ab)) (easy ~))
113 |= {a/(list {p/?($d $h $m $s) q/@}) b/(list @)}
114 =+ rop=`tarp`[0 0 0 0 b]
119 $d $(a t.a, d.rop (add q.i.a d.rop))
120 $h $(a t.a, h.rop (add q.i.a h.rop))
121 $m $(a t.a, m.rop (add q.i.a m.rop))
122 $s $(a t.a, s.rop (add q.i.a s.rop))
128 ;~(pfix (just 'd') (stag %d dim:ag))
129 ;~(pfix (just 'h') (stag %h dim:ag))
130 ;~(pfix (just 'm') (stag %m dim:ag))
131 ;~(pfix (just 's') (stag %s dim:ag))
133 ;~(pose ;~(pfix ;~(plug dot dot) (most dot qix:ab)) (easy ~))
137 ;~(pfix dot (stag %ta urs:ab))
138 ;~(pfix sig (stag %t urx:ab))
139 ;~(pfix hep (stag %c (cook turf urx:ab)))
142 ~/ %nuck |= a/nail %. a
146 :~ :- ['a' 'z'] (cook |=(a/@ta [%$ %tas a]) sym)
147 :- ['0' '9'] (stag %$ bisk)
148 :- '-' (stag %$ tash)
149 :- '.' ;~(pfix dot perd)
150 :- '~' ;~(pfix sig ;~(pose twid (easy [%$ %n 0])))
154 :(sear |=(a/@ta (rush a nuck)) wick urt:ab)
159 (stag %many (ifix [cab ;~(plug cab cab)] (more cab nusk)))
166 (scan a (bass 10 (plus sid:ab)))
172 ;~ pose (cold | hep) (easy &) ==
175 ;~(pfix dot (cook moo (plus (shim '0' '9'))))
181 ;~(plug ;~(pose (cold | hep) (easy &)) dim:ag)
190 ;~ pose (cold | hep) (easy &) ==
196 (cold ~ (jest 'nan'))
200 (stag %rh (cook rylh ;~(pfix ;~(plug sig sig) voy)))
201 (stag %rq (cook rylq ;~(pfix ;~(plug sig sig sig) voy)))
202 (stag %rd (cook ryld ;~(pfix sig voy)))
203 (stag %rs (cook ryls voy))
211 (dif:si (new:si f.b i.b) (sun:si d.b))
212 [%d a h (add (mul c.b (pow 10 d.b)) e.b)]
217 |= {syn/? mol/dime} ^- dime
218 ?> =('u' (end 3 1 p.mol))
219 [(cat 3 's' (rsh 3 1 p.mol)) (new:si syn q.mol)]
222 (cook |=(a/dime (neg | a)) bisk)
223 ;~(pfix hep (cook |=(a/dime (neg & a)) bisk))
230 (cook |=(a/@ [%blob (cue a)]) ;~(pfix (just '0') vum:ag))
239 (stag %f ;~(pose (cold & (just 'y')) (cold | (just 'n'))))
248 > (scan "1926.5.12" crub:so)
249 [p=~.da q=170.141.184.449.747.016.871.285.095.307.149.312.000]
250 > ([%da @da] (scan "1926.5.12" crub:so))
252 > (scan "s10" crub:so)
253 [p=~.dr q=184.467.440.737.095.516.160]
254 > ([%dr @dr] (scan "s10" crub:so))
256 > (scan "doznec" crub:so)
258 > (scan ".mas" crub:so)
262------------------------------------------------------------------------
268Parsing rule. Switches on the first character and applies the
269corresponding `++coin` parser.
279 ~/ %nuck |= a/nail %. a
283 :~ :- ['a' 'z'] (cook |=(a/@ta [%$ %tas a]) sym)
284 :- ['0' '9'] (stag %$ bisk)
285 :- '-' (stag %$ tash)
286 :- '.' ;~(pfix dot perd)
287 :- '~' ;~(pfix sig ;~(pose twid (easy [%$ %n 0])))
295 > (scan "~pillyt" nuck:so)
296 [% p=[p=~.p q=32.819]]
297 > (scan "0x12" nuck:so)
299 > (scan ".127.0.0.1" nuck:so)
300 [% p=[p=~.if q=2.130.706.433]]
303 > (scan "._20_0w25_sam__" nuck:so)
306 ~[[% p=[p=~.ud q=20]] [% p=[p=~.uw q=133]] [% p=[p=~.tas q=7.168.371]]]
310 > (scan "~0ph" nuck:so)
318------------------------------------------------------------------------
322Parse coin literal with escapes
324Parsing rule. Parses a coin literal with escapes. (See also: xx tuple
335 (sear |=(a/@ta (rush (wick a) nuck)) urt:ab)
345 > (scan "~~.asd~-a" nusk:so)
346 [% p=[p=~.ta q=418.212.246.369]]
347 > ([~ %ta @ta] (scan "~~.asd~-a" nusk:so))
351------------------------------------------------------------------------
357Parsing rule. Parses a dime or tuple without their respective standard
370 (stag %many (ifix [cab ;~(plug cab cab)] (more cab nusk)))
383 > (scan "_20_x__" perd:so)
384 [%many [[% p=[p=~.ud q=20]] ~[[% p=[p=~.tas q=120]]]]]
387------------------------------------------------------------------------
393Parsing rule. Parses a number into a `++dime` float.
407 (scan a (bass 10 (plus sid:ab)))
413 ;~ pose (cold | hep) (easy &) ==
416 ;~(pfix dot (cook moo (plus (shim '0' '9'))))
422 ;~(plug ;~(pose (cold | hep) (easy &)) dim:ag)
431 ;~ pose (cold | hep) (easy &) ==
437 (cold ~ (jest 'nan'))
441 (stag %rh (cook rylh ;~(pfix ;~(plug sig sig) voy)))
442 (stag %rq (cook rylq ;~(pfix ;~(plug sig sig sig) voy)))
443 (stag %rd (cook ryld ;~(pfix sig voy)))
444 (stag %rs (cook ryls voy))
452 > (scan "~3.14" royl:so)
453 [%rd .~3.13999999999999]
458------------------------------------------------------------------------
462XX still not fully functional
464Intermediate parsed float convereter
472 (dif:si (new:si f.b i.b) (sun:si d.b))
473 [%d a h (add (mul c.b (pow 10 d.b)) e.b)]
477------------------------------------------------------------------------
487Parsing rule. Parses a signed number into a `++dime`.
495 |= {syn/? mol/dime} ^- dime
496 ?> =('u' (end 3 1 p.mol))
497 [(cat 3 's' (rsh 3 1 p.mol)) (new:si syn q.mol)]
500 (cook |=(a/dime (neg | a)) bisk)
501 ;~(pfix hep (cook |=(a/dime (neg & a)) bisk))
510 > (scan "-20" tash:so)
512 > (,[%sd @sd] (scan "-20" tash:so))
514 > (,[%sd @sd] (scan "--20" tash:so))
516 > (,[%sx @sx] (scan "--0x2e" tash:so))
520------------------------------------------------------------------------
524Parse coins without `~` prefix
526Parsing rule. Parses coins after a leading sig, `~`.
537 (cook |=(a/@ [%blob (cue a)]) ;~(pfix (just '0') vum:ag))
546 > (scan "zod" twid:so)
548 > (scan ".sam" twid:so)
554 > (scan "0ph" twid:so)
558------------------------------------------------------------------------
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`.
578 (stag %f ;~(pose (cold & (just 'y')) (cold | (just 'n'))))
587 > (scan "127.0.0.1" zust:so)
588 [%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]
593 > (,[%is @is] (scan "af.0.0.0.0.e7a5.30d2.7" zust:so))
594 [%is .af.0.0.0.0.e7a5.30d2.7]
596 > (,[%is @ux] (scan "af.0.0.0.0.e7a5.30d2.7" zust:so))
597 [%is 0xaf.0000.0000.0000.0000.e7a5.30d2.0007]
602 > (scan "12.09" zust:so)
603 [%rd .~12.00999999999999]
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list