@@ -75,6 +75,7 @@
75 %double [%binop val.l sep.l (process-expr-list tail.l)]
75 %double [%binop val.l sep.l (process-expr-list tail.l)]
77++ parse-expr
77++ parse-expr
78 %+ knee *expr
79 %+ knee *expr
80 %+ cook process-expr-list parse-expr-list
81 %+ cook process-expr-list parse-expr-list
@@ -351,6 +352,7 @@
351 %- commaed
352 %- commaed
352 %+ turn exprlist print-expr
353 %+ turn exprlist print-expr
353++ parse-exprlist
354++ parse-exprlist
354 %+ knee *exprlist
356 %+ knee *exprlist
356 %+ most (ifix [ws ws] com) parse-expr
358 %+ most (ifix [ws ws] com) parse-expr
@@ -436,15 +438,28 @@
436+$ prefix-expr
438+$ prefix-expr
438 [%expr expr]
440 [%expr expr]
441+ [%call functioncall]
439 [%var var]
442 [%var var]
444+++ parse-simple-prefix-expr
445+ ~& "parse-simple-prefix-expr"
446+ %+ knee *$%([%expr expr] [%var var])
451+ %+ cook |=([=var] [%var var]) parse-var
441++ parse-prefix-expr
453++ parse-prefix-expr
454+ ~& "parse-prefix-expr"
442 %+ knee *prefix-expr
455 %+ knee *prefix-expr
457+ ;< prefix=$%([%expr expr] [%var var]) bind parse-simple-prefix-expr
445− %+ cook |=([=var] [%var var]) parse-var
459+ %+ cook |=(=functioncall [%call functioncall])
460+ (parse-functioncall-args prefix)
447− parse-parened-expr
462+ (easy prefix)
449++ print-prefix-expr
464++ print-prefix-expr
450 |= [=prefix-expr]
465 |= [=prefix-expr]
@@ -457,6 +472,7 @@
457 (print-expr +.prefix-expr)
472 (print-expr +.prefix-expr)
475+ %call (print-functioncall +.prefix-expr)
@@ -469,6 +485,7 @@
469 [%func-call functioncall]
485 [%func-call functioncall]
470 [%while cond=expr body=blok]
486 [%while cond=expr body=blok]
471 [%repeat body=blok cond=expr]
487 [%repeat body=blok cond=expr]
472 [%break ~]
489 [%break ~]
473 [%empty ~]
490 [%empty ~]
@@ -506,6 +523,10 @@
506 parse-name
523 parse-name
510 |= =label [%label label]
531 |= =label [%label label]
511 parse-label
532 parse-label
@@ -568,6 +589,73 @@
569 (print-expr cond.stat)
590 (print-expr cond.stat)
592+ %if (print-if +.stat)
596++$ if [cond=expr body=blok elsa=(list [cond=expr body=blok]) else=(unit blok)]
603+ (print-expr cond.if)
605+ (print-blok body.if)
610+ |= [cond=expr body=blok]
624+ (print-blok u.else.if)
633+ |= [* cond=expr * body=blok elsa=(list [cond=expr body=blok]) else=(unit blok) *]
634+ [cond body elsa else]
643+ |= [* cond=expr * body=blok] [cond body]
572:: functioncall
660:: functioncall
@@ -598,22 +686,29 @@
598++ parse-functioncall
686++ parse-functioncall
599 %+ knee *functioncall
687 %+ knee *functioncall
689+ ;< prefix=prefix-expr bind parse-prefix-expr
691+ (parse-functioncall-args prefix)
692+++ parse-functioncall-args
693+ ~& "parse-functioncall-args"
695+ %+ knee *functioncall
603− |= [func=prefix-expr =args] [%call func args]
605− parse-prefix-expr
701+ |= =args [%call prefix-expr args]
610− |= [obj=prefix-expr * method=name =args]
611− [%method obj method args]
616 parse-args
702 parse-args
705+ |= [* method=name =args]
706+ [%method prefix-expr method args]
@@ -629,6 +724,7 @@
631++ parse-args
726++ parse-args
632 %+ knee *args
728 %+ knee *args