@@ -1,960 +1,2 @@
16− %blok (print-blok +.ast)
22− (cook |=(=blok [%blok blok]) parse-blok)
29− [%binop expr binop expr]
30− [%prefix-expr prefix-expr]
37−:: The expressions that are separated by binary operators
40− %^ tnee %parse-atomic-expr expr
42− (cold [%nil ~] (jest 'nil'))
44− (cold [%true ~] (jest 'true'))
46− (cold [%false ~] (jest 'false'))
49− |=(=numeral [%num numeral])
53− |=(=prefix-expr [%prefix-expr prefix-expr])
54− (knee *prefix-expr |.(parse-prefix-expr))
57− |=(=table [%table table])
60− |=(=string [%string string])
63−:: Parse expressions separated by binary operators
66− %^ tnee %parse-expr-list (interlist binop expr)
67− %+ parse-interlist (ifix [ws ws] parse-binop) parse-atomic-expr
68−:: TODO: This is mock and should take operator priority into account.
71− |= l=(interlist binop expr)
75− %double [%binop val.l sep.l (process-expr-list tail.l)]
78− %^ tnee %parse-expr expr
79− %+ cook process-expr-list parse-expr-list
82− |=([=expr] [%expr expr])
83− (ifix [(just '(') (just ')')] (knee *expr |.(parse-expr)))
88− %prefix-expr (print-prefix-expr +.expr)
97− (print-binop +>-.expr)
99− (print-expr +>+.expr)
101− %num (print-numeral +.expr)
102− %table (print-table +.expr)
103− %string (print-string +.expr)
117− %^ tnee %parse-string string
124− |=([* =tape *] (crip tape))
127− (star ;~(less quot next))
144− (print-field-list table)
148− %^ tnee %parse-table table
150− |=([* =table *] table)
158−+$ field-list (list field)
163− %+ turn field-list print-field
165− %^ tnee %parse-field-list field-list
175− |=([=field-list *] field-list)
177− (more (ifix [ws ws] field-sep) parse-field)
195− (print-expr +<.field)
197− (print-expr +>.field)
200− (print-expr +.field)
205− %^ tnee %parse-field field
208− |=([* key=expr * * val=expr] [%keyed key val])
218− |=([=name * =expr] [%keyed [%string name] expr])
226− |=(=expr [%unkeyed expr])
281− %^ tnee %parse-binop binop
283− (cold %add (jest '+'))
284− (cold %sub (jest '-'))
285− (cold %mul (jest '*'))
286− (cold %div (jest '/'))
287− (cold %int-div (jest '//'))
288− (cold %pow (jest '^'))
289− (cold %mod (jest '%'))
290− (cold %band (jest '&'))
291− (cold %bor (jest '|'))
292− (cold %bxor (jest '~'))
293− (cold %rshft (jest '>>'))
294− (cold %lshft (jest '<<'))
295− (cold %and (jest 'and'))
296− (cold %or (jest 'or'))
297− (cold %lt (jest '<'))
298− (cold %lteq (jest '<='))
299− (cold %eq (jest '=='))
300− (cold %gt (jest '>'))
301− (cold %gteq (jest '>='))
302− (cold %neq (jest '~='))
303− (cold %concat (jest '..'))
313− %^ tnee %parse-numeral numeral
331− (bass 10 (plus dit))
339− %float (show-float +.num)
343−+$ exprlist (lest expr)
347− %+ turn exprlist print-expr
349− %^ tnee %parse-exprlist exprlist
350− %+ most (ifix [ws ws] com) parse-expr
355− [%dot prefix-expr name]
356− [%indexed prefix-expr expr]
367− (print-prefix-expr +<.var)
375− (print-prefix-expr +<.var)
381− %^ tnee %parse-var var
382− ;< prefix=prefix-expr bind parse-prefix-expr
383− ?: ?=(%var -.prefix) (easy +.prefix) fail
386−+$ varlist (lest var)
390− %+ turn varlist print-var
392− %^ tnee %parse-varlist varlist
393− %+ most (ifix [ws ws] com) parse-var
399− [%call functioncall]
403− %^ tnee %parse-prefix-expr prefix-expr
405− ;< prefix=prefix-expr bind
407− %+ cook |=(=name [%var %name name])
412− (recurse-prefix-var prefix)
414− :: Takes a prefix (initially [%var ...]) and applies variable access and function calls.
415− :: This completely sidesteps calling the var parser.
417− ++ recurse-prefix-var
418− |= prefix=prefix-expr
419− %+ knee *prefix-expr
424− (parse-access prefix)
427− (recurse-prefix-var [%var var])
429− ;< prefix=prefix-expr bind
430− %+ cook |=(=functioncall [%call functioncall])
431− (parse-functioncall-args prefix)
432− (recurse-prefix-var prefix)
439− |=([* =expr *] [%indexed prefix-expr expr])
448− |=([* =name] [%dot prefix-expr name])
457− %var (print-var +.prefix-expr)
462− (print-expr +.prefix-expr)
465− %call (print-functioncall +.prefix-expr)
472− [%asmnt varlist exprlist]
475− [%func-call functioncall]
476− [%while cond=expr body=blok]
477− [%repeat body=blok cond=expr]
485− %^ tnee %parse-stat stat
487− (cold [%empty ~] (just ';'))
489− (cold [%break ~] (jest 'break'))
492− |= [* cond=expr * body=blok *] [%while cond body]
502− |= [* body=blok * cond=expr] [%repeat body cond]
511− |= [* =label] [%goto label]
522− |= =label [%label label]
526− |=([* =blok *] [%blok blok])
529− (knee *blok |.(parse-blok))
534− |=([=varlist * =exprlist] [%asmnt varlist exprlist])
542− |= =functioncall [%func-call functioncall]
550− %blok (print-blok +.stat)
554− (commaed (turn +<.stat print-var))
556− (commaed (turn +>.stat print-expr))
558− %label (print-label +.stat)
559− %func-call (print-functioncall +.stat)
571− (print-expr cond.stat)
573− (print-blok body.stat)
579− (print-blok body.stat)
581− (print-expr cond.stat)
583− %if (print-if +.stat)
587−+$ if [cond=expr body=blok elsa=(list [cond=expr body=blok]) else=(unit blok)]
594− (print-expr cond.if)
596− (print-blok body.if)
601− |= [cond=expr body=blok]
615− (print-blok u.else.if)
623− %^ tnee %parse-if if
625− |= [* cond=expr * body=blok elsa=(list [cond=expr body=blok]) else=(unit blok) *]
626− [cond body elsa else]
635− |= [* cond=expr * body=blok] [cond body]
656− [%call func=prefix-expr =args]
657− [%method obj=prefix-expr method=name =args]
659−++ print-functioncall
660− |= call=functioncall
666− (print-prefix-expr func.call)
667− (print-args args.call)
672− (print-prefix-expr obj.call)
675− (print-args args.call)
678−++ parse-functioncall
679− %^ tnee %parse-functioncall functioncall
680− ;< prefix=prefix-expr bind parse-prefix-expr
682− (parse-functioncall-args prefix)
684− ?: ?=(%call -.prefix) (easy +.prefix) fail
686−++ parse-functioncall-args
688− %^ tnee %parse-functioncall-args functioncall
693− |= =args [%call prefix-expr args]
697− |= [* method=name =args]
698− [%method prefix-expr method args]
715− (print-exprlist args)
719− %^ tnee %parse-args args
722− |= [* =exprlist *] exprlist
730− |= =table ~[[%table table]]
734− |= =string ~[[%string string]]
751− %^ tnee %parse-label label
753− |= [* =label *] label
761−+$ blok [body=(lest stat) ret=(unit ret)]
768− (turn body.blok print-stat)
770− ~[(print-ret u.ret.blok)]
772− %^ tnee %parse-blok blok
774− (most ws parse-stat)
791− (print-exprlist ret)
794− %^ tnee %parse-ret ret
796− |= [[* =exprlist] *] exprlist
814− ++ name-char ;~(pose name-fst-char dit:ab)
815− ++ name-fst-char ;~(pose alf:ab (just '_'))
817− %+ cook |= =tape (crip tape)
818− ;~(less keyword ;~(plug name-fst-char (star name-char)))
820− |=(s=@s `tape`[?:((syn:si s) %$ '-') (slag 2 (scow %ui (abs:si s)))])
822− |=(u=@u `tape`(slag 2 (scow %ui u)))
825− |* [prev=rule cont=$-(mold rule)]
827− =/ prev-edge (prev nail)
828− ?~ q.prev-edge prev-edge
829− ((cont p.u.q.prev-edge) q.u.q.prev-edge)
842− %^ tnee %parse-float @rd
844− %+ cook royl-cell:so
846− |= [int=@ frac=(unit [@ @]) exp=(unit [exp-sign=? exp=@])]
847− ?: ?=([~ ~] [frac exp]) ~
859− (scan a (bass 10 (plus sid:ab)))
864− (punt ;~(pfix dot (cook moo (plus (shim '0' '9')))))
869− ;~(plug ;~(pose (cold | hep) (easy &)) dim:ag)
874− %^ tnee %parse-hex-float @rd
877− |= [* * int=tape frac=(unit tape) exp=(unit [exp-sign=? exp=@])]
878− ?: ?=([~ ~] [frac exp]) ~
880− =/ frac (fall frac "")
881− =/ whole=@rd (sun:rd (scan (weld int frac) hex))
882− =/ frac-exp=@rd (sun:rd (pow 16 (lent frac)))
883− =/ without-exp (div:rd whole frac-exp)
885− =/ exp-exp (sun:rd (pow 2 exp.u.exp))
887− (mul:rd without-exp exp-exp)
888− (div:rd without-exp exp-exp)
905− ;~(plug ;~(pose (cold | hep) (cold & lus) (easy &)) dim:ag)
910− %^ tnee %hex-digit char
950− |* [=term gar=mold sef=rule]
954− ~? trace [term q.tub]