{
  "$schema": "https://tree-sitter.github.io/tree-sitter/assets/schemas/grammar.schema.json",
  "name": "erlang",
  "word": "atom",
  "rules": {
    "source_file": {
      "type": "CHOICE",
      "members": [
        {
          "type": "FIELD",
          "name": "forms_only",
          "content": {
            "type": "REPEAT",
            "content": {
              "type": "SYMBOL",
              "name": "_form"
            }
          }
        },
        {
          "type": "FIELD",
          "name": "exprs",
          "content": {
            "type": "REPEAT",
            "content": {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_expr"
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "STRING",
                      "value": "."
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                }
              ]
            }
          }
        }
      ]
    },
    "_form": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "module_attribute"
        },
        {
          "type": "SYMBOL",
          "name": "behaviour_attribute"
        },
        {
          "type": "SYMBOL",
          "name": "export_attribute"
        },
        {
          "type": "SYMBOL",
          "name": "import_attribute"
        },
        {
          "type": "SYMBOL",
          "name": "export_type_attribute"
        },
        {
          "type": "SYMBOL",
          "name": "optional_callbacks_attribute"
        },
        {
          "type": "SYMBOL",
          "name": "compile_options_attribute"
        },
        {
          "type": "SYMBOL",
          "name": "feature_attribute"
        },
        {
          "type": "SYMBOL",
          "name": "file_attribute"
        },
        {
          "type": "SYMBOL",
          "name": "deprecated_attribute"
        },
        {
          "type": "SYMBOL",
          "name": "record_decl"
        },
        {
          "type": "SYMBOL",
          "name": "type_alias"
        },
        {
          "type": "SYMBOL",
          "name": "nominal"
        },
        {
          "type": "SYMBOL",
          "name": "opaque"
        },
        {
          "type": "SYMBOL",
          "name": "spec"
        },
        {
          "type": "SYMBOL",
          "name": "callback"
        },
        {
          "type": "SYMBOL",
          "name": "wild_attribute"
        },
        {
          "type": "SYMBOL",
          "name": "fun_decl"
        },
        {
          "type": "SYMBOL",
          "name": "_preprocessor_directive"
        },
        {
          "type": "SYMBOL",
          "name": "ssr_definition"
        },
        {
          "type": "SYMBOL",
          "name": "shebang"
        }
      ]
    },
    "ssr_definition": {
      "type": "PREC_RIGHT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "ssr"
          },
          {
            "type": "STRING",
            "value": ":"
          },
          {
            "type": "FIELD",
            "name": "lhs",
            "content": {
              "type": "SYMBOL",
              "name": "_expr"
            }
          },
          {
            "type": "FIELD",
            "name": "rhs",
            "content": {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "ssr_replacement"
                },
                {
                  "type": "BLANK"
                }
              ]
            }
          },
          {
            "type": "FIELD",
            "name": "when",
            "content": {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "ssr_when"
                },
                {
                  "type": "BLANK"
                }
              ]
            }
          },
          {
            "type": "STRING",
            "value": "."
          }
        ]
      }
    },
    "ssr_replacement": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "==>>"
        },
        {
          "type": "FIELD",
          "name": "expr",
          "content": {
            "type": "SYMBOL",
            "name": "_expr"
          }
        }
      ]
    },
    "ssr_when": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "when"
        },
        {
          "type": "FIELD",
          "name": "guard",
          "content": {
            "type": "SYMBOL",
            "name": "guard"
          }
        }
      ]
    },
    "_preprocessor_directive": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "pp_include"
        },
        {
          "type": "SYMBOL",
          "name": "pp_include_lib"
        },
        {
          "type": "SYMBOL",
          "name": "pp_undef"
        },
        {
          "type": "SYMBOL",
          "name": "pp_ifdef"
        },
        {
          "type": "SYMBOL",
          "name": "pp_ifndef"
        },
        {
          "type": "SYMBOL",
          "name": "pp_else"
        },
        {
          "type": "SYMBOL",
          "name": "pp_endif"
        },
        {
          "type": "SYMBOL",
          "name": "pp_if"
        },
        {
          "type": "SYMBOL",
          "name": "pp_elif"
        },
        {
          "type": "SYMBOL",
          "name": "pp_define"
        }
      ]
    },
    "pp_include": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "-"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "include"
            },
            {
              "type": "ALIAS",
              "content": {
                "type": "STRING",
                "value": "'include'"
              },
              "named": false,
              "value": "include"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "FIELD",
          "name": "file",
          "content": {
            "type": "REPEAT1",
            "content": {
              "type": "SYMBOL",
              "name": "_include_detail"
            }
          }
        },
        {
          "type": "STRING",
          "value": ")"
        },
        {
          "type": "STRING",
          "value": "."
        }
      ]
    },
    "pp_include_lib": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "-"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "include_lib"
            },
            {
              "type": "ALIAS",
              "content": {
                "type": "STRING",
                "value": "'include_lib'"
              },
              "named": false,
              "value": "include_lib"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "FIELD",
          "name": "file",
          "content": {
            "type": "REPEAT1",
            "content": {
              "type": "SYMBOL",
              "name": "_include_detail"
            }
          }
        },
        {
          "type": "STRING",
          "value": ")"
        },
        {
          "type": "STRING",
          "value": "."
        }
      ]
    },
    "pp_undef": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "-"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "undef"
            },
            {
              "type": "ALIAS",
              "content": {
                "type": "STRING",
                "value": "'undef'"
              },
              "named": false,
              "value": "undef"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "FIELD",
          "name": "name",
          "content": {
            "type": "SYMBOL",
            "name": "_macro_name"
          }
        },
        {
          "type": "STRING",
          "value": ")"
        },
        {
          "type": "STRING",
          "value": "."
        }
      ]
    },
    "pp_ifdef": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "-"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "ifdef"
            },
            {
              "type": "ALIAS",
              "content": {
                "type": "STRING",
                "value": "'ifdef'"
              },
              "named": false,
              "value": "ifdef"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "FIELD",
          "name": "name",
          "content": {
            "type": "SYMBOL",
            "name": "_macro_name"
          }
        },
        {
          "type": "STRING",
          "value": ")"
        },
        {
          "type": "STRING",
          "value": "."
        }
      ]
    },
    "pp_ifndef": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "-"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "ifndef"
            },
            {
              "type": "ALIAS",
              "content": {
                "type": "STRING",
                "value": "'ifndef'"
              },
              "named": false,
              "value": "ifndef"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "FIELD",
          "name": "name",
          "content": {
            "type": "SYMBOL",
            "name": "_macro_name"
          }
        },
        {
          "type": "STRING",
          "value": ")"
        },
        {
          "type": "STRING",
          "value": "."
        }
      ]
    },
    "pp_else": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "-"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "else"
            },
            {
              "type": "ALIAS",
              "content": {
                "type": "STRING",
                "value": "'else'"
              },
              "named": false,
              "value": "else"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "."
        }
      ]
    },
    "pp_endif": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "-"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "endif"
            },
            {
              "type": "ALIAS",
              "content": {
                "type": "STRING",
                "value": "'endif'"
              },
              "named": false,
              "value": "endif"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "."
        }
      ]
    },
    "pp_if": {
      "type": "PREC",
      "value": 20,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "-"
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "STRING",
                "value": "if"
              },
              {
                "type": "ALIAS",
                "content": {
                  "type": "STRING",
                  "value": "'if'"
                },
                "named": false,
                "value": "if"
              }
            ]
          },
          {
            "type": "FIELD",
            "name": "cond",
            "content": {
              "type": "SYMBOL",
              "name": "_expr"
            }
          },
          {
            "type": "STRING",
            "value": "."
          }
        ]
      }
    },
    "pp_elif": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "-"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "elif"
            },
            {
              "type": "ALIAS",
              "content": {
                "type": "STRING",
                "value": "'elif'"
              },
              "named": false,
              "value": "elif"
            }
          ]
        },
        {
          "type": "FIELD",
          "name": "cond",
          "content": {
            "type": "SYMBOL",
            "name": "_expr"
          }
        },
        {
          "type": "STRING",
          "value": "."
        }
      ]
    },
    "pp_define": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "-"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "define"
            },
            {
              "type": "ALIAS",
              "content": {
                "type": "STRING",
                "value": "'define'"
              },
              "named": false,
              "value": "define"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "FIELD",
          "name": "lhs",
          "content": {
            "type": "SYMBOL",
            "name": "macro_lhs"
          }
        },
        {
          "type": "STRING",
          "value": ","
        },
        {
          "type": "FIELD",
          "name": "replacement",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "_macro_def_replacement"
              },
              {
                "type": "BLANK"
              }
            ]
          }
        },
        {
          "type": "STRING",
          "value": ")"
        },
        {
          "type": "STRING",
          "value": "."
        }
      ]
    },
    "_include_detail": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "string"
        },
        {
          "type": "SYMBOL",
          "name": "macro_call_expr"
        }
      ]
    },
    "module_attribute": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "-"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "module"
            },
            {
              "type": "ALIAS",
              "content": {
                "type": "STRING",
                "value": "'module'"
              },
              "named": false,
              "value": "module"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "FIELD",
          "name": "name",
          "content": {
            "type": "SYMBOL",
            "name": "_name"
          }
        },
        {
          "type": "STRING",
          "value": ")"
        },
        {
          "type": "STRING",
          "value": "."
        }
      ]
    },
    "behaviour_attribute": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "-"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "STRING",
                  "value": "behaviour"
                },
                {
                  "type": "ALIAS",
                  "content": {
                    "type": "STRING",
                    "value": "'behaviour'"
                  },
                  "named": false,
                  "value": "behaviour"
                }
              ]
            },
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "STRING",
                  "value": "behavior"
                },
                {
                  "type": "ALIAS",
                  "content": {
                    "type": "STRING",
                    "value": "'behavior'"
                  },
                  "named": false,
                  "value": "behavior"
                }
              ]
            }
          ]
        },
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "FIELD",
          "name": "name",
          "content": {
            "type": "SYMBOL",
            "name": "_name"
          }
        },
        {
          "type": "STRING",
          "value": ")"
        },
        {
          "type": "STRING",
          "value": "."
        }
      ]
    },
    "export_attribute": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "-"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "export"
            },
            {
              "type": "ALIAS",
              "content": {
                "type": "STRING",
                "value": "'export'"
              },
              "named": false,
              "value": "export"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "STRING",
          "value": "["
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "FIELD",
                  "name": "funs",
                  "content": {
                    "type": "SYMBOL",
                    "name": "fa"
                  }
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "CHOICE",
                        "members": [
                          {
                            "type": "STRING",
                            "value": ","
                          },
                          {
                            "type": "BLANK"
                          }
                        ]
                      },
                      {
                        "type": "FIELD",
                        "name": "funs",
                        "content": {
                          "type": "SYMBOL",
                          "name": "fa"
                        }
                      }
                    ]
                  }
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "]"
        },
        {
          "type": "STRING",
          "value": ")"
        },
        {
          "type": "STRING",
          "value": "."
        }
      ]
    },
    "import_attribute": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "-"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "import"
            },
            {
              "type": "ALIAS",
              "content": {
                "type": "STRING",
                "value": "'import'"
              },
              "named": false,
              "value": "import"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "FIELD",
          "name": "module",
          "content": {
            "type": "SYMBOL",
            "name": "_name"
          }
        },
        {
          "type": "STRING",
          "value": ","
        },
        {
          "type": "STRING",
          "value": "["
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "FIELD",
                  "name": "funs",
                  "content": {
                    "type": "SYMBOL",
                    "name": "fa"
                  }
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "CHOICE",
                        "members": [
                          {
                            "type": "STRING",
                            "value": ","
                          },
                          {
                            "type": "BLANK"
                          }
                        ]
                      },
                      {
                        "type": "FIELD",
                        "name": "funs",
                        "content": {
                          "type": "SYMBOL",
                          "name": "fa"
                        }
                      }
                    ]
                  }
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "]"
        },
        {
          "type": "STRING",
          "value": ")"
        },
        {
          "type": "STRING",
          "value": "."
        }
      ]
    },
    "optional_callbacks_attribute": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "-"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "optional_callbacks"
            },
            {
              "type": "ALIAS",
              "content": {
                "type": "STRING",
                "value": "'optional_callbacks'"
              },
              "named": false,
              "value": "optional_callbacks"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "STRING",
          "value": "["
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "FIELD",
                  "name": "callbacks",
                  "content": {
                    "type": "SYMBOL",
                    "name": "fa"
                  }
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "CHOICE",
                        "members": [
                          {
                            "type": "STRING",
                            "value": ","
                          },
                          {
                            "type": "BLANK"
                          }
                        ]
                      },
                      {
                        "type": "FIELD",
                        "name": "callbacks",
                        "content": {
                          "type": "SYMBOL",
                          "name": "fa"
                        }
                      }
                    ]
                  }
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "]"
        },
        {
          "type": "STRING",
          "value": ")"
        },
        {
          "type": "STRING",
          "value": "."
        }
      ]
    },
    "fa": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "fun",
          "content": {
            "type": "SYMBOL",
            "name": "_name"
          }
        },
        {
          "type": "FIELD",
          "name": "arity",
          "content": {
            "type": "SYMBOL",
            "name": "arity"
          }
        }
      ]
    },
    "export_type_attribute": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "-"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "export_type"
            },
            {
              "type": "ALIAS",
              "content": {
                "type": "STRING",
                "value": "'export_type'"
              },
              "named": false,
              "value": "export_type"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "STRING",
          "value": "["
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "FIELD",
                  "name": "types",
                  "content": {
                    "type": "SYMBOL",
                    "name": "fa"
                  }
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "CHOICE",
                        "members": [
                          {
                            "type": "STRING",
                            "value": ","
                          },
                          {
                            "type": "BLANK"
                          }
                        ]
                      },
                      {
                        "type": "FIELD",
                        "name": "types",
                        "content": {
                          "type": "SYMBOL",
                          "name": "fa"
                        }
                      }
                    ]
                  }
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "]"
        },
        {
          "type": "STRING",
          "value": ")"
        },
        {
          "type": "STRING",
          "value": "."
        }
      ]
    },
    "compile_options_attribute": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "-"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "compile"
            },
            {
              "type": "ALIAS",
              "content": {
                "type": "STRING",
                "value": "'compile'"
              },
              "named": false,
              "value": "compile"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "FIELD",
          "name": "options",
          "content": {
            "type": "SYMBOL",
            "name": "_expr"
          }
        },
        {
          "type": "STRING",
          "value": ")"
        },
        {
          "type": "STRING",
          "value": "."
        }
      ]
    },
    "file_attribute": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "-"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "file"
            },
            {
              "type": "ALIAS",
              "content": {
                "type": "STRING",
                "value": "'file'"
              },
              "named": false,
              "value": "file"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "FIELD",
          "name": "original_file",
          "content": {
            "type": "SYMBOL",
            "name": "string"
          }
        },
        {
          "type": "STRING",
          "value": ","
        },
        {
          "type": "FIELD",
          "name": "original_line",
          "content": {
            "type": "SYMBOL",
            "name": "integer"
          }
        },
        {
          "type": "STRING",
          "value": ")"
        },
        {
          "type": "STRING",
          "value": "."
        }
      ]
    },
    "deprecated_attribute": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "-"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "deprecated"
            },
            {
              "type": "ALIAS",
              "content": {
                "type": "STRING",
                "value": "'deprecated'"
              },
              "named": false,
              "value": "deprecated"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "FIELD",
          "name": "attr",
          "content": {
            "type": "SYMBOL",
            "name": "_deprecated_details"
          }
        },
        {
          "type": "STRING",
          "value": ")"
        },
        {
          "type": "STRING",
          "value": "."
        }
      ]
    },
    "feature_attribute": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "-"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "feature"
            },
            {
              "type": "ALIAS",
              "content": {
                "type": "STRING",
                "value": "'feature'"
              },
              "named": false,
              "value": "feature"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "FIELD",
          "name": "feature",
          "content": {
            "type": "SYMBOL",
            "name": "_expr"
          }
        },
        {
          "type": "STRING",
          "value": ","
        },
        {
          "type": "FIELD",
          "name": "flag",
          "content": {
            "type": "SYMBOL",
            "name": "_expr"
          }
        },
        {
          "type": "STRING",
          "value": ")"
        },
        {
          "type": "STRING",
          "value": "."
        }
      ]
    },
    "_deprecated_details": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "deprecated_module"
        },
        {
          "type": "SYMBOL",
          "name": "deprecated_fa"
        },
        {
          "type": "SYMBOL",
          "name": "deprecated_fas"
        }
      ]
    },
    "deprecated_module": {
      "type": "FIELD",
      "name": "module",
      "content": {
        "type": "SYMBOL",
        "name": "atom"
      }
    },
    "deprecated_fas": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "["
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "FIELD",
              "name": "fa",
              "content": {
                "type": "SYMBOL",
                "name": "deprecated_fa"
              }
            },
            {
              "type": "REPEAT",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": ","
                  },
                  {
                    "type": "FIELD",
                    "name": "fa",
                    "content": {
                      "type": "SYMBOL",
                      "name": "deprecated_fa"
                    }
                  }
                ]
              }
            }
          ]
        },
        {
          "type": "STRING",
          "value": "]"
        }
      ]
    },
    "deprecated_fa": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "{"
        },
        {
          "type": "FIELD",
          "name": "fun",
          "content": {
            "type": "SYMBOL",
            "name": "atom"
          }
        },
        {
          "type": "STRING",
          "value": ","
        },
        {
          "type": "FIELD",
          "name": "arity",
          "content": {
            "type": "SYMBOL",
            "name": "_deprecated_fun_arity"
          }
        },
        {
          "type": "FIELD",
          "name": "desc",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "deprecation_desc"
              },
              {
                "type": "BLANK"
              }
            ]
          }
        },
        {
          "type": "STRING",
          "value": "}"
        }
      ]
    },
    "deprecation_desc": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": ","
        },
        {
          "type": "FIELD",
          "name": "desc",
          "content": {
            "type": "SYMBOL",
            "name": "_desc"
          }
        }
      ]
    },
    "_desc": {
      "type": "CHOICE",
      "members": [
        {
          "type": "FIELD",
          "name": "atom",
          "content": {
            "type": "SYMBOL",
            "name": "atom"
          }
        },
        {
          "type": "FIELD",
          "name": "comment",
          "content": {
            "type": "SYMBOL",
            "name": "multi_string"
          }
        }
      ]
    },
    "multi_string": {
      "type": "PREC_RIGHT",
      "value": 0,
      "content": {
        "type": "FIELD",
        "name": "elems",
        "content": {
          "type": "REPEAT1",
          "content": {
            "type": "SYMBOL",
            "name": "_string_like"
          }
        }
      }
    },
    "_string_like": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "string"
        },
        {
          "type": "SYMBOL",
          "name": "_macro_body_expr"
        }
      ]
    },
    "_deprecated_fun_arity": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "integer"
        },
        {
          "type": "SYMBOL",
          "name": "deprecated_wildcard"
        }
      ]
    },
    "deprecated_wildcard": {
      "type": "STRING",
      "value": "'_'"
    },
    "type_alias": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "-"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "type"
            },
            {
              "type": "ALIAS",
              "content": {
                "type": "STRING",
                "value": "'type'"
              },
              "named": false,
              "value": "type"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "_type_def"
        },
        {
          "type": "STRING",
          "value": "."
        }
      ]
    },
    "nominal": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "-"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "nominal"
            },
            {
              "type": "ALIAS",
              "content": {
                "type": "STRING",
                "value": "'nominal'"
              },
              "named": false,
              "value": "nominal"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "_type_def"
        },
        {
          "type": "STRING",
          "value": "."
        }
      ]
    },
    "opaque": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "-"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "opaque"
            },
            {
              "type": "ALIAS",
              "content": {
                "type": "STRING",
                "value": "'opaque'"
              },
              "named": false,
              "value": "opaque"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "_type_def"
        },
        {
          "type": "STRING",
          "value": "."
        }
      ]
    },
    "_type_def": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SEQ",
          "members": [
            {
              "type": "FIELD",
              "name": "name",
              "content": {
                "type": "SYMBOL",
                "name": "type_name"
              }
            },
            {
              "type": "STRING",
              "value": "::"
            },
            {
              "type": "FIELD",
              "name": "ty",
              "content": {
                "type": "SYMBOL",
                "name": "_expr"
              }
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "("
            },
            {
              "type": "FIELD",
              "name": "name",
              "content": {
                "type": "SYMBOL",
                "name": "type_name"
              }
            },
            {
              "type": "STRING",
              "value": "::"
            },
            {
              "type": "FIELD",
              "name": "ty",
              "content": {
                "type": "SYMBOL",
                "name": "_expr"
              }
            },
            {
              "type": "STRING",
              "value": ")"
            }
          ]
        }
      ]
    },
    "type_name": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "name",
          "content": {
            "type": "SYMBOL",
            "name": "_name"
          }
        },
        {
          "type": "FIELD",
          "name": "args",
          "content": {
            "type": "SYMBOL",
            "name": "var_args"
          }
        }
      ]
    },
    "record_decl": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "-"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "record"
            },
            {
              "type": "ALIAS",
              "content": {
                "type": "STRING",
                "value": "'record'"
              },
              "named": false,
              "value": "record"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "FIELD",
          "name": "name",
          "content": {
            "type": "SYMBOL",
            "name": "_name"
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": ","
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "_record_tuple"
        },
        {
          "type": "STRING",
          "value": ")"
        },
        {
          "type": "STRING",
          "value": "."
        }
      ]
    },
    "spec": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "-"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "spec"
            },
            {
              "type": "ALIAS",
              "content": {
                "type": "STRING",
                "value": "'spec'"
              },
              "named": false,
              "value": "spec"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "_spec_def"
        },
        {
          "type": "STRING",
          "value": "."
        }
      ]
    },
    "callback": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "-"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "callback"
            },
            {
              "type": "ALIAS",
              "content": {
                "type": "STRING",
                "value": "'callback'"
              },
              "named": false,
              "value": "callback"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "_spec_def"
        },
        {
          "type": "STRING",
          "value": "."
        }
      ]
    },
    "_spec_def": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_spec_fun"
            },
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "FIELD",
                  "name": "sigs",
                  "content": {
                    "type": "SYMBOL",
                    "name": "type_sig"
                  }
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ";"
                      },
                      {
                        "type": "FIELD",
                        "name": "sigs",
                        "content": {
                          "type": "SYMBOL",
                          "name": "type_sig"
                        }
                      }
                    ]
                  }
                }
              ]
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "("
            },
            {
              "type": "SYMBOL",
              "name": "_spec_fun"
            },
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "FIELD",
                  "name": "sigs",
                  "content": {
                    "type": "SYMBOL",
                    "name": "type_sig"
                  }
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ";"
                      },
                      {
                        "type": "FIELD",
                        "name": "sigs",
                        "content": {
                          "type": "SYMBOL",
                          "name": "type_sig"
                        }
                      }
                    ]
                  }
                }
              ]
            },
            {
              "type": "STRING",
              "value": ")"
            }
          ]
        }
      ]
    },
    "_spec_fun": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "module",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "module"
              },
              {
                "type": "BLANK"
              }
            ]
          }
        },
        {
          "type": "FIELD",
          "name": "fun",
          "content": {
            "type": "SYMBOL",
            "name": "_name"
          }
        }
      ]
    },
    "module": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "name",
          "content": {
            "type": "SYMBOL",
            "name": "_name"
          }
        },
        {
          "type": "STRING",
          "value": ":"
        }
      ]
    },
    "wild_attribute": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "name",
          "content": {
            "type": "SYMBOL",
            "name": "attr_name"
          }
        },
        {
          "type": "FIELD",
          "name": "value",
          "content": {
            "type": "SYMBOL",
            "name": "_expr"
          }
        },
        {
          "type": "STRING",
          "value": "."
        }
      ]
    },
    "attr_name": {
      "type": "PREC",
      "value": 20,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "-"
          },
          {
            "type": "FIELD",
            "name": "name",
            "content": {
              "type": "SYMBOL",
              "name": "_name"
            }
          }
        ]
      }
    },
    "fun_decl": {
      "type": "PREC_RIGHT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "FIELD",
            "name": "clause",
            "content": {
              "type": "SYMBOL",
              "name": "_function_or_macro_clause"
            }
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "_fun_clause_separator"
              },
              {
                "type": "BLANK"
              }
            ]
          }
        ]
      }
    },
    "_fun_clause_separator": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": ";"
        },
        {
          "type": "STRING",
          "value": "."
        }
      ]
    },
    "type_sig": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "args",
          "content": {
            "type": "SYMBOL",
            "name": "expr_args"
          }
        },
        {
          "type": "STRING",
          "value": "->"
        },
        {
          "type": "FIELD",
          "name": "ty",
          "content": {
            "type": "SYMBOL",
            "name": "_expr"
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "FIELD",
              "name": "guard",
              "content": {
                "type": "SYMBOL",
                "name": "type_guards"
              }
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "type_guards": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "when"
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "FIELD",
              "name": "guards",
              "content": {
                "type": "SYMBOL",
                "name": "ann_type"
              }
            },
            {
              "type": "REPEAT",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": ","
                  },
                  {
                    "type": "FIELD",
                    "name": "guards",
                    "content": {
                      "type": "SYMBOL",
                      "name": "ann_type"
                    }
                  }
                ]
              }
            }
          ]
        }
      ]
    },
    "ann_type": {
      "type": "PREC",
      "value": 1,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "FIELD",
            "name": "var",
            "content": {
              "type": "SYMBOL",
              "name": "ann_var"
            }
          },
          {
            "type": "FIELD",
            "name": "ty",
            "content": {
              "type": "SYMBOL",
              "name": "_expr"
            }
          }
        ]
      }
    },
    "ann_var": {
      "type": "PREC",
      "value": 1,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "FIELD",
            "name": "var",
            "content": {
              "type": "SYMBOL",
              "name": "var"
            }
          },
          {
            "type": "STRING",
            "value": "::"
          }
        ]
      }
    },
    "pipe": {
      "type": "PREC_RIGHT",
      "value": 2,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "FIELD",
            "name": "lhs",
            "content": {
              "type": "SYMBOL",
              "name": "_expr"
            }
          },
          {
            "type": "STRING",
            "value": "|"
          },
          {
            "type": "FIELD",
            "name": "rhs",
            "content": {
              "type": "SYMBOL",
              "name": "_expr"
            }
          }
        ]
      }
    },
    "fun_type": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "fun"
        },
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "FIELD",
          "name": "sig",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "fun_type_sig"
              },
              {
                "type": "BLANK"
              }
            ]
          }
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "fun_type_sig": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "args",
          "content": {
            "type": "SYMBOL",
            "name": "expr_args"
          }
        },
        {
          "type": "STRING",
          "value": "->"
        },
        {
          "type": "FIELD",
          "name": "ty",
          "content": {
            "type": "SYMBOL",
            "name": "_expr"
          }
        }
      ]
    },
    "range_type": {
      "type": "PREC_LEFT",
      "value": 6,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "FIELD",
            "name": "lhs",
            "content": {
              "type": "SYMBOL",
              "name": "_expr"
            }
          },
          {
            "type": "STRING",
            "value": ".."
          },
          {
            "type": "FIELD",
            "name": "rhs",
            "content": {
              "type": "SYMBOL",
              "name": "_expr"
            }
          }
        ]
      }
    },
    "_function_or_macro_clause": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "function_clause"
        },
        {
          "type": "SYMBOL",
          "name": "macro_call_expr"
        }
      ]
    },
    "function_clause": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "name",
          "content": {
            "type": "SYMBOL",
            "name": "_name"
          }
        },
        {
          "type": "FIELD",
          "name": "args",
          "content": {
            "type": "SYMBOL",
            "name": "expr_args"
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_clause_guard"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "FIELD",
          "name": "body",
          "content": {
            "type": "SYMBOL",
            "name": "clause_body"
          }
        }
      ]
    },
    "_clause_guard": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "when"
        },
        {
          "type": "FIELD",
          "name": "guard",
          "content": {
            "type": "SYMBOL",
            "name": "guard"
          }
        }
      ]
    },
    "clause_body": {
      "type": "PREC_RIGHT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "->"
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "exprs",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expr"
                }
              },
              {
                "type": "REPEAT",
                "content": {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "STRING",
                      "value": ","
                    },
                    {
                      "type": "FIELD",
                      "name": "exprs",
                      "content": {
                        "type": "SYMBOL",
                        "name": "_expr"
                      }
                    }
                  ]
                }
              }
            ]
          }
        ]
      }
    },
    "_expr": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "ann_type"
        },
        {
          "type": "SYMBOL",
          "name": "pipe"
        },
        {
          "type": "SYMBOL",
          "name": "dotdotdot"
        },
        {
          "type": "SYMBOL",
          "name": "range_type"
        },
        {
          "type": "SYMBOL",
          "name": "catch_expr"
        },
        {
          "type": "SYMBOL",
          "name": "binary_op_expr"
        },
        {
          "type": "SYMBOL",
          "name": "match_expr"
        },
        {
          "type": "SYMBOL",
          "name": "unary_op_expr"
        },
        {
          "type": "SYMBOL",
          "name": "_map_expr"
        },
        {
          "type": "SYMBOL",
          "name": "call"
        },
        {
          "type": "SYMBOL",
          "name": "_record_expr"
        },
        {
          "type": "SYMBOL",
          "name": "remote"
        },
        {
          "type": "SYMBOL",
          "name": "_expr_max"
        },
        {
          "type": "SYMBOL",
          "name": "cond_match_expr"
        }
      ]
    },
    "dotdotdot": {
      "type": "STRING",
      "value": "..."
    },
    "catch_expr": {
      "type": "PREC",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "catch"
          },
          {
            "type": "FIELD",
            "name": "expr",
            "content": {
              "type": "SYMBOL",
              "name": "_expr"
            }
          }
        ]
      }
    },
    "match_expr": {
      "type": "PREC_RIGHT",
      "value": 3,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "FIELD",
            "name": "lhs",
            "content": {
              "type": "SYMBOL",
              "name": "_expr"
            }
          },
          {
            "type": "STRING",
            "value": "="
          },
          {
            "type": "FIELD",
            "name": "rhs",
            "content": {
              "type": "SYMBOL",
              "name": "_expr"
            }
          }
        ]
      }
    },
    "cond_match_expr": {
      "type": "PREC_RIGHT",
      "value": 81,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "FIELD",
            "name": "lhs",
            "content": {
              "type": "SYMBOL",
              "name": "_expr"
            }
          },
          {
            "type": "STRING",
            "value": "?="
          },
          {
            "type": "FIELD",
            "name": "rhs",
            "content": {
              "type": "PREC_RIGHT",
              "value": 0,
              "content": {
                "type": "SYMBOL",
                "name": "_expr"
              }
            }
          }
        ]
      }
    },
    "binary_op_expr": {
      "type": "CHOICE",
      "members": [
        {
          "type": "PREC_RIGHT",
          "value": 13,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "lhs",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expr"
                }
              },
              {
                "type": "STRING",
                "value": "!"
              },
              {
                "type": "FIELD",
                "name": "rhs",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expr"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": 14,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "lhs",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expr"
                }
              },
              {
                "type": "STRING",
                "value": "orelse"
              },
              {
                "type": "FIELD",
                "name": "rhs",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expr"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": 15,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "lhs",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expr"
                }
              },
              {
                "type": "STRING",
                "value": "andalso"
              },
              {
                "type": "FIELD",
                "name": "rhs",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expr"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": 17,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "lhs",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expr"
                }
              },
              {
                "type": "SYMBOL",
                "name": "_comp_op"
              },
              {
                "type": "FIELD",
                "name": "rhs",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expr"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_RIGHT",
          "value": 18,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "lhs",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expr"
                }
              },
              {
                "type": "SYMBOL",
                "name": "_list_op"
              },
              {
                "type": "FIELD",
                "name": "rhs",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expr"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": 19,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "lhs",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expr"
                }
              },
              {
                "type": "SYMBOL",
                "name": "_add_op"
              },
              {
                "type": "FIELD",
                "name": "rhs",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expr"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": 20,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "lhs",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expr"
                }
              },
              {
                "type": "SYMBOL",
                "name": "_mult_op"
              },
              {
                "type": "FIELD",
                "name": "rhs",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expr"
                }
              }
            ]
          }
        }
      ]
    },
    "unary_op_expr": {
      "type": "PREC",
      "value": 21,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_prefix_op"
          },
          {
            "type": "FIELD",
            "name": "operand",
            "content": {
              "type": "SYMBOL",
              "name": "_expr"
            }
          }
        ]
      }
    },
    "_expr_max": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "char"
        },
        {
          "type": "SYMBOL",
          "name": "integer"
        },
        {
          "type": "SYMBOL",
          "name": "atom"
        },
        {
          "type": "SYMBOL",
          "name": "float"
        },
        {
          "type": "SYMBOL",
          "name": "string"
        },
        {
          "type": "SYMBOL",
          "name": "concatables"
        },
        {
          "type": "SYMBOL",
          "name": "_macro_body_expr"
        },
        {
          "type": "SYMBOL",
          "name": "var"
        },
        {
          "type": "SYMBOL",
          "name": "list"
        },
        {
          "type": "SYMBOL",
          "name": "binary"
        },
        {
          "type": "SYMBOL",
          "name": "list_comprehension"
        },
        {
          "type": "SYMBOL",
          "name": "binary_comprehension"
        },
        {
          "type": "SYMBOL",
          "name": "map_comprehension"
        },
        {
          "type": "SYMBOL",
          "name": "tuple"
        },
        {
          "type": "SYMBOL",
          "name": "paren_expr"
        },
        {
          "type": "SYMBOL",
          "name": "block_expr"
        },
        {
          "type": "SYMBOL",
          "name": "if_expr"
        },
        {
          "type": "SYMBOL",
          "name": "case_expr"
        },
        {
          "type": "SYMBOL",
          "name": "receive_expr"
        },
        {
          "type": "SYMBOL",
          "name": "_fun_expr"
        },
        {
          "type": "SYMBOL",
          "name": "try_expr"
        },
        {
          "type": "SYMBOL",
          "name": "maybe_expr"
        }
      ]
    },
    "remote": {
      "type": "PREC_RIGHT",
      "value": 1,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "FIELD",
            "name": "module",
            "content": {
              "type": "SYMBOL",
              "name": "remote_module"
            }
          },
          {
            "type": "FIELD",
            "name": "fun",
            "content": {
              "type": "SYMBOL",
              "name": "_expr_max"
            }
          }
        ]
      }
    },
    "remote_module": {
      "type": "PREC",
      "value": 1,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "FIELD",
            "name": "module",
            "content": {
              "type": "SYMBOL",
              "name": "_expr_max"
            }
          },
          {
            "type": "STRING",
            "value": ":"
          }
        ]
      }
    },
    "paren_expr": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "FIELD",
          "name": "expr",
          "content": {
            "type": "SYMBOL",
            "name": "_expr"
          }
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "block_expr": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "begin"
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "FIELD",
              "name": "exprs",
              "content": {
                "type": "SYMBOL",
                "name": "_expr"
              }
            },
            {
              "type": "REPEAT",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": ","
                  },
                  {
                    "type": "FIELD",
                    "name": "exprs",
                    "content": {
                      "type": "SYMBOL",
                      "name": "_expr"
                    }
                  }
                ]
              }
            }
          ]
        },
        {
          "type": "STRING",
          "value": "end"
        }
      ]
    },
    "list": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "["
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "FIELD",
                  "name": "exprs",
                  "content": {
                    "type": "SYMBOL",
                    "name": "_expr"
                  }
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ","
                      },
                      {
                        "type": "FIELD",
                        "name": "exprs",
                        "content": {
                          "type": "SYMBOL",
                          "name": "_expr"
                        }
                      }
                    ]
                  }
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "]"
        }
      ]
    },
    "binary": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "<<"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "FIELD",
                  "name": "elements",
                  "content": {
                    "type": "SYMBOL",
                    "name": "bin_element"
                  }
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ","
                      },
                      {
                        "type": "FIELD",
                        "name": "elements",
                        "content": {
                          "type": "SYMBOL",
                          "name": "bin_element"
                        }
                      }
                    ]
                  }
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": ">>"
        }
      ]
    },
    "bin_element": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "element",
          "content": {
            "type": "SYMBOL",
            "name": "_bit_expr"
          }
        },
        {
          "type": "FIELD",
          "name": "size",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "bit_size_expr"
              },
              {
                "type": "BLANK"
              }
            ]
          }
        },
        {
          "type": "FIELD",
          "name": "types",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "bit_type_list"
              },
              {
                "type": "BLANK"
              }
            ]
          }
        }
      ]
    },
    "bit_size_expr": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": ":"
        },
        {
          "type": "FIELD",
          "name": "size",
          "content": {
            "type": "SYMBOL",
            "name": "_bit_expr"
          }
        }
      ]
    },
    "bit_type_list": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "/"
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "FIELD",
              "name": "types",
              "content": {
                "type": "SYMBOL",
                "name": "_bit_type"
              }
            },
            {
              "type": "REPEAT",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": "-"
                  },
                  {
                    "type": "FIELD",
                    "name": "types",
                    "content": {
                      "type": "SYMBOL",
                      "name": "_bit_type"
                    }
                  }
                ]
              }
            }
          ]
        }
      ]
    },
    "_bit_expr": {
      "type": "PREC",
      "value": 2,
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "ALIAS",
            "content": {
              "type": "SYMBOL",
              "name": "unary_op_expr_max"
            },
            "named": true,
            "value": "unary_op_expr"
          },
          {
            "type": "ALIAS",
            "content": {
              "type": "SYMBOL",
              "name": "binary_op_expr_max"
            },
            "named": true,
            "value": "binary_op_expr"
          },
          {
            "type": "SYMBOL",
            "name": "_expr_max"
          }
        ]
      }
    },
    "unary_op_expr_max": {
      "type": "PREC",
      "value": 21,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_prefix_op"
          },
          {
            "type": "FIELD",
            "name": "operand",
            "content": {
              "type": "SYMBOL",
              "name": "_expr_max"
            }
          }
        ]
      }
    },
    "binary_op_expr_max": {
      "type": "PREC",
      "value": 20,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "FIELD",
            "name": "lhs",
            "content": {
              "type": "SYMBOL",
              "name": "_expr_max"
            }
          },
          {
            "type": "STRING",
            "value": "*"
          },
          {
            "type": "FIELD",
            "name": "rhs",
            "content": {
              "type": "SYMBOL",
              "name": "_expr_max"
            }
          }
        ]
      }
    },
    "_bit_type": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_name"
        },
        {
          "type": "SYMBOL",
          "name": "bit_type_unit"
        }
      ]
    },
    "bit_type_unit": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "unit"
        },
        {
          "type": "STRING",
          "value": ":"
        },
        {
          "type": "FIELD",
          "name": "size",
          "content": {
            "type": "SYMBOL",
            "name": "_arity_value"
          }
        }
      ]
    },
    "list_comprehension": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "["
        },
        {
          "type": "FIELD",
          "name": "expr",
          "content": {
            "type": "SYMBOL",
            "name": "_expr"
          }
        },
        {
          "type": "FIELD",
          "name": "lc_exprs",
          "content": {
            "type": "SYMBOL",
            "name": "lc_exprs"
          }
        },
        {
          "type": "STRING",
          "value": "]"
        }
      ]
    },
    "binary_comprehension": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "<<"
        },
        {
          "type": "FIELD",
          "name": "expr",
          "content": {
            "type": "SYMBOL",
            "name": "_expr_max"
          }
        },
        {
          "type": "FIELD",
          "name": "lc_exprs",
          "content": {
            "type": "SYMBOL",
            "name": "lc_exprs"
          }
        },
        {
          "type": "STRING",
          "value": ">>"
        }
      ]
    },
    "map_comprehension": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "#"
        },
        {
          "type": "STRING",
          "value": "{"
        },
        {
          "type": "FIELD",
          "name": "expr",
          "content": {
            "type": "SYMBOL",
            "name": "map_field"
          }
        },
        {
          "type": "FIELD",
          "name": "lc_exprs",
          "content": {
            "type": "SYMBOL",
            "name": "lc_exprs"
          }
        },
        {
          "type": "STRING",
          "value": "}"
        }
      ]
    },
    "lc_exprs": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "||"
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "FIELD",
              "name": "exprs",
              "content": {
                "type": "SYMBOL",
                "name": "lc_or_zc_expr"
              }
            },
            {
              "type": "REPEAT",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": ","
                  },
                  {
                    "type": "FIELD",
                    "name": "exprs",
                    "content": {
                      "type": "SYMBOL",
                      "name": "lc_or_zc_expr"
                    }
                  }
                ]
              }
            }
          ]
        }
      ]
    },
    "lc_or_zc_expr": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "exprs",
          "content": {
            "type": "SYMBOL",
            "name": "_lc_expr"
          }
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": "&&"
              },
              {
                "type": "FIELD",
                "name": "exprs",
                "content": {
                  "type": "SYMBOL",
                  "name": "_lc_expr"
                }
              }
            ]
          }
        }
      ]
    },
    "_lc_expr": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_expr"
        },
        {
          "type": "SYMBOL",
          "name": "generator"
        },
        {
          "type": "SYMBOL",
          "name": "b_generator"
        },
        {
          "type": "SYMBOL",
          "name": "map_generator"
        }
      ]
    },
    "generator": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "lhs",
          "content": {
            "type": "SYMBOL",
            "name": "_expr"
          }
        },
        {
          "type": "SYMBOL",
          "name": "_generator_op"
        },
        {
          "type": "FIELD",
          "name": "rhs",
          "content": {
            "type": "SYMBOL",
            "name": "_expr"
          }
        }
      ]
    },
    "b_generator": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "lhs",
          "content": {
            "type": "SYMBOL",
            "name": "_expr"
          }
        },
        {
          "type": "SYMBOL",
          "name": "_b_generator_op"
        },
        {
          "type": "FIELD",
          "name": "rhs",
          "content": {
            "type": "SYMBOL",
            "name": "_expr"
          }
        }
      ]
    },
    "map_generator": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "lhs",
          "content": {
            "type": "SYMBOL",
            "name": "map_field"
          }
        },
        {
          "type": "SYMBOL",
          "name": "_generator_op"
        },
        {
          "type": "FIELD",
          "name": "rhs",
          "content": {
            "type": "SYMBOL",
            "name": "_expr"
          }
        }
      ]
    },
    "_generator_op": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "<-"
        },
        {
          "type": "STRING",
          "value": "<:-"
        }
      ]
    },
    "_b_generator_op": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "<="
        },
        {
          "type": "STRING",
          "value": "<:="
        }
      ]
    },
    "tuple": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "{"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "FIELD",
                  "name": "expr",
                  "content": {
                    "type": "SYMBOL",
                    "name": "_expr"
                  }
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ","
                      },
                      {
                        "type": "FIELD",
                        "name": "expr",
                        "content": {
                          "type": "SYMBOL",
                          "name": "_expr"
                        }
                      }
                    ]
                  }
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "}"
        }
      ]
    },
    "_map_expr": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "map_expr"
        },
        {
          "type": "SYMBOL",
          "name": "map_expr_update"
        }
      ]
    },
    "map_expr_update": {
      "type": "PREC_RIGHT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "FIELD",
            "name": "expr",
            "content": {
              "type": "SYMBOL",
              "name": "_map_expr_base"
            }
          },
          {
            "type": "STRING",
            "value": "#"
          },
          {
            "type": "STRING",
            "value": "{"
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "FIELD",
                    "name": "fields",
                    "content": {
                      "type": "SYMBOL",
                      "name": "map_field"
                    }
                  },
                  {
                    "type": "REPEAT",
                    "content": {
                      "type": "SEQ",
                      "members": [
                        {
                          "type": "STRING",
                          "value": ","
                        },
                        {
                          "type": "FIELD",
                          "name": "fields",
                          "content": {
                            "type": "SYMBOL",
                            "name": "map_field"
                          }
                        }
                      ]
                    }
                  }
                ]
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "STRING",
            "value": "}"
          }
        ]
      }
    },
    "map_expr": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "#"
        },
        {
          "type": "STRING",
          "value": "{"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "FIELD",
                  "name": "fields",
                  "content": {
                    "type": "SYMBOL",
                    "name": "map_field"
                  }
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ","
                      },
                      {
                        "type": "FIELD",
                        "name": "fields",
                        "content": {
                          "type": "SYMBOL",
                          "name": "map_field"
                        }
                      }
                    ]
                  }
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "}"
        }
      ]
    },
    "_map_expr_base": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_expr_max"
        },
        {
          "type": "SYMBOL",
          "name": "_map_expr"
        }
      ]
    },
    "map_field": {
      "type": "PREC_LEFT",
      "value": 7,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "FIELD",
            "name": "key",
            "content": {
              "type": "SYMBOL",
              "name": "_expr"
            }
          },
          {
            "type": "SYMBOL",
            "name": "_map_field_op"
          },
          {
            "type": "FIELD",
            "name": "value",
            "content": {
              "type": "SYMBOL",
              "name": "_expr"
            }
          }
        ]
      }
    },
    "_map_field_op": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "=>"
        },
        {
          "type": "STRING",
          "value": ":="
        }
      ]
    },
    "_record_expr": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "record_index_expr"
        },
        {
          "type": "SYMBOL",
          "name": "record_field_expr"
        },
        {
          "type": "SYMBOL",
          "name": "record_update_expr"
        },
        {
          "type": "SYMBOL",
          "name": "record_expr"
        }
      ]
    },
    "record_index_expr": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "name",
          "content": {
            "type": "SYMBOL",
            "name": "record_name"
          }
        },
        {
          "type": "FIELD",
          "name": "field",
          "content": {
            "type": "SYMBOL",
            "name": "record_field_name"
          }
        }
      ]
    },
    "record_field_expr": {
      "type": "PREC_RIGHT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "FIELD",
            "name": "expr",
            "content": {
              "type": "SYMBOL",
              "name": "_record_expr_base"
            }
          },
          {
            "type": "FIELD",
            "name": "name",
            "content": {
              "type": "SYMBOL",
              "name": "record_name"
            }
          },
          {
            "type": "FIELD",
            "name": "field",
            "content": {
              "type": "SYMBOL",
              "name": "record_field_name"
            }
          }
        ]
      }
    },
    "record_update_expr": {
      "type": "PREC_RIGHT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "FIELD",
            "name": "expr",
            "content": {
              "type": "SYMBOL",
              "name": "_record_expr_base"
            }
          },
          {
            "type": "FIELD",
            "name": "name",
            "content": {
              "type": "SYMBOL",
              "name": "record_name"
            }
          },
          {
            "type": "SYMBOL",
            "name": "_record_tuple"
          }
        ]
      }
    },
    "record_expr": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "name",
          "content": {
            "type": "SYMBOL",
            "name": "record_name"
          }
        },
        {
          "type": "SYMBOL",
          "name": "_record_tuple"
        }
      ]
    },
    "record_name": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "#"
        },
        {
          "type": "FIELD",
          "name": "name",
          "content": {
            "type": "SYMBOL",
            "name": "_name"
          }
        }
      ]
    },
    "record_field_name": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "."
        },
        {
          "type": "FIELD",
          "name": "name",
          "content": {
            "type": "SYMBOL",
            "name": "_name"
          }
        }
      ]
    },
    "_record_expr_base": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_expr_max"
        },
        {
          "type": "SYMBOL",
          "name": "_record_expr"
        }
      ]
    },
    "_record_tuple": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "{"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "FIELD",
                  "name": "fields",
                  "content": {
                    "type": "SYMBOL",
                    "name": "record_field"
                  }
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ","
                      },
                      {
                        "type": "FIELD",
                        "name": "fields",
                        "content": {
                          "type": "SYMBOL",
                          "name": "record_field"
                        }
                      }
                    ]
                  }
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "}"
        }
      ]
    },
    "record_field": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "name",
          "content": {
            "type": "SYMBOL",
            "name": "_name"
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "FIELD",
              "name": "expr",
              "content": {
                "type": "SYMBOL",
                "name": "field_expr"
              }
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "FIELD",
              "name": "ty",
              "content": {
                "type": "SYMBOL",
                "name": "field_type"
              }
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "field_expr": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "="
        },
        {
          "type": "FIELD",
          "name": "expr",
          "content": {
            "type": "SYMBOL",
            "name": "_expr"
          }
        }
      ]
    },
    "field_type": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "::"
        },
        {
          "type": "FIELD",
          "name": "expr",
          "content": {
            "type": "SYMBOL",
            "name": "_expr"
          }
        }
      ]
    },
    "call": {
      "type": "PREC",
      "value": 80,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "FIELD",
            "name": "expr",
            "content": {
              "type": "SYMBOL",
              "name": "_expr"
            }
          },
          {
            "type": "FIELD",
            "name": "args",
            "content": {
              "type": "SYMBOL",
              "name": "expr_args"
            }
          }
        ]
      }
    },
    "if_expr": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "if"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "FIELD",
                  "name": "clauses",
                  "content": {
                    "type": "SYMBOL",
                    "name": "if_clause"
                  }
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ";"
                      },
                      {
                        "type": "FIELD",
                        "name": "clauses",
                        "content": {
                          "type": "SYMBOL",
                          "name": "if_clause"
                        }
                      }
                    ]
                  }
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "end"
        }
      ]
    },
    "if_clause": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "guard",
          "content": {
            "type": "SYMBOL",
            "name": "guard"
          }
        },
        {
          "type": "FIELD",
          "name": "body",
          "content": {
            "type": "SYMBOL",
            "name": "clause_body"
          }
        }
      ]
    },
    "case_expr": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "case"
        },
        {
          "type": "FIELD",
          "name": "expr",
          "content": {
            "type": "SYMBOL",
            "name": "_expr"
          }
        },
        {
          "type": "STRING",
          "value": "of"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_cr_clauses"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "end"
        }
      ]
    },
    "_cr_clauses": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "clauses",
          "content": {
            "type": "SYMBOL",
            "name": "_cr_clause_or_macro"
          }
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": ";"
              },
              {
                "type": "FIELD",
                "name": "clauses",
                "content": {
                  "type": "SYMBOL",
                  "name": "_cr_clause_or_macro"
                }
              }
            ]
          }
        }
      ]
    },
    "_cr_clause_or_macro": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "cr_clause"
        },
        {
          "type": "SYMBOL",
          "name": "macro_call_expr"
        }
      ]
    },
    "cr_clause": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "pat",
          "content": {
            "type": "SYMBOL",
            "name": "_expr"
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_clause_guard"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "FIELD",
          "name": "body",
          "content": {
            "type": "SYMBOL",
            "name": "clause_body"
          }
        }
      ]
    },
    "receive_expr": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "receive"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_cr_clauses"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "FIELD",
              "name": "after",
              "content": {
                "type": "SYMBOL",
                "name": "receive_after"
              }
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "end"
        }
      ]
    },
    "receive_after": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "after"
        },
        {
          "type": "FIELD",
          "name": "expr",
          "content": {
            "type": "SYMBOL",
            "name": "_expr"
          }
        },
        {
          "type": "FIELD",
          "name": "body",
          "content": {
            "type": "SYMBOL",
            "name": "clause_body"
          }
        }
      ]
    },
    "_fun_expr": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "internal_fun"
        },
        {
          "type": "SYMBOL",
          "name": "external_fun"
        },
        {
          "type": "SYMBOL",
          "name": "anonymous_fun"
        },
        {
          "type": "SYMBOL",
          "name": "fun_type"
        }
      ]
    },
    "internal_fun": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "fun"
        },
        {
          "type": "FIELD",
          "name": "fun",
          "content": {
            "type": "SYMBOL",
            "name": "_name"
          }
        },
        {
          "type": "FIELD",
          "name": "arity",
          "content": {
            "type": "SYMBOL",
            "name": "arity"
          }
        }
      ]
    },
    "external_fun": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "fun"
        },
        {
          "type": "FIELD",
          "name": "module",
          "content": {
            "type": "SYMBOL",
            "name": "module"
          }
        },
        {
          "type": "FIELD",
          "name": "fun",
          "content": {
            "type": "SYMBOL",
            "name": "_name"
          }
        },
        {
          "type": "FIELD",
          "name": "arity",
          "content": {
            "type": "SYMBOL",
            "name": "arity"
          }
        }
      ]
    },
    "anonymous_fun": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "fun"
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "FIELD",
              "name": "clauses",
              "content": {
                "type": "SYMBOL",
                "name": "fun_clause"
              }
            },
            {
              "type": "REPEAT",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": ";"
                  },
                  {
                    "type": "FIELD",
                    "name": "clauses",
                    "content": {
                      "type": "SYMBOL",
                      "name": "fun_clause"
                    }
                  }
                ]
              }
            }
          ]
        },
        {
          "type": "STRING",
          "value": "end"
        }
      ]
    },
    "_macro_name": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "atom"
        },
        {
          "type": "SYMBOL",
          "name": "var"
        }
      ]
    },
    "_name": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "atom"
        },
        {
          "type": "SYMBOL",
          "name": "var"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "macro_call_none"
          },
          "named": true,
          "value": "macro_call_expr"
        }
      ]
    },
    "arity": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "/"
        },
        {
          "type": "FIELD",
          "name": "value",
          "content": {
            "type": "SYMBOL",
            "name": "_arity_value"
          }
        }
      ]
    },
    "_arity_value": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "integer"
        },
        {
          "type": "SYMBOL",
          "name": "var"
        },
        {
          "type": "SYMBOL",
          "name": "macro_call_expr"
        }
      ]
    },
    "fun_clauses": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "fun_clause"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": ";"
              },
              {
                "type": "SYMBOL",
                "name": "fun_clause"
              }
            ]
          }
        }
      ]
    },
    "fun_clause": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "name",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "var"
              },
              {
                "type": "BLANK"
              }
            ]
          }
        },
        {
          "type": "FIELD",
          "name": "args",
          "content": {
            "type": "SYMBOL",
            "name": "expr_args"
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_clause_guard"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "FIELD",
          "name": "body",
          "content": {
            "type": "SYMBOL",
            "name": "clause_body"
          }
        }
      ]
    },
    "try_expr": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "try"
            },
            {
              "type": "SYMBOL",
              "name": "_exprs"
            },
            {
              "type": "STRING",
              "value": "of"
            },
            {
              "type": "SYMBOL",
              "name": "_cr_clauses"
            },
            {
              "type": "SYMBOL",
              "name": "_try_catch"
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "try"
            },
            {
              "type": "SYMBOL",
              "name": "_exprs"
            },
            {
              "type": "SYMBOL",
              "name": "_try_catch"
            }
          ]
        }
      ]
    },
    "_try_catch": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "catch"
            },
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_catch_clauses"
                },
                {
                  "type": "BLANK"
                }
              ]
            },
            {
              "type": "STRING",
              "value": "end"
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "catch"
            },
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_catch_clauses"
                },
                {
                  "type": "BLANK"
                }
              ]
            },
            {
              "type": "FIELD",
              "name": "after",
              "content": {
                "type": "SYMBOL",
                "name": "try_after"
              }
            },
            {
              "type": "STRING",
              "value": "end"
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "FIELD",
              "name": "after",
              "content": {
                "type": "SYMBOL",
                "name": "try_after"
              }
            },
            {
              "type": "STRING",
              "value": "end"
            }
          ]
        }
      ]
    },
    "try_after": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "after"
        },
        {
          "type": "SYMBOL",
          "name": "_exprs"
        }
      ]
    },
    "_catch_clauses": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "catch",
          "content": {
            "type": "SYMBOL",
            "name": "catch_clause"
          }
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": ";"
              },
              {
                "type": "FIELD",
                "name": "catch",
                "content": {
                  "type": "SYMBOL",
                  "name": "catch_clause"
                }
              }
            ]
          }
        }
      ]
    },
    "catch_clause": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "FIELD",
              "name": "pat",
              "content": {
                "type": "SYMBOL",
                "name": "_catch_pat"
              }
            },
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "FIELD",
                  "name": "class",
                  "content": {
                    "type": "SYMBOL",
                    "name": "try_class"
                  }
                },
                {
                  "type": "FIELD",
                  "name": "pat",
                  "content": {
                    "type": "SYMBOL",
                    "name": "_catch_pat"
                  }
                }
              ]
            },
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "FIELD",
                  "name": "class",
                  "content": {
                    "type": "SYMBOL",
                    "name": "try_class"
                  }
                },
                {
                  "type": "FIELD",
                  "name": "pat",
                  "content": {
                    "type": "SYMBOL",
                    "name": "_catch_pat"
                  }
                },
                {
                  "type": "FIELD",
                  "name": "stack",
                  "content": {
                    "type": "SYMBOL",
                    "name": "try_stack"
                  }
                }
              ]
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_clause_guard"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "FIELD",
          "name": "body",
          "content": {
            "type": "SYMBOL",
            "name": "clause_body"
          }
        }
      ]
    },
    "try_class": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "class",
          "content": {
            "type": "SYMBOL",
            "name": "_name"
          }
        },
        {
          "type": "STRING",
          "value": ":"
        }
      ]
    },
    "try_stack": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": ":"
        },
        {
          "type": "FIELD",
          "name": "class",
          "content": {
            "type": "SYMBOL",
            "name": "var"
          }
        }
      ]
    },
    "_catch_pat": {
      "type": "CHOICE",
      "members": [
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "binary_op_catch_pat"
          },
          "named": true,
          "value": "binary_op_expr"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "match_catch_pat"
          },
          "named": true,
          "value": "binary_op_expr"
        },
        {
          "type": "SYMBOL",
          "name": "unary_op_expr"
        },
        {
          "type": "SYMBOL",
          "name": "map_expr"
        },
        {
          "type": "SYMBOL",
          "name": "record_index_expr"
        },
        {
          "type": "SYMBOL",
          "name": "record_expr"
        },
        {
          "type": "SYMBOL",
          "name": "_expr_max"
        }
      ]
    },
    "match_catch_pat": {
      "type": "PREC_RIGHT",
      "value": 3,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "FIELD",
            "name": "lhs",
            "content": {
              "type": "SYMBOL",
              "name": "_catch_pat"
            }
          },
          {
            "type": "STRING",
            "value": "="
          },
          {
            "type": "FIELD",
            "name": "rhs",
            "content": {
              "type": "SYMBOL",
              "name": "_catch_pat"
            }
          }
        ]
      }
    },
    "binary_op_catch_pat": {
      "type": "CHOICE",
      "members": [
        {
          "type": "PREC_LEFT",
          "value": 17,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "lhs",
                "content": {
                  "type": "SYMBOL",
                  "name": "_catch_pat"
                }
              },
              {
                "type": "SYMBOL",
                "name": "_comp_op"
              },
              {
                "type": "FIELD",
                "name": "rhs",
                "content": {
                  "type": "SYMBOL",
                  "name": "_catch_pat"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_RIGHT",
          "value": 18,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "lhs",
                "content": {
                  "type": "SYMBOL",
                  "name": "_catch_pat"
                }
              },
              {
                "type": "SYMBOL",
                "name": "_list_op"
              },
              {
                "type": "FIELD",
                "name": "rhs",
                "content": {
                  "type": "SYMBOL",
                  "name": "_catch_pat"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": 19,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "lhs",
                "content": {
                  "type": "SYMBOL",
                  "name": "_catch_pat"
                }
              },
              {
                "type": "SYMBOL",
                "name": "_add_op"
              },
              {
                "type": "FIELD",
                "name": "rhs",
                "content": {
                  "type": "SYMBOL",
                  "name": "_catch_pat"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": 20,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "lhs",
                "content": {
                  "type": "SYMBOL",
                  "name": "_catch_pat"
                }
              },
              {
                "type": "SYMBOL",
                "name": "_mult_op"
              },
              {
                "type": "FIELD",
                "name": "rhs",
                "content": {
                  "type": "SYMBOL",
                  "name": "_catch_pat"
                }
              }
            ]
          }
        }
      ]
    },
    "maybe_expr": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "maybe"
            },
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "FIELD",
                  "name": "exprs",
                  "content": {
                    "type": "SYMBOL",
                    "name": "_expr"
                  }
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ","
                      },
                      {
                        "type": "FIELD",
                        "name": "exprs",
                        "content": {
                          "type": "SYMBOL",
                          "name": "_expr"
                        }
                      }
                    ]
                  }
                }
              ]
            },
            {
              "type": "STRING",
              "value": "end"
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "maybe"
            },
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "FIELD",
                  "name": "exprs",
                  "content": {
                    "type": "SYMBOL",
                    "name": "_expr"
                  }
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ","
                      },
                      {
                        "type": "FIELD",
                        "name": "exprs",
                        "content": {
                          "type": "SYMBOL",
                          "name": "_expr"
                        }
                      }
                    ]
                  }
                }
              ]
            },
            {
              "type": "SYMBOL",
              "name": "_maybe_else_clause"
            }
          ]
        }
      ]
    },
    "_maybe_else_clause": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "else"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_cr_clauses"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "end"
        }
      ]
    },
    "_macro_def_replacement": {
      "type": "CHOICE",
      "members": [
        {
          "type": "PREC_DYNAMIC",
          "value": 6,
          "content": {
            "type": "SYMBOL",
            "name": "_expr"
          }
        },
        {
          "type": "PREC_DYNAMIC",
          "value": 2,
          "content": {
            "type": "SYMBOL",
            "name": "replacement_function_clauses"
          }
        },
        {
          "type": "PREC_DYNAMIC",
          "value": 1,
          "content": {
            "type": "SYMBOL",
            "name": "replacement_cr_clauses"
          }
        },
        {
          "type": "PREC_DYNAMIC",
          "value": 3,
          "content": {
            "type": "SYMBOL",
            "name": "replacement_guard_or"
          }
        },
        {
          "type": "PREC_DYNAMIC",
          "value": 4,
          "content": {
            "type": "SYMBOL",
            "name": "replacement_guard_and"
          }
        },
        {
          "type": "PREC_DYNAMIC",
          "value": 5,
          "content": {
            "type": "SYMBOL",
            "name": "replacement_expr_guard"
          }
        },
        {
          "type": "SYMBOL",
          "name": "replacement_parens"
        }
      ]
    },
    "replacement_function_clauses": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "clauses",
          "content": {
            "type": "SYMBOL",
            "name": "_function_or_macro_clause"
          }
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": ";"
              },
              {
                "type": "FIELD",
                "name": "clauses",
                "content": {
                  "type": "SYMBOL",
                  "name": "_function_or_macro_clause"
                }
              }
            ]
          }
        }
      ]
    },
    "replacement_cr_clauses": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "clauses",
          "content": {
            "type": "SYMBOL",
            "name": "_cr_clause_or_macro"
          }
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": ";"
              },
              {
                "type": "FIELD",
                "name": "clauses",
                "content": {
                  "type": "SYMBOL",
                  "name": "_cr_clause_or_macro"
                }
              }
            ]
          }
        }
      ]
    },
    "replacement_guard_or": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "guard",
          "content": {
            "type": "SYMBOL",
            "name": "replacement_guard_and"
          }
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": ";"
              },
              {
                "type": "FIELD",
                "name": "guard",
                "content": {
                  "type": "SYMBOL",
                  "name": "replacement_guard_and"
                }
              }
            ]
          }
        }
      ]
    },
    "replacement_guard_and": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "guard",
          "content": {
            "type": "SYMBOL",
            "name": "_expr"
          }
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": ","
              },
              {
                "type": "FIELD",
                "name": "guard",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expr"
                }
              }
            ]
          }
        }
      ]
    },
    "replacement_expr_guard": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "expr",
          "content": {
            "type": "SYMBOL",
            "name": "_expr"
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_clause_guard"
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "replacement_parens": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "macro_lhs": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "name",
          "content": {
            "type": "SYMBOL",
            "name": "_macro_name"
          }
        },
        {
          "type": "FIELD",
          "name": "args",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "var_args"
              },
              {
                "type": "BLANK"
              }
            ]
          }
        }
      ]
    },
    "_macro_body_expr": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "macro_string"
        },
        {
          "type": "SYMBOL",
          "name": "macro_call_expr"
        }
      ]
    },
    "macro_call_expr": {
      "type": "PREC_RIGHT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "?"
          },
          {
            "type": "FIELD",
            "name": "name",
            "content": {
              "type": "SYMBOL",
              "name": "_macro_name"
            }
          },
          {
            "type": "FIELD",
            "name": "args",
            "content": {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "macro_call_args"
                },
                {
                  "type": "BLANK"
                }
              ]
            }
          }
        ]
      }
    },
    "macro_call_args": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "FIELD",
                  "name": "args",
                  "content": {
                    "type": "SYMBOL",
                    "name": "macro_expr"
                  }
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ","
                      },
                      {
                        "type": "FIELD",
                        "name": "args",
                        "content": {
                          "type": "SYMBOL",
                          "name": "macro_expr"
                        }
                      }
                    ]
                  }
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "macro_call_none": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "?"
        },
        {
          "type": "FIELD",
          "name": "name",
          "content": {
            "type": "SYMBOL",
            "name": "_macro_name"
          }
        }
      ]
    },
    "macro_string": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "?"
        },
        {
          "type": "STRING",
          "value": "?"
        },
        {
          "type": "FIELD",
          "name": "name",
          "content": {
            "type": "SYMBOL",
            "name": "_macro_name"
          }
        }
      ]
    },
    "macro_expr": {
      "type": "CHOICE",
      "members": [
        {
          "type": "FIELD",
          "name": "expr",
          "content": {
            "type": "SYMBOL",
            "name": "_expr"
          }
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "FIELD",
              "name": "expr",
              "content": {
                "type": "SYMBOL",
                "name": "_expr"
              }
            },
            {
              "type": "STRING",
              "value": "when"
            },
            {
              "type": "FIELD",
              "name": "guard",
              "content": {
                "type": "SYMBOL",
                "name": "_expr"
              }
            }
          ]
        }
      ]
    },
    "_exprs": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "exprs",
          "content": {
            "type": "SYMBOL",
            "name": "_expr"
          }
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": ","
              },
              {
                "type": "FIELD",
                "name": "exprs",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expr"
                }
              }
            ]
          }
        }
      ]
    },
    "expr_args": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "FIELD",
                  "name": "args",
                  "content": {
                    "type": "SYMBOL",
                    "name": "_expr"
                  }
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ","
                      },
                      {
                        "type": "FIELD",
                        "name": "args",
                        "content": {
                          "type": "SYMBOL",
                          "name": "_expr"
                        }
                      }
                    ]
                  }
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "var_args": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "FIELD",
                  "name": "args",
                  "content": {
                    "type": "SYMBOL",
                    "name": "var"
                  }
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "CHOICE",
                        "members": [
                          {
                            "type": "STRING",
                            "value": ","
                          },
                          {
                            "type": "BLANK"
                          }
                        ]
                      },
                      {
                        "type": "FIELD",
                        "name": "args",
                        "content": {
                          "type": "SYMBOL",
                          "name": "var"
                        }
                      }
                    ]
                  }
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "guard": {
      "type": "PREC_RIGHT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "FIELD",
            "name": "clauses",
            "content": {
              "type": "SYMBOL",
              "name": "guard_clause"
            }
          },
          {
            "type": "REPEAT",
            "content": {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": ";"
                },
                {
                  "type": "FIELD",
                  "name": "clauses",
                  "content": {
                    "type": "SYMBOL",
                    "name": "guard_clause"
                  }
                }
              ]
            }
          }
        ]
      }
    },
    "guard_clause": {
      "type": "PREC_RIGHT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "FIELD",
            "name": "exprs",
            "content": {
              "type": "SYMBOL",
              "name": "_expr"
            }
          },
          {
            "type": "REPEAT",
            "content": {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": ","
                },
                {
                  "type": "FIELD",
                  "name": "exprs",
                  "content": {
                    "type": "SYMBOL",
                    "name": "_expr"
                  }
                }
              ]
            }
          }
        ]
      }
    },
    "concatables": {
      "type": "PREC_RIGHT",
      "value": 0,
      "content": {
        "type": "FIELD",
        "name": "elems",
        "content": {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_concatable"
            },
            {
              "type": "REPEAT1",
              "content": {
                "type": "SYMBOL",
                "name": "_concatable"
              }
            }
          ]
        }
      }
    },
    "_concatable": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "string"
        },
        {
          "type": "SYMBOL",
          "name": "var"
        },
        {
          "type": "SYMBOL",
          "name": "_macro_body_expr"
        }
      ]
    },
    "_prefix_op": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "+"
        },
        {
          "type": "STRING",
          "value": "-"
        },
        {
          "type": "STRING",
          "value": "bnot"
        },
        {
          "type": "STRING",
          "value": "not"
        }
      ]
    },
    "_mult_op": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "/"
        },
        {
          "type": "STRING",
          "value": "*"
        },
        {
          "type": "STRING",
          "value": "div"
        },
        {
          "type": "STRING",
          "value": "rem"
        },
        {
          "type": "STRING",
          "value": "band"
        },
        {
          "type": "STRING",
          "value": "and"
        }
      ]
    },
    "_add_op": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "+"
        },
        {
          "type": "STRING",
          "value": "-"
        },
        {
          "type": "STRING",
          "value": "bor"
        },
        {
          "type": "STRING",
          "value": "bxor"
        },
        {
          "type": "STRING",
          "value": "bsl"
        },
        {
          "type": "STRING",
          "value": "bsr"
        },
        {
          "type": "STRING",
          "value": "or"
        },
        {
          "type": "STRING",
          "value": "xor"
        }
      ]
    },
    "_list_op": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "++"
        },
        {
          "type": "STRING",
          "value": "--"
        }
      ]
    },
    "_comp_op": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "=="
        },
        {
          "type": "STRING",
          "value": "/="
        },
        {
          "type": "STRING",
          "value": "=<"
        },
        {
          "type": "STRING",
          "value": "<"
        },
        {
          "type": "STRING",
          "value": ">="
        },
        {
          "type": "STRING",
          "value": ">"
        },
        {
          "type": "STRING",
          "value": "=:="
        },
        {
          "type": "STRING",
          "value": "=/="
        }
      ]
    },
    "string": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_sq_string"
        },
        {
          "type": "SYMBOL",
          "name": "_tq_string"
        },
        {
          "type": "SYMBOL",
          "name": "_tq_sigil_string"
        },
        {
          "type": "SYMBOL",
          "name": "_sigil_verbatim_string"
        },
        {
          "type": "SYMBOL",
          "name": "_sigil_string"
        }
      ]
    },
    "shebang": {
      "type": "TOKEN",
      "content": {
        "type": "PATTERN",
        "value": "#!.*"
      }
    },
    "var": {
      "type": "TOKEN",
      "content": {
        "type": "PATTERN",
        "value": "[_A-Z\\xC0-\\xD6\\xD8-\\xDE][_@a-zA-Z0-9\\xC0-\\xD6\\xD8-\\xDE\\xDF-\\xF6\\xF8-\\xFF]*"
      }
    },
    "integer": {
      "type": "TOKEN",
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "PATTERN",
            "value": "\\d(_?\\d)*#[0-9a-zA-Z](_?[0-9a-zA-Z])*"
          },
          {
            "type": "PATTERN",
            "value": "\\d(_?\\d)*"
          }
        ]
      }
    },
    "float": {
      "type": "TOKEN",
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "PATTERN",
            "value": "\\d(_?\\d)*\\.\\d(_?\\d)*([eE][+-]?\\d(_?\\d)*)?"
          },
          {
            "type": "PATTERN",
            "value": "\\d(_?\\d)*#[0-9a-zA-Z](_?[0-9a-zA-Z])*\\.(_?[0-9a-zA-Z])+(#[eE][+-]?\\d(_?\\d)*)?"
          }
        ]
      }
    },
    "_sq_string": {
      "type": "TOKEN",
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "PATTERN",
            "value": "\""
          },
          {
            "type": "PATTERN",
            "value": "([^\"\\\\]|\\\\([^x\\^]|[0-7]{1,3}|x[0-9a-fA-F]{2}|x\\{[0-9a-fA-F]+\\}|\\^.))*"
          },
          {
            "type": "PATTERN",
            "value": "\""
          }
        ]
      }
    },
    "_sigil_verbatim_string": {
      "type": "TOKEN",
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "SEQ",
            "members": [
              {
                "type": "PATTERN",
                "value": "~[BS]"
              },
              {
                "type": "PATTERN",
                "value": "\\("
              },
              {
                "type": "PATTERN",
                "value": "([^\\)]|\\\\\\))*"
              },
              {
                "type": "PATTERN",
                "value": "\\)"
              }
            ]
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "PATTERN",
                "value": "~[BS]"
              },
              {
                "type": "PATTERN",
                "value": "\\["
              },
              {
                "type": "PATTERN",
                "value": "([^\\]]|\\\\\\])*"
              },
              {
                "type": "PATTERN",
                "value": "\\]"
              }
            ]
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "PATTERN",
                "value": "~[BS]"
              },
              {
                "type": "PATTERN",
                "value": "\\{"
              },
              {
                "type": "PATTERN",
                "value": "([^\\}]|\\\\\\})*"
              },
              {
                "type": "PATTERN",
                "value": "\\}"
              }
            ]
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "PATTERN",
                "value": "~[BS]"
              },
              {
                "type": "PATTERN",
                "value": "<"
              },
              {
                "type": "PATTERN",
                "value": "([^>]|\\\\>)*"
              },
              {
                "type": "PATTERN",
                "value": ">"
              }
            ]
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "PATTERN",
                "value": "~[BS]"
              },
              {
                "type": "PATTERN",
                "value": "\\/"
              },
              {
                "type": "PATTERN",
                "value": "([^\\/]|\\\\\\/)*"
              },
              {
                "type": "PATTERN",
                "value": "\\/"
              }
            ]
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "PATTERN",
                "value": "~[BS]"
              },
              {
                "type": "PATTERN",
                "value": "\\|"
              },
              {
                "type": "PATTERN",
                "value": "([^\\|]|\\\\\\|)*"
              },
              {
                "type": "PATTERN",
                "value": "\\|"
              }
            ]
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "PATTERN",
                "value": "~[BS]"
              },
              {
                "type": "PATTERN",
                "value": "\\'"
              },
              {
                "type": "PATTERN",
                "value": "([^\\']|\\\\\\')*"
              },
              {
                "type": "PATTERN",
                "value": "\\'"
              }
            ]
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "PATTERN",
                "value": "~[BS]"
              },
              {
                "type": "PATTERN",
                "value": "\\\""
              },
              {
                "type": "PATTERN",
                "value": "([^\\\"]|\\\\\\\")*"
              },
              {
                "type": "PATTERN",
                "value": "\\\""
              }
            ]
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "PATTERN",
                "value": "~[BS]"
              },
              {
                "type": "PATTERN",
                "value": "\\`"
              },
              {
                "type": "PATTERN",
                "value": "([^\\`]|\\\\\\`)*"
              },
              {
                "type": "PATTERN",
                "value": "\\`"
              }
            ]
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "PATTERN",
                "value": "~[BS]"
              },
              {
                "type": "PATTERN",
                "value": "\\#"
              },
              {
                "type": "PATTERN",
                "value": "([^\\#]|\\\\\\#)*"
              },
              {
                "type": "PATTERN",
                "value": "\\#"
              }
            ]
          }
        ]
      }
    },
    "_sigil_string": {
      "type": "TOKEN",
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "SEQ",
            "members": [
              {
                "type": "PATTERN",
                "value": "~[bs]?"
              },
              {
                "type": "PATTERN",
                "value": "\\("
              },
              {
                "type": "REPEAT",
                "content": {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "PATTERN",
                      "value": "[^\\)]"
                    },
                    {
                      "type": "PATTERN",
                      "value": "\\\\([^x\\^]|[0-7]{1,3}|x[0-9a-fA-F]{2}|x\\{[0-9a-fA-F]+\\}|\\^.)"
                    }
                  ]
                }
              },
              {
                "type": "PATTERN",
                "value": "\\)"
              }
            ]
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "PATTERN",
                "value": "~[bs]?"
              },
              {
                "type": "PATTERN",
                "value": "\\["
              },
              {
                "type": "REPEAT",
                "content": {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "PATTERN",
                      "value": "[^\\]]"
                    },
                    {
                      "type": "PATTERN",
                      "value": "\\\\([^x\\^]|[0-7]{1,3}|x[0-9a-fA-F]{2}|x\\{[0-9a-fA-F]+\\}|\\^.)"
                    }
                  ]
                }
              },
              {
                "type": "PATTERN",
                "value": "\\]"
              }
            ]
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "PATTERN",
                "value": "~[bs]?"
              },
              {
                "type": "PATTERN",
                "value": "\\{"
              },
              {
                "type": "REPEAT",
                "content": {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "PATTERN",
                      "value": "[^\\}]"
                    },
                    {
                      "type": "PATTERN",
                      "value": "\\\\([^x\\^]|[0-7]{1,3}|x[0-9a-fA-F]{2}|x\\{[0-9a-fA-F]+\\}|\\^.)"
                    }
                  ]
                }
              },
              {
                "type": "PATTERN",
                "value": "\\}"
              }
            ]
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "PATTERN",
                "value": "~[bs]?"
              },
              {
                "type": "PATTERN",
                "value": "<"
              },
              {
                "type": "REPEAT",
                "content": {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "PATTERN",
                      "value": "[^>]"
                    },
                    {
                      "type": "PATTERN",
                      "value": "\\\\([^x\\^]|[0-7]{1,3}|x[0-9a-fA-F]{2}|x\\{[0-9a-fA-F]+\\}|\\^.)"
                    }
                  ]
                }
              },
              {
                "type": "PATTERN",
                "value": ">"
              }
            ]
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "PATTERN",
                "value": "~[bs]?"
              },
              {
                "type": "PATTERN",
                "value": "\\/"
              },
              {
                "type": "REPEAT",
                "content": {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "PATTERN",
                      "value": "[^\\/]"
                    },
                    {
                      "type": "PATTERN",
                      "value": "\\\\([^x\\^]|[0-7]{1,3}|x[0-9a-fA-F]{2}|x\\{[0-9a-fA-F]+\\}|\\^.)"
                    }
                  ]
                }
              },
              {
                "type": "PATTERN",
                "value": "\\/"
              }
            ]
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "PATTERN",
                "value": "~[bs]?"
              },
              {
                "type": "PATTERN",
                "value": "\\|"
              },
              {
                "type": "REPEAT",
                "content": {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "PATTERN",
                      "value": "[^\\|]"
                    },
                    {
                      "type": "PATTERN",
                      "value": "\\\\([^x\\^]|[0-7]{1,3}|x[0-9a-fA-F]{2}|x\\{[0-9a-fA-F]+\\}|\\^.)"
                    }
                  ]
                }
              },
              {
                "type": "PATTERN",
                "value": "\\|"
              }
            ]
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "PATTERN",
                "value": "~[bs]?"
              },
              {
                "type": "PATTERN",
                "value": "\\'"
              },
              {
                "type": "REPEAT",
                "content": {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "PATTERN",
                      "value": "[^\\']"
                    },
                    {
                      "type": "PATTERN",
                      "value": "\\\\([^x\\^]|[0-7]{1,3}|x[0-9a-fA-F]{2}|x\\{[0-9a-fA-F]+\\}|\\^.)"
                    }
                  ]
                }
              },
              {
                "type": "PATTERN",
                "value": "\\'"
              }
            ]
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "PATTERN",
                "value": "~[bs]?"
              },
              {
                "type": "PATTERN",
                "value": "\\\""
              },
              {
                "type": "REPEAT",
                "content": {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "PATTERN",
                      "value": "[^\\\"]"
                    },
                    {
                      "type": "PATTERN",
                      "value": "\\\\([^x\\^]|[0-7]{1,3}|x[0-9a-fA-F]{2}|x\\{[0-9a-fA-F]+\\}|\\^.)"
                    }
                  ]
                }
              },
              {
                "type": "PATTERN",
                "value": "\\\""
              }
            ]
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "PATTERN",
                "value": "~[bs]?"
              },
              {
                "type": "PATTERN",
                "value": "\\`"
              },
              {
                "type": "REPEAT",
                "content": {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "PATTERN",
                      "value": "[^\\`]"
                    },
                    {
                      "type": "PATTERN",
                      "value": "\\\\([^x\\^]|[0-7]{1,3}|x[0-9a-fA-F]{2}|x\\{[0-9a-fA-F]+\\}|\\^.)"
                    }
                  ]
                }
              },
              {
                "type": "PATTERN",
                "value": "\\`"
              }
            ]
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "PATTERN",
                "value": "~[bs]?"
              },
              {
                "type": "PATTERN",
                "value": "\\#"
              },
              {
                "type": "REPEAT",
                "content": {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "PATTERN",
                      "value": "[^\\#]"
                    },
                    {
                      "type": "PATTERN",
                      "value": "\\\\([^x\\^]|[0-7]{1,3}|x[0-9a-fA-F]{2}|x\\{[0-9a-fA-F]+\\}|\\^.)"
                    }
                  ]
                }
              },
              {
                "type": "PATTERN",
                "value": "\\#"
              }
            ]
          }
        ]
      }
    },
    "char": {
      "type": "TOKEN",
      "content": {
        "type": "PATTERN",
        "value": "\\$([^\\\\]|\\\\([0-7]{1,3}|x[0-9a-fA-F]{2}|x[0-9a-fA-F]+|\\^.|\\\\n|\\\\\\\\|.))"
      }
    },
    "atom": {
      "type": "TOKEN",
      "content": {
        "type": "PATTERN",
        "value": "([a-z\\xDF-\\xF6\\xF8-\\xFF][_@a-zA-Z0-9\\xC0-\\xD6\\xD8-\\xDE\\xDF-\\xF6\\xF8-\\xFF]*)|('([^'\\\\]|\\\\([^x\\^]|[0-7]{1,3}|x[0-9a-fA-F]{2}|x\\{[0-9a-fA-F]+\\}|\\^.))*')"
      }
    },
    "comment": {
      "type": "TOKEN",
      "content": {
        "type": "PATTERN",
        "value": "%[^\\n]*"
      }
    }
  },
  "extras": [
    {
      "type": "PATTERN",
      "value": "[\\x01-\\x20\\x80-\\xA0]"
    },
    {
      "type": "SYMBOL",
      "name": "comment"
    }
  ],
  "conflicts": [
    [
      "_record_expr_base",
      "_map_expr_base"
    ],
    [
      "macro_call_expr",
      "macro_call_none"
    ],
    [
      "_expr_max",
      "_concatable"
    ],
    [
      "_expr_max",
      "_name"
    ],
    [
      "_function_or_macro_clause",
      "_cr_clause_or_macro",
      "_macro_body_expr"
    ],
    [
      "_macro_def_replacement",
      "replacement_guard_or"
    ],
    [
      "_macro_def_replacement",
      "replacement_guard_and",
      "replacement_expr_guard"
    ],
    [
      "fun_type",
      "expr_args"
    ],
    [
      "_expr",
      "_map_expr_base",
      "_record_expr_base"
    ],
    [
      "_expr",
      "_map_expr_base"
    ],
    [
      "_expr",
      "_record_expr_base"
    ],
    [
      "_function_or_macro_clause",
      "_macro_body_expr"
    ]
  ],
  "precedences": [],
  "externals": [
    {
      "type": "SYMBOL",
      "name": "_tq_string"
    },
    {
      "type": "SYMBOL",
      "name": "_tq_sigil_string"
    },
    {
      "type": "SYMBOL",
      "name": "error_sentinel"
    }
  ],
  "inline": [
    "_fun_expr",
    "_map_expr",
    "_record_expr",
    "_exprs",
    "_catch_clauses"
  ],
  "supertypes": [
    "_form",
    "_preprocessor_directive",
    "_include_detail",
    "_function_or_macro_clause",
    "_macro_def_replacement",
    "_arity_value",
    "_concatable",
    "_name",
    "_macro_name",
    "_lc_expr",
    "_cr_clause_or_macro",
    "_bit_type",
    "_bit_expr",
    "_map_expr_base",
    "_record_expr_base",
    "_expr",
    "_expr_max",
    "_catch_pat",
    "_deprecated_details",
    "_deprecated_fun_arity",
    "_desc",
    "_string_like"
  ],
  "reserved": {}
}