_seps: "(){}<>[],:.\""

10 enum_var = [{expr_left:"ty" .._seps!:"ty"} "::" {expr:"data" .._seps!:"data"}]
9 expr_left = {
  "Self":"self"
  "String":"string"
  "Arc":"arc"
  "Box":"box"
  "Option":"opt"
  "Vec":"vec"
  "f64":"f64"
  "bool":"bool"
  "usize":"usize"
  enum:"enum"
  struct:"struct"
  tup:"tup"
  ty:"ty"
  ins:"ins"
  .t!:"str"
  .$_:"num"
}
8 tup_field = [{expr_left:"item" .._seps!:"item"} .w? ":" .w? expr:"item"]
7 struct = [{
  ["struct" .w! {ava:"ava" .t!:"name" .._seps!:"name"}]
  [?["struct" .w!] {.t!:"name" .._seps!:"name"}]
} .w! "{" .w?
  .s?([.w? "," .w?] expr:"field")
.w? "}"]
6 ins = ["(ins" .w! {.$:"class" expr:"ty"} ?[.w! expr:"data"] ")"]
5 ty = {
  {["." .._seps!:"name"]}
  ["(ty" .w! {.t!:"name" .._seps!:"name"} .w? ")"]
}
4 ava = {
  ["(ava" .w! expr:"a" .w! expr:"b" .w? ")"]
  [{expr_left:"a" .._seps!:"a"} {
    ["<" .w? expr:"b" .w? ">"]
    ["(" .w? expr:"b" .w? ")"]
  }]
}
3 tup = {
  ["[" .w? .s?([.w? "," .w?] expr:"item") .w? "]"]
  ["(tup" .w! .s?(.w! expr:"item") .w? ")"]
  ["(" .w? .s?([.w? "," .w?] expr:"item") .w? ")"]
}
2 enum = ["enum" .w! {ava:"ava" .t!:"name" .._seps!:"name"} .w! "{" .w?
  .s?([.w? "," .w?] {expr:"variant" .._seps!:"item"})
.w? "}"]
1 expr = {
  tup_field:"tup"
  ava:"ava"
  enum_var:"enum_var"
  expr_left
}
0 doc = [.w? expr:"expr" .w?]
