<: Parser for infix expressions
Usage: parse "2*(3+4)"
:>
parseNumber [@xs] -> {:r n [x:@!digit @xs] -> r 10n+x xs; n [] -> n} 0 xs
parseOp [x:{\+; \-; \*; \/}] -> x.asSym
parseTerm x -> x.{[\( a:@Expr \)] -> [a]
;[a:@Number] -> a}
parseExpr x -> x.{[a:@Term o:@Op b:@Expr] -> [o a b]
;[a:@Term] -> a}
parse string -> string.asList.(strip \Space ?).parseExpr
parseNumber [@xs] -> {:r n [x:@!digit @xs] -> r 10n+x xs; n [] -> n} 0 xs
parseOp [x:{\+; \-; \*; \/}]->x.asSym
parseTerm [\( a:@Expr \)]->[a]; [a:@Number]->a
parseExpr [a:@Term o:@Op b:@Expr]->[o a b]; [a:@Term]->a
parse string -> string.asList.(strip \Space ?).parseExpr