@@ -1,6 +1,7 @@
3−/+ *interlist
3+/+ interlist
@@ -75,17 +76,64 @@ apex
75:: Parse expressions separated by binary operators
76:: Parse expressions separated by binary operators
77++ parse-expr-list
78++ parse-expr-list
78− %^ tnee %parse-expr-list (interlist binop expr)
79+ %^ tnee %parse-expr-list (interlist:interlist binop expr)
79− %+ parse-interlist (ifix [ws ws] parse-binop) parse-atomic-expr
80+ %+ parse:interlist (ifix [ws ws] parse-binop) parse-atomic-expr
80:: TODO: This is mock and should take operator priority into account.
81:: TODO: This is mock and should take operator priority into account.
82++ process-expr-list
83++ process-expr-list
83− |= l=(interlist binop expr)
85+ |= l=(interlist:interlist binop expr)
85− ?- -.l
87+ %- strip-tree
88+ %- (process-left-assoc ~[%or])
89+ %- (process-left-assoc ~[%and])
90+ %- (process-left-assoc ~[%lt %gt %lteq %gteq %neq %eq])
91+ %- (process-left-assoc ~[%bor])
92+ %- (process-left-assoc ~[%bxor])
93+ %- (process-left-assoc ~[%band])
94+ %- (process-left-assoc ~[%rshft %lshft])
95+ %- (process-right-assoc ~[%concat])
96+ %- (process-left-assoc ~[%add %sub])
97+ %- (process-left-assoc ~[%mul %div %int-div %mod])
98+ %- (process-left-assoc ~[%pow])
102+ |= tree=(bintree binop (interlist:interlist binop expr))
86− %single val.l
105+ %leaf ?> ?=(%single +<.tree) +>.tree
87− %double [%binop val.l sep.l (process-expr-list tail.l)]
106+ %node [%binop $(tree l.tree) n.tree $(tree r.tree)]
108+ ++ process-right-assoc
110+ |= tree=(bintree binop (interlist:interlist binop expr))
116+ =/ splitted (split-left-on:interlist |=(op=binop (elem op ops)) l)
117+ ?~ splitted [%leaf l]
118+ [%node $(l lhs.u.splitted) pivot.u.splitted $(l rhs.u.splitted)]
120+ [%node $(tree l.tree) n.tree $(tree r.tree)]
122+ ++ process-left-assoc
124+ |= tree=(bintree binop (interlist:interlist binop expr))
130+ =/ splitted (split-right-on:interlist |=(op=binop (elem op ops)) l)
131+ ?~ splitted [%leaf l]
132+ [%node $(l lhs.u.splitted) pivot.u.splitted $(l rhs.u.splitted)]
134+ [%node $(tree l.tree) n.tree $(tree r.tree)]
89++ parse-expr
137++ parse-expr
90 %^ tnee %parse-expr expr
138 %^ tnee %parse-expr expr
91 %+ cook process-expr-list parse-expr-list
139 %+ cook process-expr-list parse-expr-list
@@ -893,4 +941,8 @@ apex
894 &(?=(~ body.blok) ?=(~ ret.blok))
942 &(?=(~ body.blok) ?=(~ ret.blok))
895++ max-int 9.223.372.036.854.775.807
943++ max-int 9.223.372.036.854.775.807
945+ |= [nedl=* stak=(list *)]
947+ ?=(^ (find ~[nedl] stak))