_seps: "[]():,.·⨯-→{}<>=!+-*/%^&|"

17 alg3 = .s!([.w? "^":"^" .w?] expr:"alg_item")
16 alg2 = .s!([.w? {"*":"*" "/":"/" "%":"%" "&":"&" "∧":"&"} .w?] alg3:"alg")
15 alg = ["(" .w? .s!([.w? {"++":"++" "+":"+" "-":"-" "|":"|" "∨":"|"} .w?]
                      alg2:"alg") .w? ")"]
14 rapp = ["(" .w? {
  ":":"rty"
  "<=":"rle"
  "<":"rlt"
  ">=":"rge"
  ">":"rgt"
} .w! expr:"arg" .w? ")"]
13 list = ["[" .w? .s?([.w? "," .w?] expr:"item") .w? "]"]
12 tup_items_expr = tup_items:"tup"
11 tup_items = [.s!([.w? "," .w?] expr:"item")]
10 tup_path_expr = tup_path:"tup"
9 tup_path = [.s!([.w? {"x" "⨯"} .w?] expr:"item") .w? {"->" "→"} .w? expr:"item"]
8 val = [?"\\" {
  ["true":"bool" !.$]
  ["false":!"bool" !.$]
  [.$_:"num_pi" .w? {"pi" "π"}]
  [.$_:"num_tau" .w? {"tau" "τ"}]
  .$_:"num"
}]
7 var = [!.$ .._seps!:"var"]
6 path_right = [.w? "[" .w? {tup_path_expr expr} .w? "]"]
5 app_right = [.w? "(" .w? {tup_items_expr expr} .w? ")"]
4 comp_right = [.w? {"." "·"} .w? expr]
3 typ_right = [.w? ":" .w? expr]
3 constr_right = [.w? "{" .w? {tup_items_expr expr} .w? "}"]
2 seq = [{
  ["(" .w? tup_items_expr:"left" .w? ")"]
  alg:"alg"
  val:"left"
  var:"left"
} .r!({
  path_right:"path"
  app_right:"app"
  constr_right:"constr"
  comp_right:"comp"
  typ_right:"typ"
})]
1 expr = {
  seq:"seq"
  rapp:"rapp"
  ["(" .w? tup_items_expr .w? ")"]
  alg:"alg"
  list:"list"
  val
  var
}
0 doc = [.w? expr:"expr" .w?]
