{
  "name": "ocaml_interface",
  "word": "_identifier",
  "rules": {
    "compilation_unit": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_signature"
        },
        {
          "type": "BLANK"
        }
      ]
    },
    "shebang": {
      "type": "PATTERN",
      "value": "#!.*"
    },
    "_structure": {
      "type": "CHOICE",
      "members": [
        {
          "type": "REPEAT1",
          "content": {
            "type": "STRING",
            "value": ";;"
          }
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "REPEAT",
              "content": {
                "type": "STRING",
                "value": ";;"
              }
            },
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_structure_item_ext"
                },
                {
                  "type": "SYMBOL",
                  "name": "toplevel_directive"
                },
                {
                  "type": "SYMBOL",
                  "name": "expression_item"
                }
              ]
            },
            {
              "type": "REPEAT",
              "content": {
                "type": "CHOICE",
                "members": [
                  {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "REPEAT",
                        "content": {
                          "type": "STRING",
                          "value": ";;"
                        }
                      },
                      {
                        "type": "CHOICE",
                        "members": [
                          {
                            "type": "SYMBOL",
                            "name": "_structure_item_ext"
                          },
                          {
                            "type": "SYMBOL",
                            "name": "toplevel_directive"
                          }
                        ]
                      }
                    ]
                  },
                  {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "REPEAT1",
                        "content": {
                          "type": "STRING",
                          "value": ";;"
                        }
                      },
                      {
                        "type": "SYMBOL",
                        "name": "expression_item"
                      }
                    ]
                  }
                ]
              }
            },
            {
              "type": "REPEAT",
              "content": {
                "type": "STRING",
                "value": ";;"
              }
            }
          ]
        }
      ]
    },
    "expression_item": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_sequence_expression_ext"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "item_attribute"
          }
        }
      ]
    },
    "_signature": {
      "type": "CHOICE",
      "members": [
        {
          "type": "REPEAT1",
          "content": {
            "type": "STRING",
            "value": ";;"
          }
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "REPEAT1",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "REPEAT",
                    "content": {
                      "type": "STRING",
                      "value": ";;"
                    }
                  },
                  {
                    "type": "SYMBOL",
                    "name": "_signature_item_ext"
                  }
                ]
              }
            },
            {
              "type": "REPEAT",
              "content": {
                "type": "STRING",
                "value": ";;"
              }
            }
          ]
        }
      ]
    },
    "toplevel_directive": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "directive"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_constant"
                },
                {
                  "type": "SYMBOL",
                  "name": "value_path"
                },
                {
                  "type": "SYMBOL",
                  "name": "module_path"
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "_structure_item": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "value_definition"
        },
        {
          "type": "SYMBOL",
          "name": "external"
        },
        {
          "type": "SYMBOL",
          "name": "type_definition"
        },
        {
          "type": "SYMBOL",
          "name": "exception_definition"
        },
        {
          "type": "SYMBOL",
          "name": "module_definition"
        },
        {
          "type": "SYMBOL",
          "name": "module_type_definition"
        },
        {
          "type": "SYMBOL",
          "name": "open_module"
        },
        {
          "type": "SYMBOL",
          "name": "include_module"
        },
        {
          "type": "SYMBOL",
          "name": "class_definition"
        },
        {
          "type": "SYMBOL",
          "name": "class_type_definition"
        },
        {
          "type": "SYMBOL",
          "name": "floating_attribute"
        }
      ]
    },
    "_structure_item_ext": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_structure_item"
        },
        {
          "type": "SYMBOL",
          "name": "_item_extension"
        }
      ]
    },
    "value_definition": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": "let"
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "SYMBOL",
                      "name": "_attribute"
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "STRING",
                      "value": "rec"
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                }
              ]
            },
            {
              "type": "SYMBOL",
              "name": "let_operator"
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "let_binding"
            },
            {
              "type": "REPEAT",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "CHOICE",
                    "members": [
                      {
                        "type": "STRING",
                        "value": "and"
                      },
                      {
                        "type": "SYMBOL",
                        "name": "and_operator"
                      }
                    ]
                  },
                  {
                    "type": "SYMBOL",
                    "name": "let_binding"
                  }
                ]
              }
            }
          ]
        }
      ]
    },
    "let_binding": {
      "type": "PREC_RIGHT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "FIELD",
            "name": "pattern",
            "content": {
              "type": "SYMBOL",
              "name": "_binding_pattern_ext"
            }
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "REPEAT",
                    "content": {
                      "type": "SYMBOL",
                      "name": "_parameter"
                    }
                  },
                  {
                    "type": "CHOICE",
                    "members": [
                      {
                        "type": "SYMBOL",
                        "name": "_polymorphic_typed"
                      },
                      {
                        "type": "BLANK"
                      }
                    ]
                  },
                  {
                    "type": "CHOICE",
                    "members": [
                      {
                        "type": "SEQ",
                        "members": [
                          {
                            "type": "STRING",
                            "value": ":>"
                          },
                          {
                            "type": "SYMBOL",
                            "name": "_type_ext"
                          }
                        ]
                      },
                      {
                        "type": "BLANK"
                      }
                    ]
                  },
                  {
                    "type": "STRING",
                    "value": "="
                  },
                  {
                    "type": "FIELD",
                    "name": "body",
                    "content": {
                      "type": "SYMBOL",
                      "name": "_sequence_expression_ext"
                    }
                  }
                ]
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "REPEAT",
            "content": {
              "type": "SYMBOL",
              "name": "item_attribute"
            }
          }
        ]
      }
    },
    "_parameter": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "parameter"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "_parenthesized_abstract_type"
          },
          "named": true,
          "value": "abstract_type"
        }
      ]
    },
    "parameter": {
      "type": "CHOICE",
      "members": [
        {
          "type": "FIELD",
          "name": "pattern",
          "content": {
            "type": "SYMBOL",
            "name": "_simple_pattern_ext"
          }
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "STRING",
                  "value": "~"
                },
                {
                  "type": "STRING",
                  "value": "?"
                }
              ]
            },
            {
              "type": "FIELD",
              "name": "pattern",
              "content": {
                "type": "ALIAS",
                "content": {
                  "type": "SYMBOL",
                  "name": "_identifier"
                },
                "named": true,
                "value": "value_pattern"
              }
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_label"
            },
            {
              "type": "IMMEDIATE_TOKEN",
              "content": {
                "type": "STRING",
                "value": ":"
              }
            },
            {
              "type": "FIELD",
              "name": "pattern",
              "content": {
                "type": "SYMBOL",
                "name": "_simple_pattern_ext"
              }
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "STRING",
                  "value": "~"
                },
                {
                  "type": "STRING",
                  "value": "?"
                }
              ]
            },
            {
              "type": "STRING",
              "value": "("
            },
            {
              "type": "FIELD",
              "name": "pattern",
              "content": {
                "type": "ALIAS",
                "content": {
                  "type": "SYMBOL",
                  "name": "_identifier"
                },
                "named": true,
                "value": "value_pattern"
              }
            },
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_typed"
                },
                {
                  "type": "BLANK"
                }
              ]
            },
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "STRING",
                      "value": "="
                    },
                    {
                      "type": "SYMBOL",
                      "name": "_sequence_expression_ext"
                    }
                  ]
                },
                {
                  "type": "BLANK"
                }
              ]
            },
            {
              "type": "STRING",
              "value": ")"
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_label"
            },
            {
              "type": "IMMEDIATE_TOKEN",
              "content": {
                "type": "STRING",
                "value": ":"
              }
            },
            {
              "type": "STRING",
              "value": "("
            },
            {
              "type": "FIELD",
              "name": "pattern",
              "content": {
                "type": "SYMBOL",
                "name": "_pattern_ext"
              }
            },
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_typed"
                },
                {
                  "type": "BLANK"
                }
              ]
            },
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": "="
                },
                {
                  "type": "SYMBOL",
                  "name": "_sequence_expression_ext"
                }
              ]
            },
            {
              "type": "STRING",
              "value": ")"
            }
          ]
        }
      ]
    },
    "external": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "external"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_attribute"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "_value_name"
        },
        {
          "type": "SYMBOL",
          "name": "_typed"
        },
        {
          "type": "STRING",
          "value": "="
        },
        {
          "type": "REPEAT1",
          "content": {
            "type": "SYMBOL",
            "name": "string"
          }
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "item_attribute"
          }
        }
      ]
    },
    "type_definition": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "type"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_attribute"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "nonrec"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "type_binding"
            },
            {
              "type": "REPEAT",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": "and"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "type_binding"
                  }
                ]
              }
            }
          ]
        }
      ]
    },
    "type_binding": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_type_params"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "FIELD",
                  "name": "name",
                  "content": {
                    "type": "SYMBOL",
                    "name": "_type_constructor"
                  }
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "SYMBOL",
                      "name": "_type_equation"
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "SEQ",
                      "members": [
                        {
                          "type": "STRING",
                          "value": "="
                        },
                        {
                          "type": "CHOICE",
                          "members": [
                            {
                              "type": "STRING",
                              "value": "private"
                            },
                            {
                              "type": "BLANK"
                            }
                          ]
                        },
                        {
                          "type": "FIELD",
                          "name": "body",
                          "content": {
                            "type": "CHOICE",
                            "members": [
                              {
                                "type": "SYMBOL",
                                "name": "variant_declaration"
                              },
                              {
                                "type": "SYMBOL",
                                "name": "record_declaration"
                              },
                              {
                                "type": "STRING",
                                "value": ".."
                              }
                            ]
                          }
                        }
                      ]
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SYMBOL",
                    "name": "type_constraint"
                  }
                }
              ]
            },
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "FIELD",
                  "name": "name",
                  "content": {
                    "type": "SYMBOL",
                    "name": "type_constructor_path"
                  }
                },
                {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "STRING",
                      "value": "+="
                    },
                    {
                      "type": "CHOICE",
                      "members": [
                        {
                          "type": "STRING",
                          "value": "private"
                        },
                        {
                          "type": "BLANK"
                        }
                      ]
                    },
                    {
                      "type": "FIELD",
                      "name": "body",
                      "content": {
                        "type": "SYMBOL",
                        "name": "variant_declaration"
                      }
                    }
                  ]
                }
              ]
            }
          ]
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "item_attribute"
          }
        }
      ]
    },
    "_type_params": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_type_param"
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "("
            },
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_type_param"
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ","
                      },
                      {
                        "type": "SYMBOL",
                        "name": "_type_param"
                      }
                    ]
                  }
                }
              ]
            },
            {
              "type": "STRING",
              "value": ")"
            }
          ]
        }
      ]
    },
    "_type_param": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "STRING",
                      "value": "+"
                    },
                    {
                      "type": "CHOICE",
                      "members": [
                        {
                          "type": "STRING",
                          "value": "!"
                        },
                        {
                          "type": "BLANK"
                        }
                      ]
                    }
                  ]
                },
                {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "STRING",
                      "value": "-"
                    },
                    {
                      "type": "CHOICE",
                      "members": [
                        {
                          "type": "STRING",
                          "value": "!"
                        },
                        {
                          "type": "BLANK"
                        }
                      ]
                    }
                  ]
                },
                {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "STRING",
                      "value": "!"
                    },
                    {
                      "type": "CHOICE",
                      "members": [
                        {
                          "type": "CHOICE",
                          "members": [
                            {
                              "type": "STRING",
                              "value": "+"
                            },
                            {
                              "type": "STRING",
                              "value": "-"
                            }
                          ]
                        },
                        {
                          "type": "BLANK"
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "type_variable"
            },
            {
              "type": "ALIAS",
              "content": {
                "type": "STRING",
                "value": "_"
              },
              "named": true,
              "value": "type_variable"
            }
          ]
        }
      ]
    },
    "_type_equation": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "="
            },
            {
              "type": "STRING",
              "value": ":="
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "private"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "_type_ext"
        }
      ]
    },
    "variant_declaration": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "|"
            },
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "SYMBOL",
                      "name": "constructor_declaration"
                    },
                    {
                      "type": "REPEAT",
                      "content": {
                        "type": "SEQ",
                        "members": [
                          {
                            "type": "STRING",
                            "value": "|"
                          },
                          {
                            "type": "SYMBOL",
                            "name": "constructor_declaration"
                          }
                        ]
                      }
                    }
                  ]
                },
                {
                  "type": "BLANK"
                }
              ]
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "constructor_declaration"
            },
            {
              "type": "REPEAT",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": "|"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "constructor_declaration"
                  }
                ]
              }
            }
          ]
        }
      ]
    },
    "constructor_declaration": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_constructor_name"
            },
            {
              "type": "ALIAS",
              "content": {
                "type": "CHOICE",
                "members": [
                  {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": "["
                      },
                      {
                        "type": "STRING",
                        "value": "]"
                      }
                    ]
                  },
                  {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": "("
                      },
                      {
                        "type": "STRING",
                        "value": ")"
                      }
                    ]
                  },
                  {
                    "type": "STRING",
                    "value": "true"
                  },
                  {
                    "type": "STRING",
                    "value": "false"
                  }
                ]
              },
              "named": true,
              "value": "constructor_name"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "STRING",
                      "value": "of"
                    },
                    {
                      "type": "SYMBOL",
                      "name": "_constructor_argument"
                    }
                  ]
                },
                {
                  "type": "SYMBOL",
                  "name": "_simple_typed"
                },
                {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "STRING",
                      "value": ":"
                    },
                    {
                      "type": "SYMBOL",
                      "name": "_constructor_argument"
                    },
                    {
                      "type": "STRING",
                      "value": "->"
                    },
                    {
                      "type": "FIELD",
                      "name": "type",
                      "content": {
                        "type": "SYMBOL",
                        "name": "_simple_type_ext"
                      }
                    }
                  ]
                },
                {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "STRING",
                      "value": "="
                    },
                    {
                      "type": "SYMBOL",
                      "name": "constructor_path"
                    }
                  ]
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "_constructor_argument": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_simple_type_ext"
            },
            {
              "type": "REPEAT",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": "*"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "_simple_type_ext"
                  }
                ]
              }
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "record_declaration"
        }
      ]
    },
    "record_declaration": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "{"
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "field_declaration"
            },
            {
              "type": "REPEAT",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": ";"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "field_declaration"
                  }
                ]
              }
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": ";"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "}"
        }
      ]
    },
    "field_declaration": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "mutable"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "_field_name"
        },
        {
          "type": "SYMBOL",
          "name": "_polymorphic_typed"
        }
      ]
    },
    "type_constraint": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "constraint"
        },
        {
          "type": "SYMBOL",
          "name": "_type_ext"
        },
        {
          "type": "STRING",
          "value": "="
        },
        {
          "type": "SYMBOL",
          "name": "_type_ext"
        }
      ]
    },
    "exception_definition": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "exception"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_attribute"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "constructor_declaration"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "item_attribute"
          }
        }
      ]
    },
    "module_definition": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "module"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_attribute"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "rec"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "module_binding"
            },
            {
              "type": "REPEAT",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": "and"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "module_binding"
                  }
                ]
              }
            }
          ]
        }
      ]
    },
    "module_binding": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "name",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "_module_name"
              },
              {
                "type": "ALIAS",
                "content": {
                  "type": "STRING",
                  "value": "_"
                },
                "named": true,
                "value": "module_name"
              }
            ]
          }
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "module_parameter"
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_module_typed"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": "="
                },
                {
                  "type": "FIELD",
                  "name": "body",
                  "content": {
                    "type": "SYMBOL",
                    "name": "_module_expression_ext"
                  }
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "item_attribute"
          }
        }
      ]
    },
    "module_parameter": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "FIELD",
                  "name": "name",
                  "content": {
                    "type": "CHOICE",
                    "members": [
                      {
                        "type": "SYMBOL",
                        "name": "_module_name"
                      },
                      {
                        "type": "ALIAS",
                        "content": {
                          "type": "STRING",
                          "value": "_"
                        },
                        "named": true,
                        "value": "module_name"
                      }
                    ]
                  }
                },
                {
                  "type": "SYMBOL",
                  "name": "_module_typed"
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "module_type_definition": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "module"
        },
        {
          "type": "STRING",
          "value": "type"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_attribute"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "FIELD",
          "name": "name",
          "content": {
            "type": "SYMBOL",
            "name": "_module_type_name"
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "STRING",
                      "value": "="
                    },
                    {
                      "type": "STRING",
                      "value": ":="
                    }
                  ]
                },
                {
                  "type": "FIELD",
                  "name": "body",
                  "content": {
                    "type": "SYMBOL",
                    "name": "_module_type_ext"
                  }
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "item_attribute"
          }
        }
      ]
    },
    "open_module": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "open"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "!"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_attribute"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "_module_expression_ext"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "item_attribute"
          }
        }
      ]
    },
    "include_module": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "include"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_attribute"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "_module_expression_ext"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "item_attribute"
          }
        }
      ]
    },
    "class_definition": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "class"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_attribute"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "class_binding"
            },
            {
              "type": "REPEAT",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": "and"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "class_binding"
                  }
                ]
              }
            }
          ]
        }
      ]
    },
    "class_binding": {
      "type": "PREC_RIGHT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "STRING",
                "value": "virtual"
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": "["
                  },
                  {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "SYMBOL",
                        "name": "_type_param"
                      },
                      {
                        "type": "REPEAT",
                        "content": {
                          "type": "SEQ",
                          "members": [
                            {
                              "type": "STRING",
                              "value": ","
                            },
                            {
                              "type": "SYMBOL",
                              "name": "_type_param"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  {
                    "type": "STRING",
                    "value": "]"
                  }
                ]
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "FIELD",
            "name": "name",
            "content": {
              "type": "SYMBOL",
              "name": "_class_name"
            }
          },
          {
            "type": "REPEAT",
            "content": {
              "type": "SYMBOL",
              "name": "_parameter"
            }
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "_class_typed"
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": "="
                  },
                  {
                    "type": "FIELD",
                    "name": "body",
                    "content": {
                      "type": "SYMBOL",
                      "name": "_class_expression_ext"
                    }
                  }
                ]
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "REPEAT",
            "content": {
              "type": "SYMBOL",
              "name": "item_attribute"
            }
          }
        ]
      }
    },
    "class_type_definition": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "class"
        },
        {
          "type": "STRING",
          "value": "type"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_attribute"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "class_type_binding"
            },
            {
              "type": "REPEAT",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": "and"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "class_type_binding"
                  }
                ]
              }
            }
          ]
        }
      ]
    },
    "class_type_binding": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "virtual"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": "["
                },
                {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "SYMBOL",
                      "name": "_type_param"
                    },
                    {
                      "type": "REPEAT",
                      "content": {
                        "type": "SEQ",
                        "members": [
                          {
                            "type": "STRING",
                            "value": ","
                          },
                          {
                            "type": "SYMBOL",
                            "name": "_type_param"
                          }
                        ]
                      }
                    }
                  ]
                },
                {
                  "type": "STRING",
                  "value": "]"
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "FIELD",
          "name": "name",
          "content": {
            "type": "SYMBOL",
            "name": "_class_type_name"
          }
        },
        {
          "type": "STRING",
          "value": "="
        },
        {
          "type": "FIELD",
          "name": "body",
          "content": {
            "type": "SYMBOL",
            "name": "_simple_class_type_ext"
          }
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "item_attribute"
          }
        }
      ]
    },
    "_signature_item": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "value_specification"
        },
        {
          "type": "SYMBOL",
          "name": "external"
        },
        {
          "type": "SYMBOL",
          "name": "type_definition"
        },
        {
          "type": "SYMBOL",
          "name": "exception_definition"
        },
        {
          "type": "SYMBOL",
          "name": "module_definition"
        },
        {
          "type": "SYMBOL",
          "name": "module_type_definition"
        },
        {
          "type": "SYMBOL",
          "name": "open_module"
        },
        {
          "type": "SYMBOL",
          "name": "include_module_type"
        },
        {
          "type": "SYMBOL",
          "name": "class_definition"
        },
        {
          "type": "SYMBOL",
          "name": "class_type_definition"
        },
        {
          "type": "SYMBOL",
          "name": "floating_attribute"
        }
      ]
    },
    "_signature_item_ext": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_signature_item"
        },
        {
          "type": "SYMBOL",
          "name": "_item_extension"
        }
      ]
    },
    "value_specification": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "val"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_attribute"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "_value_name"
        },
        {
          "type": "SYMBOL",
          "name": "_typed"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "item_attribute"
          }
        }
      ]
    },
    "include_module_type": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "include"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_attribute"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "_module_type_ext"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "item_attribute"
          }
        }
      ]
    },
    "_module_typed": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": ":"
        },
        {
          "type": "SYMBOL",
          "name": "_module_type_ext"
        }
      ]
    },
    "_module_type": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "module_type_path"
        },
        {
          "type": "SYMBOL",
          "name": "signature"
        },
        {
          "type": "SYMBOL",
          "name": "module_type_constraint"
        },
        {
          "type": "SYMBOL",
          "name": "module_type_of"
        },
        {
          "type": "SYMBOL",
          "name": "functor_type"
        },
        {
          "type": "SYMBOL",
          "name": "parenthesized_module_type"
        }
      ]
    },
    "_module_type_ext": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_module_type"
        },
        {
          "type": "SYMBOL",
          "name": "_extension"
        }
      ]
    },
    "signature": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "sig"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_signature"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "end"
        }
      ]
    },
    "module_type_constraint": {
      "type": "PREC_RIGHT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_module_type_ext"
          },
          {
            "type": "STRING",
            "value": "with"
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "CHOICE",
                "members": [
                  {
                    "type": "SYMBOL",
                    "name": "constrain_type"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "constrain_module"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "constrain_module_type"
                  }
                ]
              },
              {
                "type": "REPEAT",
                "content": {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "STRING",
                      "value": "and"
                    },
                    {
                      "type": "CHOICE",
                      "members": [
                        {
                          "type": "SYMBOL",
                          "name": "constrain_type"
                        },
                        {
                          "type": "SYMBOL",
                          "name": "constrain_module"
                        },
                        {
                          "type": "SYMBOL",
                          "name": "constrain_module_type"
                        }
                      ]
                    }
                  ]
                }
              }
            ]
          }
        ]
      }
    },
    "constrain_type": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "type"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_type_params"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "type_constructor_path"
        },
        {
          "type": "SYMBOL",
          "name": "_type_equation"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "type_constraint"
          }
        }
      ]
    },
    "constrain_module": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "module"
        },
        {
          "type": "SYMBOL",
          "name": "module_path"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "="
            },
            {
              "type": "STRING",
              "value": ":="
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "extended_module_path"
        }
      ]
    },
    "constrain_module_type": {
      "type": "PREC_LEFT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "module"
          },
          {
            "type": "STRING",
            "value": "type"
          },
          {
            "type": "SYMBOL",
            "name": "module_type_path"
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "STRING",
                "value": "="
              },
              {
                "type": "STRING",
                "value": ":="
              }
            ]
          },
          {
            "type": "SYMBOL",
            "name": "_module_type_ext"
          }
        ]
      }
    },
    "module_type_of": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "module"
        },
        {
          "type": "STRING",
          "value": "type"
        },
        {
          "type": "STRING",
          "value": "of"
        },
        {
          "type": "SYMBOL",
          "name": "_module_expression_ext"
        }
      ]
    },
    "functor_type": {
      "type": "PREC_RIGHT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": "functor"
                  },
                  {
                    "type": "REPEAT",
                    "content": {
                      "type": "SYMBOL",
                      "name": "module_parameter"
                    }
                  }
                ]
              },
              {
                "type": "SYMBOL",
                "name": "_module_type_ext"
              }
            ]
          },
          {
            "type": "STRING",
            "value": "->"
          },
          {
            "type": "SYMBOL",
            "name": "_module_type_ext"
          }
        ]
      }
    },
    "parenthesized_module_type": {
      "type": "SEQ",
      "members": [
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "("
            },
            {
              "type": "SYMBOL",
              "name": "_module_type_ext"
            },
            {
              "type": "STRING",
              "value": ")"
            }
          ]
        }
      ]
    },
    "_simple_module_expression": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "typed_module_expression"
        },
        {
          "type": "SYMBOL",
          "name": "parenthesized_module_expression"
        },
        {
          "type": "SYMBOL",
          "name": "packed_module"
        }
      ]
    },
    "_simple_module_expression_ext": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_simple_module_expression"
        },
        {
          "type": "SYMBOL",
          "name": "_extension"
        }
      ]
    },
    "_module_expression": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_simple_module_expression"
        },
        {
          "type": "SYMBOL",
          "name": "module_path"
        },
        {
          "type": "SYMBOL",
          "name": "structure"
        },
        {
          "type": "SYMBOL",
          "name": "functor"
        },
        {
          "type": "SYMBOL",
          "name": "module_application"
        }
      ]
    },
    "_module_expression_ext": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_module_expression"
        },
        {
          "type": "SYMBOL",
          "name": "_extension"
        }
      ]
    },
    "structure": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "struct"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_structure"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "end"
        }
      ]
    },
    "functor": {
      "type": "PREC_RIGHT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "functor"
          },
          {
            "type": "REPEAT1",
            "content": {
              "type": "SYMBOL",
              "name": "module_parameter"
            }
          },
          {
            "type": "STRING",
            "value": "->"
          },
          {
            "type": "FIELD",
            "name": "body",
            "content": {
              "type": "SYMBOL",
              "name": "_module_expression_ext"
            }
          }
        ]
      }
    },
    "module_application": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "functor",
          "content": {
            "type": "SYMBOL",
            "name": "_module_expression_ext"
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "FIELD",
              "name": "argument",
              "content": {
                "type": "SYMBOL",
                "name": "_simple_module_expression_ext"
              }
            },
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": "("
                },
                {
                  "type": "STRING",
                  "value": ")"
                }
              ]
            }
          ]
        }
      ]
    },
    "typed_module_expression": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_module_expression_ext"
            },
            {
              "type": "SYMBOL",
              "name": "_module_typed"
            }
          ]
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "packed_module": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "val"
            },
            {
              "type": "SYMBOL",
              "name": "_expression_ext"
            },
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_module_typed"
                },
                {
                  "type": "BLANK"
                }
              ]
            },
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "STRING",
                      "value": ":>"
                    },
                    {
                      "type": "SYMBOL",
                      "name": "_module_type_ext"
                    }
                  ]
                },
                {
                  "type": "BLANK"
                }
              ]
            }
          ]
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "parenthesized_module_expression": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "SYMBOL",
          "name": "_module_expression_ext"
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "_class_typed": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": ":"
        },
        {
          "type": "SYMBOL",
          "name": "_class_type_ext"
        }
      ]
    },
    "_simple_class_type": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "class_type_path"
        },
        {
          "type": "SYMBOL",
          "name": "instantiated_class_type"
        },
        {
          "type": "SYMBOL",
          "name": "class_body_type"
        },
        {
          "type": "SYMBOL",
          "name": "let_open_class_type"
        }
      ]
    },
    "_simple_class_type_ext": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_simple_class_type"
        },
        {
          "type": "SYMBOL",
          "name": "_extension"
        }
      ]
    },
    "_class_type": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_simple_class_type"
        },
        {
          "type": "SYMBOL",
          "name": "class_function_type"
        }
      ]
    },
    "_class_type_ext": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_class_type"
        },
        {
          "type": "SYMBOL",
          "name": "_extension"
        }
      ]
    },
    "instantiated_class_type": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "["
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_type_ext"
            },
            {
              "type": "REPEAT",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": ","
                  },
                  {
                    "type": "SYMBOL",
                    "name": "_type_ext"
                  }
                ]
              }
            }
          ]
        },
        {
          "type": "STRING",
          "value": "]"
        },
        {
          "type": "SYMBOL",
          "name": "class_type_path"
        }
      ]
    },
    "class_body_type": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "object"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": "("
                },
                {
                  "type": "SYMBOL",
                  "name": "_type_ext"
                },
                {
                  "type": "STRING",
                  "value": ")"
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "_class_field_specification_ext"
              },
              {
                "type": "SYMBOL",
                "name": "floating_attribute"
              }
            ]
          }
        },
        {
          "type": "STRING",
          "value": "end"
        }
      ]
    },
    "_class_field_specification": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "inheritance_specification"
        },
        {
          "type": "SYMBOL",
          "name": "instance_variable_specification"
        },
        {
          "type": "SYMBOL",
          "name": "method_specification"
        },
        {
          "type": "SYMBOL",
          "name": "type_parameter_constraint"
        }
      ]
    },
    "_class_field_specification_ext": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_class_field_specification"
        },
        {
          "type": "SYMBOL",
          "name": "_item_extension"
        }
      ]
    },
    "inheritance_specification": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "inherit"
        },
        {
          "type": "SYMBOL",
          "name": "_simple_class_type_ext"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "item_attribute"
          }
        }
      ]
    },
    "instance_variable_specification": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "val"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "STRING",
                "value": "mutable"
              },
              {
                "type": "STRING",
                "value": "virtual"
              }
            ]
          }
        },
        {
          "type": "SYMBOL",
          "name": "_instance_variable_name"
        },
        {
          "type": "SYMBOL",
          "name": "_typed"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "item_attribute"
          }
        }
      ]
    },
    "method_specification": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "method"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "STRING",
                "value": "private"
              },
              {
                "type": "STRING",
                "value": "virtual"
              }
            ]
          }
        },
        {
          "type": "SYMBOL",
          "name": "_method_name"
        },
        {
          "type": "SYMBOL",
          "name": "_polymorphic_typed"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "item_attribute"
          }
        }
      ]
    },
    "type_parameter_constraint": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "constraint"
        },
        {
          "type": "SYMBOL",
          "name": "_type_ext"
        },
        {
          "type": "STRING",
          "value": "="
        },
        {
          "type": "SYMBOL",
          "name": "_type_ext"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "item_attribute"
          }
        }
      ]
    },
    "let_open_class_type": {
      "type": "PREC_RIGHT",
      "value": 2,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "let"
          },
          {
            "type": "SYMBOL",
            "name": "open_module"
          },
          {
            "type": "STRING",
            "value": "in"
          },
          {
            "type": "FIELD",
            "name": "body",
            "content": {
              "type": "SYMBOL",
              "name": "_simple_class_type_ext"
            }
          }
        ]
      }
    },
    "class_function_type": {
      "type": "PREC_RIGHT",
      "value": 3,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "CHOICE",
                    "members": [
                      {
                        "type": "STRING",
                        "value": "?"
                      },
                      {
                        "type": "BLANK"
                      }
                    ]
                  },
                  {
                    "type": "SYMBOL",
                    "name": "_label_name"
                  },
                  {
                    "type": "STRING",
                    "value": ":"
                  }
                ]
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "SYMBOL",
            "name": "_tuple_type_ext"
          },
          {
            "type": "STRING",
            "value": "->"
          },
          {
            "type": "SYMBOL",
            "name": "_class_type_ext"
          }
        ]
      }
    },
    "_simple_class_expression": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "class_path"
        },
        {
          "type": "SYMBOL",
          "name": "instantiated_class"
        },
        {
          "type": "SYMBOL",
          "name": "object_expression"
        },
        {
          "type": "SYMBOL",
          "name": "typed_class_expression"
        },
        {
          "type": "SYMBOL",
          "name": "parenthesized_class_expression"
        }
      ]
    },
    "_class_expression": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_simple_class_expression"
        },
        {
          "type": "SYMBOL",
          "name": "class_function"
        },
        {
          "type": "SYMBOL",
          "name": "class_application"
        },
        {
          "type": "SYMBOL",
          "name": "let_class_expression"
        },
        {
          "type": "SYMBOL",
          "name": "let_open_class_expression"
        }
      ]
    },
    "_class_expression_ext": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_class_expression"
        },
        {
          "type": "SYMBOL",
          "name": "_extension"
        }
      ]
    },
    "instantiated_class": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "["
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_type_ext"
            },
            {
              "type": "REPEAT",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": ","
                  },
                  {
                    "type": "SYMBOL",
                    "name": "_type_ext"
                  }
                ]
              }
            }
          ]
        },
        {
          "type": "STRING",
          "value": "]"
        },
        {
          "type": "SYMBOL",
          "name": "class_path"
        }
      ]
    },
    "typed_class_expression": {
      "type": "SEQ",
      "members": [
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "("
            },
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_class_expression_ext"
                },
                {
                  "type": "SYMBOL",
                  "name": "_class_typed"
                }
              ]
            },
            {
              "type": "STRING",
              "value": ")"
            }
          ]
        }
      ]
    },
    "class_function": {
      "type": "PREC_RIGHT",
      "value": 2,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "fun"
          },
          {
            "type": "REPEAT1",
            "content": {
              "type": "SYMBOL",
              "name": "_parameter"
            }
          },
          {
            "type": "STRING",
            "value": "->"
          },
          {
            "type": "FIELD",
            "name": "body",
            "content": {
              "type": "SYMBOL",
              "name": "_class_expression_ext"
            }
          }
        ]
      }
    },
    "class_application": {
      "type": "PREC_RIGHT",
      "value": 16,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "FIELD",
            "name": "class",
            "content": {
              "type": "SYMBOL",
              "name": "_simple_class_expression"
            }
          },
          {
            "type": "REPEAT1",
            "content": {
              "type": "FIELD",
              "name": "argument",
              "content": {
                "type": "SYMBOL",
                "name": "_argument"
              }
            }
          }
        ]
      }
    },
    "let_class_expression": {
      "type": "PREC_RIGHT",
      "value": 2,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "value_definition"
          },
          {
            "type": "STRING",
            "value": "in"
          },
          {
            "type": "FIELD",
            "name": "body",
            "content": {
              "type": "SYMBOL",
              "name": "_class_expression_ext"
            }
          }
        ]
      }
    },
    "_class_field": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "inheritance_definition"
        },
        {
          "type": "SYMBOL",
          "name": "instance_variable_definition"
        },
        {
          "type": "SYMBOL",
          "name": "method_definition"
        },
        {
          "type": "SYMBOL",
          "name": "type_parameter_constraint"
        },
        {
          "type": "SYMBOL",
          "name": "class_initializer"
        }
      ]
    },
    "_class_field_ext": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_class_field"
        },
        {
          "type": "SYMBOL",
          "name": "_item_extension"
        }
      ]
    },
    "inheritance_definition": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "inherit"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "!"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "_class_expression_ext"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": "as"
                },
                {
                  "type": "SYMBOL",
                  "name": "_value_pattern"
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "item_attribute"
          }
        }
      ]
    },
    "instance_variable_definition": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "val"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "!"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "STRING",
                "value": "mutable"
              },
              {
                "type": "STRING",
                "value": "virtual"
              }
            ]
          }
        },
        {
          "type": "FIELD",
          "name": "name",
          "content": {
            "type": "SYMBOL",
            "name": "_instance_variable_name"
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_typed"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": ":>"
                },
                {
                  "type": "SYMBOL",
                  "name": "_type_ext"
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": "="
                },
                {
                  "type": "FIELD",
                  "name": "body",
                  "content": {
                    "type": "SYMBOL",
                    "name": "_sequence_expression_ext"
                  }
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "item_attribute"
          }
        }
      ]
    },
    "method_definition": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "method"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "!"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "STRING",
                "value": "private"
              },
              {
                "type": "STRING",
                "value": "virtual"
              }
            ]
          }
        },
        {
          "type": "FIELD",
          "name": "name",
          "content": {
            "type": "SYMBOL",
            "name": "_method_name"
          }
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "_parameter"
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_polymorphic_typed"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": "="
                },
                {
                  "type": "FIELD",
                  "name": "body",
                  "content": {
                    "type": "SYMBOL",
                    "name": "_sequence_expression_ext"
                  }
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "item_attribute"
          }
        }
      ]
    },
    "class_initializer": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "initializer"
        },
        {
          "type": "SYMBOL",
          "name": "_sequence_expression_ext"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "item_attribute"
          }
        }
      ]
    },
    "let_open_class_expression": {
      "type": "PREC_RIGHT",
      "value": 2,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "let"
          },
          {
            "type": "SYMBOL",
            "name": "open_module"
          },
          {
            "type": "STRING",
            "value": "in"
          },
          {
            "type": "FIELD",
            "name": "body",
            "content": {
              "type": "SYMBOL",
              "name": "_class_expression_ext"
            }
          }
        ]
      }
    },
    "parenthesized_class_expression": {
      "type": "SEQ",
      "members": [
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "("
            },
            {
              "type": "SYMBOL",
              "name": "_class_expression_ext"
            },
            {
              "type": "STRING",
              "value": ")"
            }
          ]
        }
      ]
    },
    "_typed": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": ":"
        },
        {
          "type": "SYMBOL",
          "name": "_type_ext"
        }
      ]
    },
    "_simple_typed": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": ":"
        },
        {
          "type": "SYMBOL",
          "name": "_simple_type_ext"
        }
      ]
    },
    "_polymorphic_typed": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": ":"
        },
        {
          "type": "SYMBOL",
          "name": "_polymorphic_type"
        }
      ]
    },
    "_polymorphic_type": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "polymorphic_type"
        },
        {
          "type": "SYMBOL",
          "name": "_type_ext"
        }
      ]
    },
    "polymorphic_type": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "REPEAT1",
              "content": {
                "type": "SYMBOL",
                "name": "type_variable"
              }
            },
            {
              "type": "ALIAS",
              "content": {
                "type": "SYMBOL",
                "name": "_abstract_type"
              },
              "named": true,
              "value": "abstract_type"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "."
        },
        {
          "type": "SYMBOL",
          "name": "_type_ext"
        }
      ]
    },
    "_abstract_type": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "type"
        },
        {
          "type": "REPEAT1",
          "content": {
            "type": "SYMBOL",
            "name": "_type_constructor"
          }
        }
      ]
    },
    "_parenthesized_abstract_type": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "SYMBOL",
          "name": "_abstract_type"
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "_simple_type": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "type_variable"
        },
        {
          "type": "SYMBOL",
          "name": "type_constructor_path"
        },
        {
          "type": "SYMBOL",
          "name": "constructed_type"
        },
        {
          "type": "SYMBOL",
          "name": "polymorphic_variant_type"
        },
        {
          "type": "SYMBOL",
          "name": "package_type"
        },
        {
          "type": "SYMBOL",
          "name": "hash_type"
        },
        {
          "type": "SYMBOL",
          "name": "object_type"
        },
        {
          "type": "SYMBOL",
          "name": "parenthesized_type"
        }
      ]
    },
    "_simple_type_ext": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_simple_type"
        },
        {
          "type": "SYMBOL",
          "name": "_extension"
        }
      ]
    },
    "_tuple_type": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_simple_type"
        },
        {
          "type": "SYMBOL",
          "name": "tuple_type"
        }
      ]
    },
    "_tuple_type_ext": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_tuple_type"
        },
        {
          "type": "SYMBOL",
          "name": "_extension"
        }
      ]
    },
    "_type": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_tuple_type"
        },
        {
          "type": "SYMBOL",
          "name": "function_type"
        },
        {
          "type": "SYMBOL",
          "name": "aliased_type"
        }
      ]
    },
    "_type_ext": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_type"
        },
        {
          "type": "SYMBOL",
          "name": "_extension"
        }
      ]
    },
    "function_type": {
      "type": "PREC_RIGHT",
      "value": 3,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "typed_label"
              },
              {
                "type": "SYMBOL",
                "name": "_type_ext"
              }
            ]
          },
          {
            "type": "STRING",
            "value": "->"
          },
          {
            "type": "SYMBOL",
            "name": "_type_ext"
          }
        ]
      }
    },
    "typed_label": {
      "type": "PREC_LEFT",
      "value": 3,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "STRING",
                "value": "?"
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "SYMBOL",
            "name": "_label_name"
          },
          {
            "type": "STRING",
            "value": ":"
          },
          {
            "type": "SYMBOL",
            "name": "_type_ext"
          }
        ]
      }
    },
    "tuple_type": {
      "type": "PREC",
      "value": 6,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_tuple_type_ext"
          },
          {
            "type": "STRING",
            "value": "*"
          },
          {
            "type": "SYMBOL",
            "name": "_simple_type_ext"
          }
        ]
      }
    },
    "constructed_type": {
      "type": "PREC",
      "value": 16,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "_simple_type_ext"
              },
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": "("
                  },
                  {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "SYMBOL",
                        "name": "_type_ext"
                      },
                      {
                        "type": "REPEAT",
                        "content": {
                          "type": "SEQ",
                          "members": [
                            {
                              "type": "STRING",
                              "value": ","
                            },
                            {
                              "type": "SYMBOL",
                              "name": "_type_ext"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  {
                    "type": "STRING",
                    "value": ")"
                  }
                ]
              }
            ]
          },
          {
            "type": "SYMBOL",
            "name": "type_constructor_path"
          }
        ]
      }
    },
    "aliased_type": {
      "type": "PREC",
      "value": 2,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_type_ext"
          },
          {
            "type": "STRING",
            "value": "as"
          },
          {
            "type": "SYMBOL",
            "name": "type_variable"
          }
        ]
      }
    },
    "polymorphic_variant_type": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": "["
                },
                {
                  "type": "SYMBOL",
                  "name": "tag_specification"
                },
                {
                  "type": "STRING",
                  "value": "]"
                }
              ]
            },
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": "["
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "SYMBOL",
                      "name": "_tag_spec"
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                },
                {
                  "type": "STRING",
                  "value": "|"
                },
                {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "SYMBOL",
                      "name": "_tag_spec"
                    },
                    {
                      "type": "REPEAT",
                      "content": {
                        "type": "SEQ",
                        "members": [
                          {
                            "type": "STRING",
                            "value": "|"
                          },
                          {
                            "type": "SYMBOL",
                            "name": "_tag_spec"
                          }
                        ]
                      }
                    }
                  ]
                },
                {
                  "type": "STRING",
                  "value": "]"
                }
              ]
            },
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": "[>"
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "STRING",
                      "value": "|"
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "SEQ",
                      "members": [
                        {
                          "type": "SYMBOL",
                          "name": "_tag_spec"
                        },
                        {
                          "type": "REPEAT",
                          "content": {
                            "type": "SEQ",
                            "members": [
                              {
                                "type": "STRING",
                                "value": "|"
                              },
                              {
                                "type": "SYMBOL",
                                "name": "_tag_spec"
                              }
                            ]
                          }
                        }
                      ]
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                },
                {
                  "type": "STRING",
                  "value": "]"
                }
              ]
            },
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": "[<"
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "STRING",
                      "value": "|"
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                },
                {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "SYMBOL",
                      "name": "_tag_spec"
                    },
                    {
                      "type": "REPEAT",
                      "content": {
                        "type": "SEQ",
                        "members": [
                          {
                            "type": "STRING",
                            "value": "|"
                          },
                          {
                            "type": "SYMBOL",
                            "name": "_tag_spec"
                          }
                        ]
                      }
                    }
                  ]
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "SEQ",
                      "members": [
                        {
                          "type": "STRING",
                          "value": ">"
                        },
                        {
                          "type": "REPEAT1",
                          "content": {
                            "type": "SYMBOL",
                            "name": "tag"
                          }
                        }
                      ]
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                },
                {
                  "type": "STRING",
                  "value": "]"
                }
              ]
            }
          ]
        }
      ]
    },
    "_tag_spec": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_type_ext"
        },
        {
          "type": "SYMBOL",
          "name": "tag_specification"
        }
      ]
    },
    "tag_specification": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "tag"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": "of"
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "STRING",
                      "value": "&"
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                },
                {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "SYMBOL",
                      "name": "_type_ext"
                    },
                    {
                      "type": "REPEAT",
                      "content": {
                        "type": "SEQ",
                        "members": [
                          {
                            "type": "STRING",
                            "value": "&"
                          },
                          {
                            "type": "SYMBOL",
                            "name": "_type_ext"
                          }
                        ]
                      }
                    }
                  ]
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "package_type": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "module"
            },
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_attribute"
                },
                {
                  "type": "BLANK"
                }
              ]
            },
            {
              "type": "SYMBOL",
              "name": "_module_type_ext"
            }
          ]
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "object_type": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "<"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "SEQ",
                      "members": [
                        {
                          "type": "CHOICE",
                          "members": [
                            {
                              "type": "SYMBOL",
                              "name": "method_type"
                            },
                            {
                              "type": "SYMBOL",
                              "name": "_simple_type_ext"
                            }
                          ]
                        },
                        {
                          "type": "REPEAT",
                          "content": {
                            "type": "SEQ",
                            "members": [
                              {
                                "type": "STRING",
                                "value": ";"
                              },
                              {
                                "type": "CHOICE",
                                "members": [
                                  {
                                    "type": "SYMBOL",
                                    "name": "method_type"
                                  },
                                  {
                                    "type": "SYMBOL",
                                    "name": "_simple_type_ext"
                                  }
                                ]
                              }
                            ]
                          }
                        }
                      ]
                    },
                    {
                      "type": "CHOICE",
                      "members": [
                        {
                          "type": "SEQ",
                          "members": [
                            {
                              "type": "STRING",
                              "value": ";"
                            },
                            {
                              "type": "CHOICE",
                              "members": [
                                {
                                  "type": "STRING",
                                  "value": ".."
                                },
                                {
                                  "type": "BLANK"
                                }
                              ]
                            }
                          ]
                        },
                        {
                          "type": "BLANK"
                        }
                      ]
                    }
                  ]
                },
                {
                  "type": "STRING",
                  "value": ".."
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": ">"
        }
      ]
    },
    "method_type": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_method_name"
        },
        {
          "type": "SYMBOL",
          "name": "_polymorphic_typed"
        }
      ]
    },
    "hash_type": {
      "type": "PREC",
      "value": 17,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "CHOICE",
                "members": [
                  {
                    "type": "SYMBOL",
                    "name": "_simple_type_ext"
                  },
                  {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": "("
                      },
                      {
                        "type": "SEQ",
                        "members": [
                          {
                            "type": "SYMBOL",
                            "name": "_type_ext"
                          },
                          {
                            "type": "REPEAT",
                            "content": {
                              "type": "SEQ",
                              "members": [
                                {
                                  "type": "STRING",
                                  "value": ","
                                },
                                {
                                  "type": "SYMBOL",
                                  "name": "_type_ext"
                                }
                              ]
                            }
                          }
                        ]
                      },
                      {
                        "type": "STRING",
                        "value": ")"
                      }
                    ]
                  }
                ]
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "STRING",
            "value": "#"
          },
          {
            "type": "SYMBOL",
            "name": "class_type_path"
          }
        ]
      }
    },
    "parenthesized_type": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "SYMBOL",
          "name": "_type_ext"
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "_simple_expression": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "value_path"
        },
        {
          "type": "SYMBOL",
          "name": "_constant"
        },
        {
          "type": "SYMBOL",
          "name": "typed_expression"
        },
        {
          "type": "SYMBOL",
          "name": "constructor_path"
        },
        {
          "type": "SYMBOL",
          "name": "tag"
        },
        {
          "type": "SYMBOL",
          "name": "list_expression"
        },
        {
          "type": "SYMBOL",
          "name": "array_expression"
        },
        {
          "type": "SYMBOL",
          "name": "record_expression"
        },
        {
          "type": "SYMBOL",
          "name": "prefix_expression"
        },
        {
          "type": "SYMBOL",
          "name": "hash_expression"
        },
        {
          "type": "SYMBOL",
          "name": "field_get_expression"
        },
        {
          "type": "SYMBOL",
          "name": "array_get_expression"
        },
        {
          "type": "SYMBOL",
          "name": "string_get_expression"
        },
        {
          "type": "SYMBOL",
          "name": "bigarray_get_expression"
        },
        {
          "type": "SYMBOL",
          "name": "coercion_expression"
        },
        {
          "type": "SYMBOL",
          "name": "local_open_expression"
        },
        {
          "type": "SYMBOL",
          "name": "package_expression"
        },
        {
          "type": "SYMBOL",
          "name": "new_expression"
        },
        {
          "type": "SYMBOL",
          "name": "object_copy_expression"
        },
        {
          "type": "SYMBOL",
          "name": "method_invocation"
        },
        {
          "type": "SYMBOL",
          "name": "parenthesized_expression"
        },
        {
          "type": "SYMBOL",
          "name": "ocamlyacc_value"
        }
      ]
    },
    "_simple_expression_ext": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_simple_expression"
        },
        {
          "type": "SYMBOL",
          "name": "_extension"
        }
      ]
    },
    "_expression": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_simple_expression"
        },
        {
          "type": "SYMBOL",
          "name": "product_expression"
        },
        {
          "type": "SYMBOL",
          "name": "cons_expression"
        },
        {
          "type": "SYMBOL",
          "name": "application_expression"
        },
        {
          "type": "SYMBOL",
          "name": "infix_expression"
        },
        {
          "type": "SYMBOL",
          "name": "sign_expression"
        },
        {
          "type": "SYMBOL",
          "name": "set_expression"
        },
        {
          "type": "SYMBOL",
          "name": "if_expression"
        },
        {
          "type": "SYMBOL",
          "name": "while_expression"
        },
        {
          "type": "SYMBOL",
          "name": "for_expression"
        },
        {
          "type": "SYMBOL",
          "name": "match_expression"
        },
        {
          "type": "SYMBOL",
          "name": "function_expression"
        },
        {
          "type": "SYMBOL",
          "name": "fun_expression"
        },
        {
          "type": "SYMBOL",
          "name": "try_expression"
        },
        {
          "type": "SYMBOL",
          "name": "let_expression"
        },
        {
          "type": "SYMBOL",
          "name": "assert_expression"
        },
        {
          "type": "SYMBOL",
          "name": "lazy_expression"
        },
        {
          "type": "SYMBOL",
          "name": "let_module_expression"
        },
        {
          "type": "SYMBOL",
          "name": "let_open_expression"
        },
        {
          "type": "SYMBOL",
          "name": "let_exception_expression"
        },
        {
          "type": "SYMBOL",
          "name": "object_expression"
        }
      ]
    },
    "_expression_ext": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_expression"
        },
        {
          "type": "SYMBOL",
          "name": "_extension"
        }
      ]
    },
    "_sequence_expression": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_expression"
        },
        {
          "type": "SYMBOL",
          "name": "sequence_expression"
        }
      ]
    },
    "_sequence_expression_ext": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_sequence_expression"
        },
        {
          "type": "SYMBOL",
          "name": "_extension"
        }
      ]
    },
    "typed_expression": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_sequence_expression_ext"
            },
            {
              "type": "SYMBOL",
              "name": "_typed"
            }
          ]
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "product_expression": {
      "type": "PREC_LEFT",
      "value": 6,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "FIELD",
            "name": "left",
            "content": {
              "type": "SYMBOL",
              "name": "_expression_ext"
            }
          },
          {
            "type": "STRING",
            "value": ","
          },
          {
            "type": "FIELD",
            "name": "right",
            "content": {
              "type": "SYMBOL",
              "name": "_expression_ext"
            }
          }
        ]
      }
    },
    "cons_expression": {
      "type": "PREC_RIGHT",
      "value": 11,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "FIELD",
            "name": "left",
            "content": {
              "type": "SYMBOL",
              "name": "_expression_ext"
            }
          },
          {
            "type": "STRING",
            "value": "::"
          },
          {
            "type": "FIELD",
            "name": "right",
            "content": {
              "type": "SYMBOL",
              "name": "_expression_ext"
            }
          }
        ]
      }
    },
    "list_expression": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "["
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "SYMBOL",
                      "name": "_expression_ext"
                    },
                    {
                      "type": "REPEAT",
                      "content": {
                        "type": "SEQ",
                        "members": [
                          {
                            "type": "STRING",
                            "value": ";"
                          },
                          {
                            "type": "SYMBOL",
                            "name": "_expression_ext"
                          }
                        ]
                      }
                    }
                  ]
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "STRING",
                      "value": ";"
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "]"
        }
      ]
    },
    "array_expression": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "[|"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "SYMBOL",
                      "name": "_expression_ext"
                    },
                    {
                      "type": "REPEAT",
                      "content": {
                        "type": "SEQ",
                        "members": [
                          {
                            "type": "STRING",
                            "value": ";"
                          },
                          {
                            "type": "SYMBOL",
                            "name": "_expression_ext"
                          }
                        ]
                      }
                    }
                  ]
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "STRING",
                      "value": ";"
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "|]"
        }
      ]
    },
    "record_expression": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "{"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_simple_expression_ext"
                },
                {
                  "type": "STRING",
                  "value": "with"
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "field_expression"
            },
            {
              "type": "REPEAT",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": ";"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "field_expression"
                  }
                ]
              }
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": ";"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "}"
        }
      ]
    },
    "field_expression": {
      "type": "PREC",
      "value": 3,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "FIELD",
            "name": "name",
            "content": {
              "type": "SYMBOL",
              "name": "field_path"
            }
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "_typed"
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": "="
                  },
                  {
                    "type": "FIELD",
                    "name": "body",
                    "content": {
                      "type": "SYMBOL",
                      "name": "_expression_ext"
                    }
                  }
                ]
              },
              {
                "type": "BLANK"
              }
            ]
          }
        ]
      }
    },
    "application_expression": {
      "type": "PREC_RIGHT",
      "value": 16,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "FIELD",
            "name": "function",
            "content": {
              "type": "SYMBOL",
              "name": "_simple_expression_ext"
            }
          },
          {
            "type": "REPEAT1",
            "content": {
              "type": "FIELD",
              "name": "argument",
              "content": {
                "type": "SYMBOL",
                "name": "_argument"
              }
            }
          }
        ]
      }
    },
    "_argument": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_simple_expression_ext"
        },
        {
          "type": "SYMBOL",
          "name": "labeled_argument"
        }
      ]
    },
    "labeled_argument": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_label"
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_label"
            },
            {
              "type": "IMMEDIATE_TOKEN",
              "content": {
                "type": "STRING",
                "value": ":"
              }
            },
            {
              "type": "SYMBOL",
              "name": "_simple_expression_ext"
            }
          ]
        }
      ]
    },
    "prefix_expression": {
      "type": "PREC",
      "value": 19,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "prefix_operator"
          },
          {
            "type": "FIELD",
            "name": "right",
            "content": {
              "type": "SYMBOL",
              "name": "_simple_expression_ext"
            }
          }
        ]
      }
    },
    "sign_expression": {
      "type": "PREC",
      "value": 15,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "sign_operator"
          },
          {
            "type": "FIELD",
            "name": "right",
            "content": {
              "type": "SYMBOL",
              "name": "_expression_ext"
            }
          }
        ]
      }
    },
    "hash_expression": {
      "type": "PREC_LEFT",
      "value": 17,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "FIELD",
            "name": "left",
            "content": {
              "type": "SYMBOL",
              "name": "_simple_expression_ext"
            }
          },
          {
            "type": "SYMBOL",
            "name": "hash_operator"
          },
          {
            "type": "FIELD",
            "name": "right",
            "content": {
              "type": "SYMBOL",
              "name": "_simple_expression_ext"
            }
          }
        ]
      }
    },
    "infix_expression": {
      "type": "CHOICE",
      "members": [
        {
          "type": "PREC_RIGHT",
          "value": 14,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "left",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression_ext"
                }
              },
              {
                "type": "ALIAS",
                "content": {
                  "type": "SYMBOL",
                  "name": "_pow_operator"
                },
                "named": true,
                "value": "infix_operator"
              },
              {
                "type": "FIELD",
                "name": "right",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression_ext"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": 13,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "left",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression_ext"
                }
              },
              {
                "type": "ALIAS",
                "content": {
                  "type": "SYMBOL",
                  "name": "_mult_operator"
                },
                "named": true,
                "value": "infix_operator"
              },
              {
                "type": "FIELD",
                "name": "right",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression_ext"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": 12,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "left",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression_ext"
                }
              },
              {
                "type": "ALIAS",
                "content": {
                  "type": "SYMBOL",
                  "name": "_add_operator"
                },
                "named": true,
                "value": "infix_operator"
              },
              {
                "type": "FIELD",
                "name": "right",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression_ext"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_RIGHT",
          "value": 10,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "left",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression_ext"
                }
              },
              {
                "type": "ALIAS",
                "content": {
                  "type": "SYMBOL",
                  "name": "_concat_operator"
                },
                "named": true,
                "value": "infix_operator"
              },
              {
                "type": "FIELD",
                "name": "right",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression_ext"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": 9,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "left",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression_ext"
                }
              },
              {
                "type": "ALIAS",
                "content": {
                  "type": "SYMBOL",
                  "name": "_rel_operator"
                },
                "named": true,
                "value": "infix_operator"
              },
              {
                "type": "FIELD",
                "name": "right",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression_ext"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_RIGHT",
          "value": 8,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "left",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression_ext"
                }
              },
              {
                "type": "ALIAS",
                "content": {
                  "type": "SYMBOL",
                  "name": "_and_operator"
                },
                "named": true,
                "value": "infix_operator"
              },
              {
                "type": "FIELD",
                "name": "right",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression_ext"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_RIGHT",
          "value": 7,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "left",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression_ext"
                }
              },
              {
                "type": "ALIAS",
                "content": {
                  "type": "SYMBOL",
                  "name": "_or_operator"
                },
                "named": true,
                "value": "infix_operator"
              },
              {
                "type": "FIELD",
                "name": "right",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression_ext"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_RIGHT",
          "value": 5,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "left",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression_ext"
                }
              },
              {
                "type": "ALIAS",
                "content": {
                  "type": "SYMBOL",
                  "name": "_assign_operator"
                },
                "named": true,
                "value": "infix_operator"
              },
              {
                "type": "FIELD",
                "name": "right",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression_ext"
                }
              }
            ]
          }
        }
      ]
    },
    "field_get_expression": {
      "type": "PREC_LEFT",
      "value": 18,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_simple_expression_ext"
          },
          {
            "type": "STRING",
            "value": "."
          },
          {
            "type": "SYMBOL",
            "name": "field_path"
          }
        ]
      }
    },
    "array_get_expression": {
      "type": "PREC",
      "value": 18,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_simple_expression_ext"
          },
          {
            "type": "STRING",
            "value": "."
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "indexing_operator_path"
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "STRING",
            "value": "("
          },
          {
            "type": "SYMBOL",
            "name": "_sequence_expression_ext"
          },
          {
            "type": "STRING",
            "value": ")"
          }
        ]
      }
    },
    "string_get_expression": {
      "type": "PREC",
      "value": 18,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_simple_expression_ext"
          },
          {
            "type": "STRING",
            "value": "."
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "indexing_operator_path"
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "STRING",
            "value": "["
          },
          {
            "type": "SYMBOL",
            "name": "_sequence_expression_ext"
          },
          {
            "type": "STRING",
            "value": "]"
          }
        ]
      }
    },
    "bigarray_get_expression": {
      "type": "PREC",
      "value": 18,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_simple_expression_ext"
          },
          {
            "type": "STRING",
            "value": "."
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "indexing_operator_path"
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "STRING",
            "value": "{"
          },
          {
            "type": "SYMBOL",
            "name": "_sequence_expression_ext"
          },
          {
            "type": "STRING",
            "value": "}"
          }
        ]
      }
    },
    "set_expression": {
      "type": "PREC_RIGHT",
      "value": 5,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "field_get_expression"
              },
              {
                "type": "SYMBOL",
                "name": "array_get_expression"
              },
              {
                "type": "SYMBOL",
                "name": "string_get_expression"
              },
              {
                "type": "SYMBOL",
                "name": "bigarray_get_expression"
              },
              {
                "type": "SYMBOL",
                "name": "_instance_variable_name"
              }
            ]
          },
          {
            "type": "STRING",
            "value": "<-"
          },
          {
            "type": "FIELD",
            "name": "body",
            "content": {
              "type": "SYMBOL",
              "name": "_expression_ext"
            }
          }
        ]
      }
    },
    "if_expression": {
      "type": "PREC_RIGHT",
      "value": 4,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "if"
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "_attribute"
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "FIELD",
            "name": "condition",
            "content": {
              "type": "SYMBOL",
              "name": "_sequence_expression_ext"
            }
          },
          {
            "type": "SYMBOL",
            "name": "then_clause"
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "else_clause"
              },
              {
                "type": "BLANK"
              }
            ]
          }
        ]
      }
    },
    "then_clause": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "then"
        },
        {
          "type": "SYMBOL",
          "name": "_expression_ext"
        }
      ]
    },
    "else_clause": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "else"
        },
        {
          "type": "SYMBOL",
          "name": "_expression_ext"
        }
      ]
    },
    "while_expression": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "while"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_attribute"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "FIELD",
          "name": "condition",
          "content": {
            "type": "SYMBOL",
            "name": "_sequence_expression_ext"
          }
        },
        {
          "type": "SYMBOL",
          "name": "do_clause"
        }
      ]
    },
    "do_clause": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "do"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_sequence_expression_ext"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "done"
        }
      ]
    },
    "for_expression": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "for"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_attribute"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "FIELD",
          "name": "name",
          "content": {
            "type": "SYMBOL",
            "name": "_value_pattern"
          }
        },
        {
          "type": "STRING",
          "value": "="
        },
        {
          "type": "FIELD",
          "name": "from",
          "content": {
            "type": "SYMBOL",
            "name": "_sequence_expression_ext"
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "to"
            },
            {
              "type": "STRING",
              "value": "downto"
            }
          ]
        },
        {
          "type": "FIELD",
          "name": "to",
          "content": {
            "type": "SYMBOL",
            "name": "_sequence_expression_ext"
          }
        },
        {
          "type": "SYMBOL",
          "name": "do_clause"
        }
      ]
    },
    "sequence_expression": {
      "type": "PREC_RIGHT",
      "value": 3,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "FIELD",
            "name": "left",
            "content": {
              "type": "SYMBOL",
              "name": "_expression_ext"
            }
          },
          {
            "type": "STRING",
            "value": ";"
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "CHOICE",
                    "members": [
                      {
                        "type": "SYMBOL",
                        "name": "_attribute"
                      },
                      {
                        "type": "BLANK"
                      }
                    ]
                  },
                  {
                    "type": "FIELD",
                    "name": "right",
                    "content": {
                      "type": "SYMBOL",
                      "name": "_sequence_expression_ext"
                    }
                  }
                ]
              },
              {
                "type": "BLANK"
              }
            ]
          }
        ]
      }
    },
    "match_expression": {
      "type": "PREC_RIGHT",
      "value": 2,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": "match"
                  },
                  {
                    "type": "CHOICE",
                    "members": [
                      {
                        "type": "SYMBOL",
                        "name": "_attribute"
                      },
                      {
                        "type": "BLANK"
                      }
                    ]
                  }
                ]
              },
              {
                "type": "SYMBOL",
                "name": "match_operator"
              }
            ]
          },
          {
            "type": "SYMBOL",
            "name": "_sequence_expression_ext"
          },
          {
            "type": "STRING",
            "value": "with"
          },
          {
            "type": "SYMBOL",
            "name": "_match_cases"
          }
        ]
      }
    },
    "_match_cases": {
      "type": "PREC_RIGHT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "STRING",
                "value": "|"
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "SYMBOL",
                "name": "match_case"
              },
              {
                "type": "REPEAT",
                "content": {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "STRING",
                      "value": "|"
                    },
                    {
                      "type": "SYMBOL",
                      "name": "match_case"
                    }
                  ]
                }
              }
            ]
          }
        ]
      }
    },
    "match_case": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "pattern",
          "content": {
            "type": "SYMBOL",
            "name": "_pattern_ext"
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "guard"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "->"
        },
        {
          "type": "FIELD",
          "name": "body",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "_sequence_expression_ext"
              },
              {
                "type": "SYMBOL",
                "name": "refutation_case"
              }
            ]
          }
        }
      ]
    },
    "guard": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "when"
        },
        {
          "type": "SYMBOL",
          "name": "_sequence_expression_ext"
        }
      ]
    },
    "refutation_case": {
      "type": "STRING",
      "value": "."
    },
    "function_expression": {
      "type": "PREC_RIGHT",
      "value": 2,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "function"
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "_attribute"
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "SYMBOL",
            "name": "_match_cases"
          }
        ]
      }
    },
    "fun_expression": {
      "type": "PREC_RIGHT",
      "value": 2,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "fun"
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "_attribute"
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "REPEAT1",
            "content": {
              "type": "SYMBOL",
              "name": "_parameter"
            }
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "_simple_typed"
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "STRING",
            "value": "->"
          },
          {
            "type": "FIELD",
            "name": "body",
            "content": {
              "type": "SYMBOL",
              "name": "_sequence_expression_ext"
            }
          }
        ]
      }
    },
    "try_expression": {
      "type": "PREC_RIGHT",
      "value": 2,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "try"
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "_attribute"
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "SYMBOL",
            "name": "_sequence_expression_ext"
          },
          {
            "type": "STRING",
            "value": "with"
          },
          {
            "type": "SYMBOL",
            "name": "_match_cases"
          }
        ]
      }
    },
    "let_expression": {
      "type": "PREC_RIGHT",
      "value": 2,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "value_definition"
          },
          {
            "type": "STRING",
            "value": "in"
          },
          {
            "type": "SYMBOL",
            "name": "_sequence_expression_ext"
          }
        ]
      }
    },
    "coercion_expression": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_sequence_expression_ext"
            },
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_typed"
                },
                {
                  "type": "BLANK"
                }
              ]
            },
            {
              "type": "STRING",
              "value": ":>"
            },
            {
              "type": "SYMBOL",
              "name": "_type_ext"
            }
          ]
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "assert_expression": {
      "type": "PREC_LEFT",
      "value": 16,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "assert"
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "_attribute"
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "SYMBOL",
            "name": "_simple_expression_ext"
          }
        ]
      }
    },
    "lazy_expression": {
      "type": "PREC_LEFT",
      "value": 16,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "lazy"
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "_attribute"
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "SYMBOL",
            "name": "_simple_expression_ext"
          }
        ]
      }
    },
    "let_module_expression": {
      "type": "PREC_RIGHT",
      "value": 2,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "let"
          },
          {
            "type": "SYMBOL",
            "name": "module_definition"
          },
          {
            "type": "STRING",
            "value": "in"
          },
          {
            "type": "FIELD",
            "name": "body",
            "content": {
              "type": "SYMBOL",
              "name": "_sequence_expression_ext"
            }
          }
        ]
      }
    },
    "let_open_expression": {
      "type": "PREC_RIGHT",
      "value": 2,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "let"
          },
          {
            "type": "SYMBOL",
            "name": "open_module"
          },
          {
            "type": "STRING",
            "value": "in"
          },
          {
            "type": "FIELD",
            "name": "body",
            "content": {
              "type": "SYMBOL",
              "name": "_sequence_expression_ext"
            }
          }
        ]
      }
    },
    "local_open_expression": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "module_path"
        },
        {
          "type": "STRING",
          "value": "."
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": "("
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "SYMBOL",
                      "name": "_sequence_expression_ext"
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                },
                {
                  "type": "STRING",
                  "value": ")"
                }
              ]
            },
            {
              "type": "SYMBOL",
              "name": "list_expression"
            },
            {
              "type": "SYMBOL",
              "name": "array_expression"
            },
            {
              "type": "SYMBOL",
              "name": "record_expression"
            },
            {
              "type": "SYMBOL",
              "name": "object_copy_expression"
            },
            {
              "type": "SYMBOL",
              "name": "package_expression"
            }
          ]
        }
      ]
    },
    "package_expression": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "module"
            },
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_attribute"
                },
                {
                  "type": "BLANK"
                }
              ]
            },
            {
              "type": "SYMBOL",
              "name": "_module_expression_ext"
            },
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_module_typed"
                },
                {
                  "type": "BLANK"
                }
              ]
            }
          ]
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "let_exception_expression": {
      "type": "PREC_RIGHT",
      "value": 2,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "let"
          },
          {
            "type": "SYMBOL",
            "name": "exception_definition"
          },
          {
            "type": "STRING",
            "value": "in"
          },
          {
            "type": "FIELD",
            "name": "body",
            "content": {
              "type": "SYMBOL",
              "name": "_sequence_expression_ext"
            }
          }
        ]
      }
    },
    "new_expression": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "new"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_attribute"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "class_path"
        }
      ]
    },
    "object_copy_expression": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "{<"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "instance_variable_expression"
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ";"
                      },
                      {
                        "type": "SYMBOL",
                        "name": "instance_variable_expression"
                      }
                    ]
                  }
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": ";"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": ">}"
        }
      ]
    },
    "instance_variable_expression": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_instance_variable_name"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": "="
                },
                {
                  "type": "SYMBOL",
                  "name": "_expression_ext"
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "method_invocation": {
      "type": "PREC_RIGHT",
      "value": 17,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_simple_expression_ext"
          },
          {
            "type": "STRING",
            "value": "#"
          },
          {
            "type": "SYMBOL",
            "name": "_method_name"
          }
        ]
      }
    },
    "object_expression": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "object"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_attribute"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": "("
                },
                {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "SYMBOL",
                      "name": "_pattern_ext"
                    },
                    {
                      "type": "CHOICE",
                      "members": [
                        {
                          "type": "SYMBOL",
                          "name": "_typed"
                        },
                        {
                          "type": "BLANK"
                        }
                      ]
                    }
                  ]
                },
                {
                  "type": "STRING",
                  "value": ")"
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "_class_field_ext"
              },
              {
                "type": "SYMBOL",
                "name": "floating_attribute"
              }
            ]
          }
        },
        {
          "type": "STRING",
          "value": "end"
        }
      ]
    },
    "parenthesized_expression": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "begin"
            },
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_attribute"
                },
                {
                  "type": "BLANK"
                }
              ]
            },
            {
              "type": "SYMBOL",
              "name": "_sequence_expression_ext"
            },
            {
              "type": "STRING",
              "value": "end"
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "("
            },
            {
              "type": "SYMBOL",
              "name": "_sequence_expression_ext"
            },
            {
              "type": "STRING",
              "value": ")"
            }
          ]
        }
      ]
    },
    "ocamlyacc_value": {
      "type": "PATTERN",
      "value": "\\$[0-9]+"
    },
    "_simple_pattern": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_value_pattern"
        },
        {
          "type": "SYMBOL",
          "name": "_signed_constant"
        },
        {
          "type": "SYMBOL",
          "name": "typed_pattern"
        },
        {
          "type": "SYMBOL",
          "name": "constructor_path"
        },
        {
          "type": "SYMBOL",
          "name": "tag"
        },
        {
          "type": "SYMBOL",
          "name": "polymorphic_variant_pattern"
        },
        {
          "type": "SYMBOL",
          "name": "record_pattern"
        },
        {
          "type": "SYMBOL",
          "name": "list_pattern"
        },
        {
          "type": "SYMBOL",
          "name": "array_pattern"
        },
        {
          "type": "SYMBOL",
          "name": "local_open_pattern"
        },
        {
          "type": "SYMBOL",
          "name": "package_pattern"
        },
        {
          "type": "SYMBOL",
          "name": "parenthesized_pattern"
        }
      ]
    },
    "_simple_pattern_ext": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_simple_pattern"
        },
        {
          "type": "SYMBOL",
          "name": "_extension"
        }
      ]
    },
    "_pattern": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_simple_pattern"
        },
        {
          "type": "SYMBOL",
          "name": "alias_pattern"
        },
        {
          "type": "SYMBOL",
          "name": "or_pattern"
        },
        {
          "type": "SYMBOL",
          "name": "constructor_pattern"
        },
        {
          "type": "SYMBOL",
          "name": "tag_pattern"
        },
        {
          "type": "SYMBOL",
          "name": "tuple_pattern"
        },
        {
          "type": "SYMBOL",
          "name": "cons_pattern"
        },
        {
          "type": "SYMBOL",
          "name": "range_pattern"
        },
        {
          "type": "SYMBOL",
          "name": "lazy_pattern"
        },
        {
          "type": "SYMBOL",
          "name": "exception_pattern"
        }
      ]
    },
    "_pattern_ext": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_pattern"
        },
        {
          "type": "SYMBOL",
          "name": "_extension"
        }
      ]
    },
    "_binding_pattern": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_value_name"
        },
        {
          "type": "SYMBOL",
          "name": "_signed_constant"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "typed_binding_pattern"
          },
          "named": true,
          "value": "typed_pattern"
        },
        {
          "type": "SYMBOL",
          "name": "constructor_path"
        },
        {
          "type": "SYMBOL",
          "name": "tag"
        },
        {
          "type": "SYMBOL",
          "name": "polymorphic_variant_pattern"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "record_binding_pattern"
          },
          "named": true,
          "value": "record_pattern"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "list_binding_pattern"
          },
          "named": true,
          "value": "list_pattern"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "array_binding_pattern"
          },
          "named": true,
          "value": "array_pattern"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "local_open_binding_pattern"
          },
          "named": true,
          "value": "local_open_pattern"
        },
        {
          "type": "SYMBOL",
          "name": "package_pattern"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "parenthesized_binding_pattern"
          },
          "named": true,
          "value": "parenthesized_pattern"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "alias_binding_pattern"
          },
          "named": true,
          "value": "alias_pattern"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "or_binding_pattern"
          },
          "named": true,
          "value": "or_pattern"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "constructor_binding_pattern"
          },
          "named": true,
          "value": "constructor_pattern"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "tag_binding_pattern"
          },
          "named": true,
          "value": "tag_pattern"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "tuple_binding_pattern"
          },
          "named": true,
          "value": "tuple_pattern"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "cons_binding_pattern"
          },
          "named": true,
          "value": "cons_pattern"
        },
        {
          "type": "SYMBOL",
          "name": "range_pattern"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "lazy_binding_pattern"
          },
          "named": true,
          "value": "lazy_pattern"
        }
      ]
    },
    "_binding_pattern_ext": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_binding_pattern"
        },
        {
          "type": "SYMBOL",
          "name": "_extension"
        }
      ]
    },
    "alias_pattern": {
      "type": "PREC_LEFT",
      "value": 2,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_pattern_ext"
          },
          {
            "type": "STRING",
            "value": "as"
          },
          {
            "type": "SYMBOL",
            "name": "_value_pattern"
          }
        ]
      }
    },
    "alias_binding_pattern": {
      "type": "PREC_LEFT",
      "value": 2,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_binding_pattern_ext"
          },
          {
            "type": "STRING",
            "value": "as"
          },
          {
            "type": "SYMBOL",
            "name": "_value_name"
          }
        ]
      }
    },
    "typed_pattern": {
      "type": "SEQ",
      "members": [
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "("
            },
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_pattern_ext"
                },
                {
                  "type": "SYMBOL",
                  "name": "_typed"
                }
              ]
            },
            {
              "type": "STRING",
              "value": ")"
            }
          ]
        }
      ]
    },
    "typed_binding_pattern": {
      "type": "SEQ",
      "members": [
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "("
            },
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "FIELD",
                  "name": "pattern",
                  "content": {
                    "type": "SYMBOL",
                    "name": "_binding_pattern_ext"
                  }
                },
                {
                  "type": "SYMBOL",
                  "name": "_typed"
                }
              ]
            },
            {
              "type": "STRING",
              "value": ")"
            }
          ]
        }
      ]
    },
    "or_pattern": {
      "type": "PREC_LEFT",
      "value": 3,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_pattern_ext"
          },
          {
            "type": "STRING",
            "value": "|"
          },
          {
            "type": "SYMBOL",
            "name": "_pattern_ext"
          }
        ]
      }
    },
    "or_binding_pattern": {
      "type": "PREC_LEFT",
      "value": 3,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_binding_pattern_ext"
          },
          {
            "type": "STRING",
            "value": "|"
          },
          {
            "type": "SYMBOL",
            "name": "_binding_pattern_ext"
          }
        ]
      }
    },
    "constructor_pattern": {
      "type": "PREC_RIGHT",
      "value": 16,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "constructor_path"
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "ALIAS",
                "content": {
                  "type": "SYMBOL",
                  "name": "_parenthesized_abstract_type"
                },
                "named": true,
                "value": "abstract_type"
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "SYMBOL",
            "name": "_pattern_ext"
          }
        ]
      }
    },
    "constructor_binding_pattern": {
      "type": "PREC_RIGHT",
      "value": 16,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "constructor_path"
          },
          {
            "type": "FIELD",
            "name": "pattern",
            "content": {
              "type": "SYMBOL",
              "name": "_binding_pattern_ext"
            }
          }
        ]
      }
    },
    "tag_pattern": {
      "type": "PREC_RIGHT",
      "value": 16,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "tag"
          },
          {
            "type": "SYMBOL",
            "name": "_pattern_ext"
          }
        ]
      }
    },
    "tag_binding_pattern": {
      "type": "PREC_RIGHT",
      "value": 16,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "tag"
          },
          {
            "type": "FIELD",
            "name": "pattern",
            "content": {
              "type": "SYMBOL",
              "name": "_binding_pattern_ext"
            }
          }
        ]
      }
    },
    "polymorphic_variant_pattern": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "#"
        },
        {
          "type": "SYMBOL",
          "name": "type_constructor_path"
        }
      ]
    },
    "tuple_pattern": {
      "type": "PREC_LEFT",
      "value": 6,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_pattern_ext"
          },
          {
            "type": "STRING",
            "value": ","
          },
          {
            "type": "SYMBOL",
            "name": "_pattern_ext"
          }
        ]
      }
    },
    "tuple_binding_pattern": {
      "type": "PREC_LEFT",
      "value": 6,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_binding_pattern_ext"
          },
          {
            "type": "STRING",
            "value": ","
          },
          {
            "type": "SYMBOL",
            "name": "_binding_pattern_ext"
          }
        ]
      }
    },
    "record_pattern": {
      "type": "PREC_LEFT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "{"
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "SYMBOL",
                "name": "field_pattern"
              },
              {
                "type": "REPEAT",
                "content": {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "STRING",
                      "value": ";"
                    },
                    {
                      "type": "SYMBOL",
                      "name": "field_pattern"
                    }
                  ]
                }
              }
            ]
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": ";"
                  },
                  {
                    "type": "STRING",
                    "value": "_"
                  }
                ]
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "STRING",
                "value": ";"
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "STRING",
            "value": "}"
          }
        ]
      }
    },
    "field_pattern": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "field_path"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_typed"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": "="
                },
                {
                  "type": "SYMBOL",
                  "name": "_pattern_ext"
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "record_binding_pattern": {
      "type": "PREC_LEFT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "{"
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "ALIAS",
                "content": {
                  "type": "SYMBOL",
                  "name": "field_binding_pattern"
                },
                "named": true,
                "value": "field_pattern"
              },
              {
                "type": "REPEAT",
                "content": {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "STRING",
                      "value": ";"
                    },
                    {
                      "type": "ALIAS",
                      "content": {
                        "type": "SYMBOL",
                        "name": "field_binding_pattern"
                      },
                      "named": true,
                      "value": "field_pattern"
                    }
                  ]
                }
              }
            ]
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": ";"
                  },
                  {
                    "type": "STRING",
                    "value": "_"
                  }
                ]
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "STRING",
                "value": ";"
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "STRING",
            "value": "}"
          }
        ]
      }
    },
    "field_binding_pattern": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "field_path"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_typed"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": "="
                },
                {
                  "type": "FIELD",
                  "name": "pattern",
                  "content": {
                    "type": "SYMBOL",
                    "name": "_binding_pattern_ext"
                  }
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "list_pattern": {
      "type": "PREC_LEFT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "["
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "SYMBOL",
                        "name": "_pattern_ext"
                      },
                      {
                        "type": "REPEAT",
                        "content": {
                          "type": "SEQ",
                          "members": [
                            {
                              "type": "STRING",
                              "value": ";"
                            },
                            {
                              "type": "SYMBOL",
                              "name": "_pattern_ext"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  {
                    "type": "CHOICE",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ";"
                      },
                      {
                        "type": "BLANK"
                      }
                    ]
                  }
                ]
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "STRING",
            "value": "]"
          }
        ]
      }
    },
    "list_binding_pattern": {
      "type": "PREC_LEFT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "["
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "SYMBOL",
                        "name": "_binding_pattern_ext"
                      },
                      {
                        "type": "REPEAT",
                        "content": {
                          "type": "SEQ",
                          "members": [
                            {
                              "type": "STRING",
                              "value": ";"
                            },
                            {
                              "type": "SYMBOL",
                              "name": "_binding_pattern_ext"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  {
                    "type": "CHOICE",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ";"
                      },
                      {
                        "type": "BLANK"
                      }
                    ]
                  }
                ]
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "STRING",
            "value": "]"
          }
        ]
      }
    },
    "cons_pattern": {
      "type": "PREC_RIGHT",
      "value": 11,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_pattern_ext"
          },
          {
            "type": "STRING",
            "value": "::"
          },
          {
            "type": "SYMBOL",
            "name": "_pattern_ext"
          }
        ]
      }
    },
    "cons_binding_pattern": {
      "type": "PREC_RIGHT",
      "value": 11,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_binding_pattern_ext"
          },
          {
            "type": "STRING",
            "value": "::"
          },
          {
            "type": "SYMBOL",
            "name": "_binding_pattern_ext"
          }
        ]
      }
    },
    "array_pattern": {
      "type": "PREC_LEFT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "[|"
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "SYMBOL",
                        "name": "_pattern_ext"
                      },
                      {
                        "type": "REPEAT",
                        "content": {
                          "type": "SEQ",
                          "members": [
                            {
                              "type": "STRING",
                              "value": ";"
                            },
                            {
                              "type": "SYMBOL",
                              "name": "_pattern_ext"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  {
                    "type": "CHOICE",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ";"
                      },
                      {
                        "type": "BLANK"
                      }
                    ]
                  }
                ]
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "STRING",
            "value": "|]"
          }
        ]
      }
    },
    "array_binding_pattern": {
      "type": "PREC_LEFT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "[|"
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "SYMBOL",
                        "name": "_binding_pattern_ext"
                      },
                      {
                        "type": "REPEAT",
                        "content": {
                          "type": "SEQ",
                          "members": [
                            {
                              "type": "STRING",
                              "value": ";"
                            },
                            {
                              "type": "SYMBOL",
                              "name": "_binding_pattern_ext"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  {
                    "type": "CHOICE",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ";"
                      },
                      {
                        "type": "BLANK"
                      }
                    ]
                  }
                ]
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "STRING",
            "value": "|]"
          }
        ]
      }
    },
    "range_pattern": {
      "type": "PREC",
      "value": 18,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_signed_constant"
          },
          {
            "type": "STRING",
            "value": ".."
          },
          {
            "type": "SYMBOL",
            "name": "_signed_constant"
          }
        ]
      }
    },
    "lazy_pattern": {
      "type": "PREC",
      "value": 17,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "lazy"
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "_attribute"
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "SYMBOL",
            "name": "_pattern_ext"
          }
        ]
      }
    },
    "lazy_binding_pattern": {
      "type": "PREC",
      "value": 17,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "lazy"
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "_attribute"
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "SYMBOL",
            "name": "_binding_pattern_ext"
          }
        ]
      }
    },
    "local_open_pattern": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "module_path"
        },
        {
          "type": "STRING",
          "value": "."
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": "("
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "SYMBOL",
                      "name": "_pattern_ext"
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                },
                {
                  "type": "STRING",
                  "value": ")"
                }
              ]
            },
            {
              "type": "SYMBOL",
              "name": "list_pattern"
            },
            {
              "type": "SYMBOL",
              "name": "array_pattern"
            },
            {
              "type": "SYMBOL",
              "name": "record_pattern"
            }
          ]
        }
      ]
    },
    "local_open_binding_pattern": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "module_path"
        },
        {
          "type": "STRING",
          "value": "."
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": "("
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "SYMBOL",
                      "name": "_binding_pattern_ext"
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                },
                {
                  "type": "STRING",
                  "value": ")"
                }
              ]
            },
            {
              "type": "SYMBOL",
              "name": "list_binding_pattern"
            },
            {
              "type": "SYMBOL",
              "name": "array_binding_pattern"
            },
            {
              "type": "SYMBOL",
              "name": "record_binding_pattern"
            }
          ]
        }
      ]
    },
    "package_pattern": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "module"
            },
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_attribute"
                },
                {
                  "type": "BLANK"
                }
              ]
            },
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_module_name"
                },
                {
                  "type": "ALIAS",
                  "content": {
                    "type": "STRING",
                    "value": "_"
                  },
                  "named": true,
                  "value": "module_name"
                }
              ]
            },
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_module_typed"
                },
                {
                  "type": "BLANK"
                }
              ]
            }
          ]
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "parenthesized_pattern": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "SYMBOL",
          "name": "_pattern_ext"
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "parenthesized_binding_pattern": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "SYMBOL",
          "name": "_binding_pattern_ext"
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "exception_pattern": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "exception"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_attribute"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "_pattern_ext"
        }
      ]
    },
    "attribute": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "[@"
        },
        {
          "type": "SYMBOL",
          "name": "attribute_id"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "attribute_payload"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "]"
        }
      ]
    },
    "item_attribute": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "[@@"
        },
        {
          "type": "SYMBOL",
          "name": "attribute_id"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "attribute_payload"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "]"
        }
      ]
    },
    "floating_attribute": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "[@@@"
        },
        {
          "type": "SYMBOL",
          "name": "attribute_id"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "attribute_payload"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "]"
        }
      ]
    },
    "attribute_payload": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_structure"
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": ":"
            },
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_type_ext"
                },
                {
                  "type": "SYMBOL",
                  "name": "_signature"
                }
              ]
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "?"
            },
            {
              "type": "SYMBOL",
              "name": "_pattern_ext"
            },
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "guard"
                },
                {
                  "type": "BLANK"
                }
              ]
            }
          ]
        }
      ]
    },
    "_extension": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "extension"
        },
        {
          "type": "SYMBOL",
          "name": "quoted_extension"
        }
      ]
    },
    "extension": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "[%"
        },
        {
          "type": "SYMBOL",
          "name": "attribute_id"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "attribute_payload"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "]"
        }
      ]
    },
    "quoted_extension": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "{%"
        },
        {
          "type": "SYMBOL",
          "name": "attribute_id"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "PATTERN",
              "value": "\\s+"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "_quoted_string"
        },
        {
          "type": "STRING",
          "value": "}"
        }
      ]
    },
    "_item_extension": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "item_extension"
        },
        {
          "type": "SYMBOL",
          "name": "quoted_item_extension"
        }
      ]
    },
    "item_extension": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "[%%"
        },
        {
          "type": "SYMBOL",
          "name": "attribute_id"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "attribute_payload"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "]"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "item_attribute"
          }
        }
      ]
    },
    "quoted_item_extension": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "{%%"
        },
        {
          "type": "SYMBOL",
          "name": "attribute_id"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "PATTERN",
              "value": "\\s+"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "_quoted_string"
        },
        {
          "type": "STRING",
          "value": "}"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "item_attribute"
          }
        }
      ]
    },
    "_attribute": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "%"
        },
        {
          "type": "SYMBOL",
          "name": "attribute_id"
        }
      ]
    },
    "_constant": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "number"
        },
        {
          "type": "SYMBOL",
          "name": "character"
        },
        {
          "type": "SYMBOL",
          "name": "string"
        },
        {
          "type": "SYMBOL",
          "name": "quoted_string"
        },
        {
          "type": "SYMBOL",
          "name": "boolean"
        },
        {
          "type": "SYMBOL",
          "name": "unit"
        }
      ]
    },
    "_signed_constant": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_constant"
        },
        {
          "type": "SYMBOL",
          "name": "signed_number"
        }
      ]
    },
    "number": {
      "type": "TOKEN",
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "PATTERN",
            "value": "[0-9][0-9_]*(\\.[0-9_]*)?([eE][+\\-]?[0-9][0-9_]*)?[g-zG-Z]?"
          },
          {
            "type": "PATTERN",
            "value": "0[xX][0-9A-Fa-f][0-9A-Fa-f_]*(\\.[0-9A-Fa-f_]*)?([pP][+\\-]?[0-9][0-9_]*)?[g-zG-Z]?"
          },
          {
            "type": "PATTERN",
            "value": "0[oO][0-7][0-7_]*[g-zG-Z]?"
          },
          {
            "type": "PATTERN",
            "value": "0[bB][01][01_]*[g-zG-Z]?"
          }
        ]
      }
    },
    "signed_number": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "+"
            },
            {
              "type": "STRING",
              "value": "-"
            }
          ]
        },
        {
          "type": "TOKEN",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "PATTERN",
                "value": "[0-9][0-9_]*(\\.[0-9_]*)?([eE][+\\-]?[0-9][0-9_]*)?[g-zG-Z]?"
              },
              {
                "type": "PATTERN",
                "value": "0[xX][0-9A-Fa-f][0-9A-Fa-f_]*(\\.[0-9A-Fa-f_]*)?([pP][+\\-]?[0-9][0-9_]*)?[g-zG-Z]?"
              },
              {
                "type": "PATTERN",
                "value": "0[oO][0-7][0-7_]*[g-zG-Z]?"
              },
              {
                "type": "PATTERN",
                "value": "0[bB][01][01_]*[g-zG-Z]?"
              }
            ]
          }
        }
      ]
    },
    "character": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "'"
        },
        {
          "type": "SYMBOL",
          "name": "character_content"
        },
        {
          "type": "STRING",
          "value": "'"
        }
      ]
    },
    "character_content": {
      "type": "CHOICE",
      "members": [
        {
          "type": "PATTERN",
          "value": "[^\\\\']"
        },
        {
          "type": "SYMBOL",
          "name": "_null"
        },
        {
          "type": "SYMBOL",
          "name": "escape_sequence"
        }
      ]
    },
    "string": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "\""
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "string_content"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "\""
        }
      ]
    },
    "string_content": {
      "type": "REPEAT1",
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "IMMEDIATE_TOKEN",
            "content": {
              "type": "STRING",
              "value": " "
            }
          },
          {
            "type": "IMMEDIATE_TOKEN",
            "content": {
              "type": "STRING",
              "value": "\n"
            }
          },
          {
            "type": "IMMEDIATE_TOKEN",
            "content": {
              "type": "STRING",
              "value": "\t"
            }
          },
          {
            "type": "IMMEDIATE_TOKEN",
            "content": {
              "type": "STRING",
              "value": "[@"
            }
          },
          {
            "type": "IMMEDIATE_TOKEN",
            "content": {
              "type": "STRING",
              "value": "[@@"
            }
          },
          {
            "type": "IMMEDIATE_TOKEN",
            "content": {
              "type": "STRING",
              "value": "[@@@"
            }
          },
          {
            "type": "PATTERN",
            "value": "[^\\\\\"%@]+|%|@"
          },
          {
            "type": "SYMBOL",
            "name": "_null"
          },
          {
            "type": "SYMBOL",
            "name": "escape_sequence"
          },
          {
            "type": "ALIAS",
            "content": {
              "type": "PATTERN",
              "value": "\\\\u\\{[0-9A-Fa-f]+\\}"
            },
            "named": true,
            "value": "escape_sequence"
          },
          {
            "type": "ALIAS",
            "content": {
              "type": "PATTERN",
              "value": "\\\\\\n[\\t ]*"
            },
            "named": true,
            "value": "escape_sequence"
          },
          {
            "type": "SYMBOL",
            "name": "conversion_specification"
          },
          {
            "type": "SYMBOL",
            "name": "pretty_printing_indication"
          }
        ]
      }
    },
    "quoted_string": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "{"
        },
        {
          "type": "SYMBOL",
          "name": "_quoted_string"
        },
        {
          "type": "STRING",
          "value": "}"
        }
      ]
    },
    "_quoted_string": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_left_quoted_string_delimiter"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "quoted_string_content"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "_right_quoted_string_delimiter"
        }
      ]
    },
    "quoted_string_content": {
      "type": "REPEAT1",
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "IMMEDIATE_TOKEN",
            "content": {
              "type": "STRING",
              "value": " "
            }
          },
          {
            "type": "IMMEDIATE_TOKEN",
            "content": {
              "type": "STRING",
              "value": "\n"
            }
          },
          {
            "type": "IMMEDIATE_TOKEN",
            "content": {
              "type": "STRING",
              "value": "\t"
            }
          },
          {
            "type": "IMMEDIATE_TOKEN",
            "content": {
              "type": "STRING",
              "value": "[@"
            }
          },
          {
            "type": "IMMEDIATE_TOKEN",
            "content": {
              "type": "STRING",
              "value": "[@@"
            }
          },
          {
            "type": "IMMEDIATE_TOKEN",
            "content": {
              "type": "STRING",
              "value": "[@@@"
            }
          },
          {
            "type": "PATTERN",
            "value": "[^%@|]+|%|@|\\|"
          },
          {
            "type": "SYMBOL",
            "name": "_null"
          },
          {
            "type": "SYMBOL",
            "name": "conversion_specification"
          },
          {
            "type": "SYMBOL",
            "name": "pretty_printing_indication"
          }
        ]
      }
    },
    "escape_sequence": {
      "type": "CHOICE",
      "members": [
        {
          "type": "PATTERN",
          "value": "\\\\[\\\\\"'ntbr ]"
        },
        {
          "type": "PATTERN",
          "value": "\\\\[0-9][0-9][0-9]"
        },
        {
          "type": "PATTERN",
          "value": "\\\\x[0-9A-Fa-f][0-9A-Fa-f]"
        },
        {
          "type": "PATTERN",
          "value": "\\\\o[0-3][0-7][0-7]"
        }
      ]
    },
    "conversion_specification": {
      "type": "TOKEN",
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "%"
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "PATTERN",
                "value": "[\\-0+ #]"
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "PATTERN",
                "value": "[1-9][0-9]*|\\*"
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "PATTERN",
                "value": "\\.([0-9]*|\\*)"
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "PATTERN",
                "value": "[diunlLNxXosScCfFeEgGhHbBat!%@,]"
              },
              {
                "type": "PATTERN",
                "value": "[lnL][diuxXo]"
              }
            ]
          }
        ]
      }
    },
    "pretty_printing_indication": {
      "type": "PATTERN",
      "value": "@([\\[\\], ;.{}?]|\\\\n|<[0-9]+>)"
    },
    "boolean": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "true"
        },
        {
          "type": "STRING",
          "value": "false"
        }
      ]
    },
    "unit": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "("
            },
            {
              "type": "STRING",
              "value": ")"
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "begin"
            },
            {
              "type": "STRING",
              "value": "end"
            }
          ]
        }
      ]
    },
    "prefix_operator": {
      "type": "TOKEN",
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": "!"
              },
              {
                "type": "CHOICE",
                "members": [
                  {
                    "type": "CHOICE",
                    "members": [
                      {
                        "type": "PATTERN",
                        "value": "[#!$%&*+\\-.\\/:<>?@^|~]"
                      },
                      {
                        "type": "BLANK"
                      }
                    ]
                  },
                  {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "PATTERN",
                        "value": "[#!$%&*+\\-.\\/:<=>?@^|~]"
                      },
                      {
                        "type": "REPEAT1",
                        "content": {
                          "type": "PATTERN",
                          "value": "[#!$%&*+\\-.\\/:<=>?@^|~]"
                        }
                      }
                    ]
                  }
                ]
              }
            ]
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "PATTERN",
                "value": "[~?]"
              },
              {
                "type": "REPEAT1",
                "content": {
                  "type": "PATTERN",
                  "value": "[#!$%&*+\\-.\\/:<=>?@^|~]"
                }
              }
            ]
          }
        ]
      }
    },
    "sign_operator": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "+"
        },
        {
          "type": "STRING",
          "value": "-"
        },
        {
          "type": "STRING",
          "value": "+."
        },
        {
          "type": "STRING",
          "value": "-."
        }
      ]
    },
    "infix_operator": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_pow_operator"
        },
        {
          "type": "SYMBOL",
          "name": "_mult_operator"
        },
        {
          "type": "SYMBOL",
          "name": "_add_operator"
        },
        {
          "type": "SYMBOL",
          "name": "_concat_operator"
        },
        {
          "type": "SYMBOL",
          "name": "_rel_operator"
        },
        {
          "type": "SYMBOL",
          "name": "_and_operator"
        },
        {
          "type": "SYMBOL",
          "name": "_or_operator"
        },
        {
          "type": "SYMBOL",
          "name": "_assign_operator"
        }
      ]
    },
    "hash_operator": {
      "type": "TOKEN",
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "#"
          },
          {
            "type": "REPEAT1",
            "content": {
              "type": "PATTERN",
              "value": "[#!$%&*+\\-.\\/:<=>?@^|~]"
            }
          }
        ]
      }
    },
    "_pow_operator": {
      "type": "CHOICE",
      "members": [
        {
          "type": "TOKEN",
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": "**"
              },
              {
                "type": "REPEAT",
                "content": {
                  "type": "PATTERN",
                  "value": "[!$%&*+\\-.\\/:<=>?@^|~]"
                }
              }
            ]
          }
        },
        {
          "type": "STRING",
          "value": "lsl"
        },
        {
          "type": "STRING",
          "value": "lsr"
        },
        {
          "type": "STRING",
          "value": "asr"
        }
      ]
    },
    "_mult_operator": {
      "type": "CHOICE",
      "members": [
        {
          "type": "TOKEN",
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "PATTERN",
                "value": "[*\\/%]"
              },
              {
                "type": "REPEAT",
                "content": {
                  "type": "PATTERN",
                  "value": "[!$%&*+\\-.\\/:<=>?@^|~]"
                }
              }
            ]
          }
        },
        {
          "type": "STRING",
          "value": "mod"
        },
        {
          "type": "STRING",
          "value": "land"
        },
        {
          "type": "STRING",
          "value": "lor"
        },
        {
          "type": "STRING",
          "value": "lxor"
        }
      ]
    },
    "_add_operator": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "+"
        },
        {
          "type": "STRING",
          "value": "-"
        },
        {
          "type": "STRING",
          "value": "+."
        },
        {
          "type": "STRING",
          "value": "-."
        },
        {
          "type": "TOKEN",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": "+"
                  },
                  {
                    "type": "REPEAT1",
                    "content": {
                      "type": "PATTERN",
                      "value": "[!$%&*+\\-.\\/:<=>?@^|~]"
                    }
                  }
                ]
              },
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": "-"
                  },
                  {
                    "type": "CHOICE",
                    "members": [
                      {
                        "type": "REPEAT1",
                        "content": {
                          "type": "PATTERN",
                          "value": "[!$%&*+\\-.\\/:<=?@^|~]"
                        }
                      },
                      {
                        "type": "SEQ",
                        "members": [
                          {
                            "type": "PATTERN",
                            "value": "[!$%&*+\\-.\\/:<=>?@^|~]"
                          },
                          {
                            "type": "REPEAT1",
                            "content": {
                              "type": "PATTERN",
                              "value": "[!$%&*+\\-.\\/:<=>?@^|~]"
                            }
                          }
                        ]
                      }
                    ]
                  }
                ]
              }
            ]
          }
        }
      ]
    },
    "_concat_operator": {
      "type": "TOKEN",
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "PATTERN",
            "value": "[@^]"
          },
          {
            "type": "REPEAT",
            "content": {
              "type": "PATTERN",
              "value": "[!$%&*+\\-.\\/:<=>?@^|~]"
            }
          }
        ]
      }
    },
    "_rel_operator": {
      "type": "TOKEN",
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "SEQ",
            "members": [
              {
                "type": "PATTERN",
                "value": "[=>$]"
              },
              {
                "type": "REPEAT",
                "content": {
                  "type": "PATTERN",
                  "value": "[!$%&*+\\-.\\/:<=>?@^|~]"
                }
              }
            ]
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": "<"
              },
              {
                "type": "CHOICE",
                "members": [
                  {
                    "type": "CHOICE",
                    "members": [
                      {
                        "type": "PATTERN",
                        "value": "[!$%&*+.\\/:<=>?@^|~]"
                      },
                      {
                        "type": "BLANK"
                      }
                    ]
                  },
                  {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "PATTERN",
                        "value": "[!$%&*+\\-.\\/:<=>?@^|~]"
                      },
                      {
                        "type": "REPEAT1",
                        "content": {
                          "type": "PATTERN",
                          "value": "[!$%&*+\\-.\\/:<=>?@^|~]"
                        }
                      }
                    ]
                  }
                ]
              }
            ]
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": "&"
              },
              {
                "type": "CHOICE",
                "members": [
                  {
                    "type": "PATTERN",
                    "value": "[!$%*+\\-.\\/:<=>?@^|~]"
                  },
                  {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "PATTERN",
                        "value": "[!$%&*+\\-.\\/:<=>?@^|~]"
                      },
                      {
                        "type": "REPEAT1",
                        "content": {
                          "type": "PATTERN",
                          "value": "[!$%&*+\\-.\\/:<=>?@^|~]"
                        }
                      }
                    ]
                  }
                ]
              }
            ]
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": "|"
              },
              {
                "type": "CHOICE",
                "members": [
                  {
                    "type": "PATTERN",
                    "value": "[!$%&*+\\-.\\/:<=>?@^~]"
                  },
                  {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "PATTERN",
                        "value": "[!$%&*+\\-.\\/:<=>?@^|~]"
                      },
                      {
                        "type": "REPEAT1",
                        "content": {
                          "type": "PATTERN",
                          "value": "[!$%&*+\\-.\\/:<=>?@^|~]"
                        }
                      }
                    ]
                  }
                ]
              }
            ]
          },
          {
            "type": "STRING",
            "value": "!="
          }
        ]
      }
    },
    "_and_operator": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "&"
        },
        {
          "type": "STRING",
          "value": "&&"
        }
      ]
    },
    "_or_operator": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "or"
        },
        {
          "type": "STRING",
          "value": "||"
        }
      ]
    },
    "_assign_operator": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": ":="
        }
      ]
    },
    "indexing_operator": {
      "type": "TOKEN",
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "PATTERN",
            "value": "[!$%&*+\\-\\/:=>?@^|]"
          },
          {
            "type": "REPEAT",
            "content": {
              "type": "PATTERN",
              "value": "[!$%&*+\\-.\\/:<=>?@^|~]"
            }
          }
        ]
      }
    },
    "indexing_operator_path": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "indexing_operator"
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "module_path"
            },
            {
              "type": "STRING",
              "value": "."
            },
            {
              "type": "SYMBOL",
              "name": "indexing_operator"
            }
          ]
        }
      ]
    },
    "let_operator": {
      "type": "TOKEN",
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "let"
          },
          {
            "type": "PATTERN",
            "value": "[$&*+\\-\\/<=>@^|]"
          },
          {
            "type": "REPEAT",
            "content": {
              "type": "PATTERN",
              "value": "[!$%&*+\\-.\\/:<=>?@^|~]"
            }
          }
        ]
      }
    },
    "and_operator": {
      "type": "TOKEN",
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "and"
          },
          {
            "type": "PATTERN",
            "value": "[$&*+\\-\\/<=>@^|]"
          },
          {
            "type": "REPEAT",
            "content": {
              "type": "PATTERN",
              "value": "[!$%&*+\\-.\\/:<=>?@^|~]"
            }
          }
        ]
      }
    },
    "match_operator": {
      "type": "TOKEN",
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "match"
          },
          {
            "type": "PATTERN",
            "value": "[$&*+\\-\\/<=>@^|]"
          },
          {
            "type": "REPEAT",
            "content": {
              "type": "PATTERN",
              "value": "[!$%&*+\\-.\\/:<=>?@^|~]"
            }
          }
        ]
      }
    },
    "_value_name": {
      "type": "CHOICE",
      "members": [
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "_identifier"
          },
          "named": true,
          "value": "value_name"
        },
        {
          "type": "SYMBOL",
          "name": "parenthesized_operator"
        }
      ]
    },
    "_value_pattern": {
      "type": "CHOICE",
      "members": [
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "_identifier"
          },
          "named": true,
          "value": "value_pattern"
        },
        {
          "type": "SYMBOL",
          "name": "parenthesized_operator"
        }
      ]
    },
    "parenthesized_operator": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "prefix_operator"
            },
            {
              "type": "SYMBOL",
              "name": "infix_operator"
            },
            {
              "type": "SYMBOL",
              "name": "hash_operator"
            },
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": "."
                },
                {
                  "type": "SYMBOL",
                  "name": "indexing_operator"
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "SEQ",
                      "members": [
                        {
                          "type": "STRING",
                          "value": "("
                        },
                        {
                          "type": "CHOICE",
                          "members": [
                            {
                              "type": "SEQ",
                              "members": [
                                {
                                  "type": "STRING",
                                  "value": ";"
                                },
                                {
                                  "type": "STRING",
                                  "value": ".."
                                }
                              ]
                            },
                            {
                              "type": "BLANK"
                            }
                          ]
                        },
                        {
                          "type": "STRING",
                          "value": ")"
                        }
                      ]
                    },
                    {
                      "type": "SEQ",
                      "members": [
                        {
                          "type": "STRING",
                          "value": "["
                        },
                        {
                          "type": "CHOICE",
                          "members": [
                            {
                              "type": "SEQ",
                              "members": [
                                {
                                  "type": "STRING",
                                  "value": ";"
                                },
                                {
                                  "type": "STRING",
                                  "value": ".."
                                }
                              ]
                            },
                            {
                              "type": "BLANK"
                            }
                          ]
                        },
                        {
                          "type": "STRING",
                          "value": "]"
                        }
                      ]
                    },
                    {
                      "type": "SEQ",
                      "members": [
                        {
                          "type": "STRING",
                          "value": "{"
                        },
                        {
                          "type": "CHOICE",
                          "members": [
                            {
                              "type": "SEQ",
                              "members": [
                                {
                                  "type": "STRING",
                                  "value": ";"
                                },
                                {
                                  "type": "STRING",
                                  "value": ".."
                                }
                              ]
                            },
                            {
                              "type": "BLANK"
                            }
                          ]
                        },
                        {
                          "type": "STRING",
                          "value": "}"
                        }
                      ]
                    }
                  ]
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "STRING",
                      "value": "<-"
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                }
              ]
            },
            {
              "type": "SYMBOL",
              "name": "let_operator"
            },
            {
              "type": "SYMBOL",
              "name": "and_operator"
            },
            {
              "type": "SYMBOL",
              "name": "match_operator"
            }
          ]
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "value_path": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_value_name"
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "module_path"
            },
            {
              "type": "STRING",
              "value": "."
            },
            {
              "type": "SYMBOL",
              "name": "_value_name"
            }
          ]
        }
      ]
    },
    "module_path": {
      "type": "PREC",
      "value": 1,
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_module_name"
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "SYMBOL",
                "name": "module_path"
              },
              {
                "type": "STRING",
                "value": "."
              },
              {
                "type": "SYMBOL",
                "name": "_module_name"
              }
            ]
          }
        ]
      }
    },
    "extended_module_path": {
      "type": "CHOICE",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_module_name"
            },
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "extended_module_path"
                },
                {
                  "type": "STRING",
                  "value": "."
                },
                {
                  "type": "SYMBOL",
                  "name": "_module_name"
                }
              ]
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "extended_module_path"
            },
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": "("
                },
                {
                  "type": "SYMBOL",
                  "name": "extended_module_path"
                },
                {
                  "type": "STRING",
                  "value": ")"
                }
              ]
            }
          ]
        }
      ]
    },
    "module_type_path": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_module_type_name"
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "extended_module_path"
            },
            {
              "type": "STRING",
              "value": "."
            },
            {
              "type": "SYMBOL",
              "name": "_module_type_name"
            }
          ]
        }
      ]
    },
    "field_path": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_field_name"
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "module_path"
            },
            {
              "type": "STRING",
              "value": "."
            },
            {
              "type": "SYMBOL",
              "name": "_field_name"
            }
          ]
        }
      ]
    },
    "constructor_path": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_constructor_name"
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "module_path"
            },
            {
              "type": "STRING",
              "value": "."
            },
            {
              "type": "SYMBOL",
              "name": "_constructor_name"
            }
          ]
        }
      ]
    },
    "type_constructor_path": {
      "type": "PREC",
      "value": 1,
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_type_constructor"
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "SYMBOL",
                "name": "extended_module_path"
              },
              {
                "type": "STRING",
                "value": "."
              },
              {
                "type": "SYMBOL",
                "name": "_type_constructor"
              }
            ]
          }
        ]
      }
    },
    "class_path": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_class_name"
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "module_path"
            },
            {
              "type": "STRING",
              "value": "."
            },
            {
              "type": "SYMBOL",
              "name": "_class_name"
            }
          ]
        }
      ]
    },
    "class_type_path": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_class_type_name"
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "extended_module_path"
            },
            {
              "type": "STRING",
              "value": "."
            },
            {
              "type": "SYMBOL",
              "name": "_class_type_name"
            }
          ]
        }
      ]
    },
    "_label_name": {
      "type": "ALIAS",
      "content": {
        "type": "SYMBOL",
        "name": "_identifier"
      },
      "named": true,
      "value": "label_name"
    },
    "_field_name": {
      "type": "ALIAS",
      "content": {
        "type": "SYMBOL",
        "name": "_identifier"
      },
      "named": true,
      "value": "field_name"
    },
    "_class_name": {
      "type": "ALIAS",
      "content": {
        "type": "SYMBOL",
        "name": "_identifier"
      },
      "named": true,
      "value": "class_name"
    },
    "_class_type_name": {
      "type": "ALIAS",
      "content": {
        "type": "SYMBOL",
        "name": "_identifier"
      },
      "named": true,
      "value": "class_type_name"
    },
    "_method_name": {
      "type": "ALIAS",
      "content": {
        "type": "SYMBOL",
        "name": "_identifier"
      },
      "named": true,
      "value": "method_name"
    },
    "_type_constructor": {
      "type": "ALIAS",
      "content": {
        "type": "SYMBOL",
        "name": "_identifier"
      },
      "named": true,
      "value": "type_constructor"
    },
    "_instance_variable_name": {
      "type": "ALIAS",
      "content": {
        "type": "SYMBOL",
        "name": "_identifier"
      },
      "named": true,
      "value": "instance_variable_name"
    },
    "_module_name": {
      "type": "ALIAS",
      "content": {
        "type": "SYMBOL",
        "name": "_capitalized_identifier"
      },
      "named": true,
      "value": "module_name"
    },
    "_module_type_name": {
      "type": "ALIAS",
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_capitalized_identifier"
          },
          {
            "type": "SYMBOL",
            "name": "_identifier"
          }
        ]
      },
      "named": true,
      "value": "module_type_name"
    },
    "_constructor_name": {
      "type": "CHOICE",
      "members": [
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "_capitalized_identifier"
          },
          "named": true,
          "value": "constructor_name"
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "("
            },
            {
              "type": "ALIAS",
              "content": {
                "type": "STRING",
                "value": "::"
              },
              "named": true,
              "value": "constructor_name"
            },
            {
              "type": "STRING",
              "value": ")"
            }
          ]
        }
      ]
    },
    "_identifier": {
      "type": "PATTERN",
      "value": "[a-z_][a-zA-Z0-9_']*"
    },
    "_capitalized_identifier": {
      "type": "PATTERN",
      "value": "[A-Z][a-zA-Z0-9_']*"
    },
    "_label": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "~"
            },
            {
              "type": "STRING",
              "value": "?"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "_label_name"
        }
      ]
    },
    "directive": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "#"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_identifier"
            },
            {
              "type": "SYMBOL",
              "name": "_capitalized_identifier"
            }
          ]
        }
      ]
    },
    "type_variable": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "'"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_identifier"
            },
            {
              "type": "SYMBOL",
              "name": "_capitalized_identifier"
            }
          ]
        }
      ]
    },
    "tag": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "`"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_identifier"
            },
            {
              "type": "SYMBOL",
              "name": "_capitalized_identifier"
            }
          ]
        }
      ]
    },
    "attribute_id": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_identifier"
            },
            {
              "type": "SYMBOL",
              "name": "_capitalized_identifier"
            }
          ]
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": "."
              },
              {
                "type": "CHOICE",
                "members": [
                  {
                    "type": "SYMBOL",
                    "name": "_identifier"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "_capitalized_identifier"
                  }
                ]
              }
            ]
          }
        }
      ]
    }
  },
  "extras": [
    {
      "type": "PATTERN",
      "value": "\\s"
    },
    {
      "type": "SYMBOL",
      "name": "comment"
    },
    {
      "type": "SYMBOL",
      "name": "line_number_directive"
    },
    {
      "type": "SYMBOL",
      "name": "attribute"
    }
  ],
  "conflicts": [],
  "precedences": [],
  "externals": [
    {
      "type": "SYMBOL",
      "name": "comment"
    },
    {
      "type": "SYMBOL",
      "name": "_left_quoted_string_delimiter"
    },
    {
      "type": "SYMBOL",
      "name": "_right_quoted_string_delimiter"
    },
    {
      "type": "STRING",
      "value": "\""
    },
    {
      "type": "SYMBOL",
      "name": "line_number_directive"
    },
    {
      "type": "SYMBOL",
      "name": "_null"
    }
  ],
  "inline": [
    "_module_type_ext",
    "_module_expression_ext",
    "_module_expression_ext",
    "_simple_type_ext",
    "_simple_expression_ext",
    "_expression_ext",
    "_quoted_string",
    "_label_name",
    "_field_name",
    "_class_name",
    "_class_type_name",
    "_method_name",
    "_type_constructor",
    "_instance_variable_name",
    "_module_name",
    "_module_type_name",
    "_constructor_name"
  ],
  "supertypes": [
    "_structure_item",
    "_parameter",
    "_module_type",
    "_simple_module_expression",
    "_module_expression",
    "_simple_class_type",
    "_class_type",
    "_class_field_specification",
    "_simple_class_expression",
    "_class_expression",
    "_class_field",
    "_polymorphic_type",
    "_simple_type",
    "_tuple_type",
    "_tag_spec",
    "_type",
    "_simple_expression",
    "_expression",
    "_sequence_expression",
    "_argument",
    "_simple_pattern",
    "_pattern",
    "_binding_pattern",
    "_extension",
    "_item_extension",
    "_constant",
    "_signed_constant",
    "_value_name",
    "_value_pattern"
  ]
}

