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

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