[
  {
    "type": "alphabet",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "alphabet_header",
          "named": true
        },
        {
          "type": "semicolon",
          "named": true
        },
        {
          "type": "symbol",
          "named": true
        },
        {
          "type": "symbol_pair",
          "named": true
        }
      ]
    }
  },
  {
    "type": "arrow",
    "named": true,
    "fields": {}
  },
  {
    "type": "context",
    "named": true,
    "fields": {
      "left": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "pattern",
            "named": true
          }
        ]
      },
      "locus": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "locus",
            "named": true
          }
        ]
      },
      "right": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "pattern",
            "named": true
          }
        ]
      }
    },
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "semicolon",
          "named": true
        }
      ]
    }
  },
  {
    "type": "definition",
    "named": true,
    "fields": {
      "name": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "symbol",
            "named": true
          }
        ]
      },
      "pattern": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "pattern",
            "named": true
          }
        ]
      }
    },
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "eq",
          "named": true
        },
        {
          "type": "semicolon",
          "named": true
        }
      ]
    }
  },
  {
    "type": "definitions",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "definition",
          "named": true
        },
        {
          "type": "definitions_header",
          "named": true
        }
      ]
    }
  },
  {
    "type": "diacritics",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "diacritics_header",
          "named": true
        },
        {
          "type": "semicolon",
          "named": true
        },
        {
          "type": "symbol",
          "named": true
        }
      ]
    }
  },
  {
    "type": "negative_contexts",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "context",
          "named": true
        },
        {
          "type": "except",
          "named": true
        }
      ]
    }
  },
  {
    "type": "pattern",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "any",
          "named": true
        },
        {
          "type": "bool_op",
          "named": true
        },
        {
          "type": "compose_op",
          "named": true
        },
        {
          "type": "ignore_op",
          "named": true
        },
        {
          "type": "loptional",
          "named": true
        },
        {
          "type": "lpar",
          "named": true
        },
        {
          "type": "pattern",
          "named": true
        },
        {
          "type": "prefix_op",
          "named": true
        },
        {
          "type": "replace_op",
          "named": true
        },
        {
          "type": "roptional",
          "named": true
        },
        {
          "type": "rpar",
          "named": true
        },
        {
          "type": "suffix_op",
          "named": true
        },
        {
          "type": "symbol",
          "named": true
        },
        {
          "type": "symbol_pair",
          "named": true
        },
        {
          "type": "word_boundary",
          "named": true
        }
      ]
    }
  },
  {
    "type": "positive_contexts",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "context",
          "named": true
        }
      ]
    }
  },
  {
    "type": "regex_arrow",
    "named": true,
    "fields": {}
  },
  {
    "type": "regex_target",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": true,
      "types": [
        {
          "type": "pattern",
          "named": true
        }
      ]
    }
  },
  {
    "type": "rule",
    "named": true,
    "fields": {
      "arrow": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "arrow",
            "named": true
          },
          {
            "type": "regex_arrow",
            "named": true
          }
        ]
      },
      "contexts": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "positive_contexts",
            "named": true
          }
        ]
      },
      "name": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "rule_name",
            "named": true
          }
        ]
      },
      "neg_contexts": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "negative_contexts",
            "named": true
          }
        ]
      },
      "target": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "regex_target",
            "named": true
          },
          {
            "type": "symbol",
            "named": true
          },
          {
            "type": "symbol_pair",
            "named": true
          }
        ]
      },
      "variables": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "variables",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "rule_variables",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "rule_variables_header",
          "named": true
        },
        {
          "type": "semicolon",
          "named": true
        },
        {
          "type": "symbol",
          "named": true
        }
      ]
    }
  },
  {
    "type": "rules",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "rule",
          "named": true
        },
        {
          "type": "rules_header",
          "named": true
        }
      ]
    }
  },
  {
    "type": "set",
    "named": true,
    "fields": {
      "name": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "symbol",
            "named": true
          }
        ]
      }
    },
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "eq",
          "named": true
        },
        {
          "type": "semicolon",
          "named": true
        },
        {
          "type": "symbol",
          "named": true
        },
        {
          "type": "symbol_pair",
          "named": true
        }
      ]
    }
  },
  {
    "type": "sets",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "set",
          "named": true
        },
        {
          "type": "sets_header",
          "named": true
        }
      ]
    }
  },
  {
    "type": "source_file",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "alphabet",
          "named": true
        },
        {
          "type": "definitions",
          "named": true
        },
        {
          "type": "diacritics",
          "named": true
        },
        {
          "type": "rule_variables",
          "named": true
        },
        {
          "type": "rules",
          "named": true
        },
        {
          "type": "sets",
          "named": true
        }
      ]
    }
  },
  {
    "type": "symbol_pair",
    "named": true,
    "fields": {
      "left": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "symbol",
            "named": true
          }
        ]
      },
      "right": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "symbol",
            "named": true
          }
        ]
      }
    },
    "children": {
      "multiple": false,
      "required": true,
      "types": [
        {
          "type": "colon",
          "named": true
        }
      ]
    }
  },
  {
    "type": "variable_keyword",
    "named": true,
    "fields": {}
  },
  {
    "type": "variables",
    "named": true,
    "fields": {
      "name": {
        "multiple": true,
        "required": true,
        "types": [
          {
            "type": "symbol",
            "named": true
          }
        ]
      },
      "set": {
        "multiple": true,
        "required": true,
        "types": [
          {
            "type": "loptional",
            "named": true
          },
          {
            "type": "pattern",
            "named": true
          },
          {
            "type": "roptional",
            "named": true
          },
          {
            "type": "symbol",
            "named": true
          }
        ]
      },
      "type": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "variable_keyword",
            "named": true
          }
        ]
      }
    },
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "in_keyword",
          "named": true
        },
        {
          "type": "semicolon",
          "named": true
        },
        {
          "type": "where",
          "named": true
        }
      ]
    }
  },
  {
    "type": "/<=",
    "named": false
  },
  {
    "type": "/<==",
    "named": false
  },
  {
    "type": "<=",
    "named": false
  },
  {
    "type": "<==",
    "named": false
  },
  {
    "type": "<==>",
    "named": false
  },
  {
    "type": "<=>",
    "named": false
  },
  {
    "type": "<[",
    "named": false
  },
  {
    "type": "==>",
    "named": false
  },
  {
    "type": "=>",
    "named": false
  },
  {
    "type": "]>",
    "named": false
  },
  {
    "type": "alphabet_header",
    "named": true
  },
  {
    "type": "any",
    "named": true
  },
  {
    "type": "bool_op",
    "named": true
  },
  {
    "type": "colon",
    "named": true
  },
  {
    "type": "comment",
    "named": true
  },
  {
    "type": "compose_op",
    "named": true
  },
  {
    "type": "definitions_header",
    "named": true
  },
  {
    "type": "diacritics_header",
    "named": true
  },
  {
    "type": "eq",
    "named": true
  },
  {
    "type": "except",
    "named": true
  },
  {
    "type": "ignore_op",
    "named": true
  },
  {
    "type": "in_keyword",
    "named": true
  },
  {
    "type": "locus",
    "named": true
  },
  {
    "type": "loptional",
    "named": true
  },
  {
    "type": "lpar",
    "named": true
  },
  {
    "type": "matched",
    "named": false
  },
  {
    "type": "mixed",
    "named": false
  },
  {
    "type": "prefix_op",
    "named": true
  },
  {
    "type": "replace_op",
    "named": true
  },
  {
    "type": "roptional",
    "named": true
  },
  {
    "type": "rpar",
    "named": true
  },
  {
    "type": "rule_name",
    "named": true
  },
  {
    "type": "rule_variables_header",
    "named": true
  },
  {
    "type": "rules_header",
    "named": true
  },
  {
    "type": "semicolon",
    "named": true
  },
  {
    "type": "sets_header",
    "named": true
  },
  {
    "type": "suffix_op",
    "named": true
  },
  {
    "type": "symbol",
    "named": true
  },
  {
    "type": "where",
    "named": true
  },
  {
    "type": "word_boundary",
    "named": true
  }
]