{
  "$schema": "https://tree-sitter.github.io/tree-sitter/assets/schemas/grammar.schema.json",
  "name": "jsonnet",
  "word": "ident",
  "rules": {
    "source_file": {
      "type": "SYMBOL",
      "name": "_expr"
    },
    "line_comment": {
      "type": "TOKEN",
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": "//"
              },
              {
                "type": "PATTERN",
                "value": "[^\\r\\n]*"
              }
            ]
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": "#"
              },
              {
                "type": "PATTERN",
                "value": "[^\\r\\n]*"
              }
            ]
          }
        ]
      }
    },
    "block_comment": {
      "type": "TOKEN",
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "/*"
          },
          {
            "type": "PATTERN",
            "value": "([^*]|\\*+[^*/])*\\**"
          },
          {
            "type": "STRING",
            "value": "*/"
          }
        ]
      }
    },
    "_expr": {
      "type": "SYMBOL",
      "name": "_binop_expr"
    },
    "local_expr": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "local"
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "bind"
            },
            {
              "type": "REPEAT",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": ","
                  },
                  {
                    "type": "SYMBOL",
                    "name": "bind"
                  }
                ]
              }
            },
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "STRING",
                  "value": ","
                },
                {
                  "type": "BLANK"
                }
              ]
            }
          ]
        },
        {
          "type": "STRING",
          "value": ";"
        },
        {
          "type": "SYMBOL",
          "name": "_expr"
        }
      ]
    },
    "assert_expr": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "assertion"
        },
        {
          "type": "STRING",
          "value": ";"
        },
        {
          "type": "SYMBOL",
          "name": "_expr"
        }
      ]
    },
    "assertion": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "assert"
        },
        {
          "type": "SYMBOL",
          "name": "_expr"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": ":"
                },
                {
                  "type": "SYMBOL",
                  "name": "_expr"
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "_binop_expr": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "binary_expr"
        },
        {
          "type": "SYMBOL",
          "name": "_unary_expr"
        }
      ]
    },
    "binary_expr": {
      "type": "CHOICE",
      "members": [
        {
          "type": "PREC_LEFT",
          "value": 20,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "lhs",
                "content": {
                  "type": "SYMBOL",
                  "name": "_binop_expr"
                }
              },
              {
                "type": "FIELD",
                "name": "op",
                "content": {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "STRING",
                      "value": "*"
                    },
                    {
                      "type": "STRING",
                      "value": "/"
                    },
                    {
                      "type": "STRING",
                      "value": "%"
                    }
                  ]
                }
              },
              {
                "type": "FIELD",
                "name": "rhs",
                "content": {
                  "type": "SYMBOL",
                  "name": "_binop_expr"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": 18,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "lhs",
                "content": {
                  "type": "SYMBOL",
                  "name": "_binop_expr"
                }
              },
              {
                "type": "FIELD",
                "name": "op",
                "content": {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "STRING",
                      "value": "+"
                    },
                    {
                      "type": "STRING",
                      "value": "-"
                    }
                  ]
                }
              },
              {
                "type": "FIELD",
                "name": "rhs",
                "content": {
                  "type": "SYMBOL",
                  "name": "_binop_expr"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": 16,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "lhs",
                "content": {
                  "type": "SYMBOL",
                  "name": "_binop_expr"
                }
              },
              {
                "type": "FIELD",
                "name": "op",
                "content": {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "STRING",
                      "value": "<<"
                    },
                    {
                      "type": "STRING",
                      "value": ">>"
                    }
                  ]
                }
              },
              {
                "type": "FIELD",
                "name": "rhs",
                "content": {
                  "type": "SYMBOL",
                  "name": "_binop_expr"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": 14,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "lhs",
                "content": {
                  "type": "SYMBOL",
                  "name": "_binop_expr"
                }
              },
              {
                "type": "FIELD",
                "name": "op",
                "content": {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "STRING",
                      "value": "<"
                    },
                    {
                      "type": "STRING",
                      "value": ">"
                    },
                    {
                      "type": "STRING",
                      "value": "<="
                    },
                    {
                      "type": "STRING",
                      "value": ">="
                    },
                    {
                      "type": "STRING",
                      "value": "in"
                    }
                  ]
                }
              },
              {
                "type": "FIELD",
                "name": "rhs",
                "content": {
                  "type": "SYMBOL",
                  "name": "_binop_expr"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": 12,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "lhs",
                "content": {
                  "type": "SYMBOL",
                  "name": "_binop_expr"
                }
              },
              {
                "type": "FIELD",
                "name": "op",
                "content": {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "STRING",
                      "value": "=="
                    },
                    {
                      "type": "STRING",
                      "value": "!="
                    }
                  ]
                }
              },
              {
                "type": "FIELD",
                "name": "rhs",
                "content": {
                  "type": "SYMBOL",
                  "name": "_binop_expr"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": 10,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "lhs",
                "content": {
                  "type": "SYMBOL",
                  "name": "_binop_expr"
                }
              },
              {
                "type": "FIELD",
                "name": "op",
                "content": {
                  "type": "STRING",
                  "value": "&"
                }
              },
              {
                "type": "FIELD",
                "name": "rhs",
                "content": {
                  "type": "SYMBOL",
                  "name": "_binop_expr"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": 8,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "lhs",
                "content": {
                  "type": "SYMBOL",
                  "name": "_binop_expr"
                }
              },
              {
                "type": "FIELD",
                "name": "op",
                "content": {
                  "type": "STRING",
                  "value": "^"
                }
              },
              {
                "type": "FIELD",
                "name": "rhs",
                "content": {
                  "type": "SYMBOL",
                  "name": "_binop_expr"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": 6,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "lhs",
                "content": {
                  "type": "SYMBOL",
                  "name": "_binop_expr"
                }
              },
              {
                "type": "FIELD",
                "name": "op",
                "content": {
                  "type": "STRING",
                  "value": "|"
                }
              },
              {
                "type": "FIELD",
                "name": "rhs",
                "content": {
                  "type": "SYMBOL",
                  "name": "_binop_expr"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": 4,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "lhs",
                "content": {
                  "type": "SYMBOL",
                  "name": "_binop_expr"
                }
              },
              {
                "type": "FIELD",
                "name": "op",
                "content": {
                  "type": "STRING",
                  "value": "&&"
                }
              },
              {
                "type": "FIELD",
                "name": "rhs",
                "content": {
                  "type": "SYMBOL",
                  "name": "_binop_expr"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": 2,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "lhs",
                "content": {
                  "type": "SYMBOL",
                  "name": "_binop_expr"
                }
              },
              {
                "type": "FIELD",
                "name": "op",
                "content": {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "STRING",
                      "value": "||"
                    },
                    {
                      "type": "STRING",
                      "value": "??"
                    }
                  ]
                }
              },
              {
                "type": "FIELD",
                "name": "rhs",
                "content": {
                  "type": "SYMBOL",
                  "name": "_binop_expr"
                }
              }
            ]
          }
        }
      ]
    },
    "_unary_expr": {
      "type": "CHOICE",
      "members": [
        {
          "type": "PREC",
          "value": 21,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "CHOICE",
                "members": [
                  {
                    "type": "STRING",
                    "value": "-"
                  },
                  {
                    "type": "STRING",
                    "value": "+"
                  },
                  {
                    "type": "STRING",
                    "value": "!"
                  },
                  {
                    "type": "STRING",
                    "value": "~"
                  }
                ]
              },
              {
                "type": "SYMBOL",
                "name": "_unary_expr"
              }
            ]
          }
        },
        {
          "type": "SYMBOL",
          "name": "_suffixed"
        },
        {
          "type": "SYMBOL",
          "name": "_full_expr"
        }
      ]
    },
    "_suffixed": {
      "type": "PREC_LEFT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_atom"
          },
          {
            "type": "REPEAT",
            "content": {
              "type": "SYMBOL",
              "name": "_suffix"
            }
          }
        ]
      }
    },
    "_full_expr": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "if_then_else"
        },
        {
          "type": "SYMBOL",
          "name": "function_expr"
        },
        {
          "type": "SYMBOL",
          "name": "error_expr"
        },
        {
          "type": "SYMBOL",
          "name": "import_expr"
        },
        {
          "type": "SYMBOL",
          "name": "local_expr"
        },
        {
          "type": "SYMBOL",
          "name": "assert_expr"
        }
      ]
    },
    "_suffix": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "suffix_index"
        },
        {
          "type": "SYMBOL",
          "name": "suffix_index_expr"
        },
        {
          "type": "SYMBOL",
          "name": "suffix_slice"
        },
        {
          "type": "SYMBOL",
          "name": "suffix_apply"
        },
        {
          "type": "SYMBOL",
          "name": "suffix_object_apply"
        }
      ]
    },
    "suffix_index": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "?"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "."
        },
        {
          "type": "SYMBOL",
          "name": "ident"
        }
      ]
    },
    "suffix_index_expr": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "["
        },
        {
          "type": "SYMBOL",
          "name": "_expr"
        },
        {
          "type": "STRING",
          "value": "]"
        }
      ]
    },
    "suffix_slice": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "["
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_expr"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": ":"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_expr"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": ":"
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "SYMBOL",
                      "name": "_expr"
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "]"
        }
      ]
    },
    "suffix_apply": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "arg"
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ","
                      },
                      {
                        "type": "SYMBOL",
                        "name": "arg"
                      }
                    ]
                  }
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "STRING",
                      "value": ","
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": ")"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "tailstrict"
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "suffix_object_apply": {
      "type": "SYMBOL",
      "name": "object"
    },
    "arg": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "ident"
            },
            {
              "type": "STRING",
              "value": "="
            },
            {
              "type": "SYMBOL",
              "name": "_expr"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "_expr"
        }
      ]
    },
    "_atom": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "literal"
        },
        {
          "type": "SYMBOL",
          "name": "number"
        },
        {
          "type": "SYMBOL",
          "name": "string"
        },
        {
          "type": "SYMBOL",
          "name": "verbatim_string"
        },
        {
          "type": "SYMBOL",
          "name": "string_block"
        },
        {
          "type": "SYMBOL",
          "name": "ident_ref"
        },
        {
          "type": "SYMBOL",
          "name": "array"
        },
        {
          "type": "SYMBOL",
          "name": "object"
        },
        {
          "type": "SYMBOL",
          "name": "parened"
        },
        {
          "type": "SYMBOL",
          "name": "dollar"
        }
      ]
    },
    "dollar": {
      "type": "STRING",
      "value": "$"
    },
    "literal": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "null"
        },
        {
          "type": "STRING",
          "value": "true"
        },
        {
          "type": "STRING",
          "value": "false"
        },
        {
          "type": "STRING",
          "value": "self"
        },
        {
          "type": "STRING",
          "value": "super"
        }
      ]
    },
    "ident_ref": {
      "type": "SYMBOL",
      "name": "ident"
    },
    "if_then_else": {
      "type": "CHOICE",
      "members": [
        {
          "type": "PREC_RIGHT",
          "value": 2,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": "if"
              },
              {
                "type": "SYMBOL",
                "name": "_expr"
              },
              {
                "type": "STRING",
                "value": "then"
              },
              {
                "type": "SYMBOL",
                "name": "_expr"
              },
              {
                "type": "STRING",
                "value": "else"
              },
              {
                "type": "SYMBOL",
                "name": "_expr"
              }
            ]
          }
        },
        {
          "type": "PREC_RIGHT",
          "value": 1,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": "if"
              },
              {
                "type": "SYMBOL",
                "name": "_expr"
              },
              {
                "type": "STRING",
                "value": "then"
              },
              {
                "type": "SYMBOL",
                "name": "_expr"
              }
            ]
          }
        }
      ]
    },
    "array": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "["
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "SYMBOL",
                      "name": "_expr"
                    },
                    {
                      "type": "REPEAT",
                      "content": {
                        "type": "SEQ",
                        "members": [
                          {
                            "type": "STRING",
                            "value": ","
                          },
                          {
                            "type": "SYMBOL",
                            "name": "_expr"
                          }
                        ]
                      }
                    },
                    {
                      "type": "CHOICE",
                      "members": [
                        {
                          "type": "STRING",
                          "value": ","
                        },
                        {
                          "type": "BLANK"
                        }
                      ]
                    }
                  ]
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "SEQ",
                      "members": [
                        {
                          "type": "REPEAT1",
                          "content": {
                            "type": "SYMBOL",
                            "name": "_compspec"
                          }
                        },
                        {
                          "type": "CHOICE",
                          "members": [
                            {
                              "type": "STRING",
                              "value": ","
                            },
                            {
                              "type": "BLANK"
                            }
                          ]
                        }
                      ]
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "]"
        }
      ]
    },
    "object": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "{"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "SYMBOL",
                      "name": "member"
                    },
                    {
                      "type": "REPEAT",
                      "content": {
                        "type": "SEQ",
                        "members": [
                          {
                            "type": "STRING",
                            "value": ","
                          },
                          {
                            "type": "SYMBOL",
                            "name": "member"
                          }
                        ]
                      }
                    },
                    {
                      "type": "CHOICE",
                      "members": [
                        {
                          "type": "STRING",
                          "value": ","
                        },
                        {
                          "type": "BLANK"
                        }
                      ]
                    }
                  ]
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "SEQ",
                      "members": [
                        {
                          "type": "REPEAT1",
                          "content": {
                            "type": "SYMBOL",
                            "name": "_compspec"
                          }
                        },
                        {
                          "type": "CHOICE",
                          "members": [
                            {
                              "type": "STRING",
                              "value": ","
                            },
                            {
                              "type": "BLANK"
                            }
                          ]
                        }
                      ]
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "}"
        }
      ]
    },
    "member": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "member_local"
        },
        {
          "type": "SYMBOL",
          "name": "member_assert"
        },
        {
          "type": "SYMBOL",
          "name": "field"
        }
      ]
    },
    "member_local": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "local"
        },
        {
          "type": "SYMBOL",
          "name": "bind"
        }
      ]
    },
    "member_assert": {
      "type": "SYMBOL",
      "name": "assertion"
    },
    "field": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "field_name"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "+"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "params"
                },
                {
                  "type": "SYMBOL",
                  "name": "visibility"
                },
                {
                  "type": "SYMBOL",
                  "name": "_expr"
                }
              ]
            },
            {
              "type": "PREC_DYNAMIC",
              "value": 2,
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "SYMBOL",
                    "name": "visibility"
                  },
                  {
                    "type": "STRING",
                    "value": "function"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "params"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "_expr"
                  }
                ]
              }
            },
            {
              "type": "PREC_DYNAMIC",
              "value": 1,
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "SYMBOL",
                    "name": "visibility"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "_expr"
                  }
                ]
              }
            }
          ]
        }
      ]
    },
    "field_name": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "ident"
        },
        {
          "type": "SYMBOL",
          "name": "string"
        },
        {
          "type": "SYMBOL",
          "name": "verbatim_string"
        },
        {
          "type": "SYMBOL",
          "name": "string_block"
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "["
            },
            {
              "type": "SYMBOL",
              "name": "_expr"
            },
            {
              "type": "STRING",
              "value": "]"
            }
          ]
        }
      ]
    },
    "visibility": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": ":"
        },
        {
          "type": "STRING",
          "value": "::"
        },
        {
          "type": "STRING",
          "value": ":::"
        }
      ]
    },
    "_compspec": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "for_spec"
        },
        {
          "type": "SYMBOL",
          "name": "if_spec"
        }
      ]
    },
    "for_spec": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "for"
        },
        {
          "type": "SYMBOL",
          "name": "_destruct"
        },
        {
          "type": "STRING",
          "value": "in"
        },
        {
          "type": "SYMBOL",
          "name": "_expr"
        }
      ]
    },
    "if_spec": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "if"
        },
        {
          "type": "SYMBOL",
          "name": "_expr"
        }
      ]
    },
    "function_expr": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "function"
        },
        {
          "type": "SYMBOL",
          "name": "params"
        },
        {
          "type": "SYMBOL",
          "name": "_expr"
        }
      ]
    },
    "params": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "param"
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ","
                      },
                      {
                        "type": "SYMBOL",
                        "name": "param"
                      }
                    ]
                  }
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "STRING",
                      "value": ","
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "param": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_destruct"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": "="
                },
                {
                  "type": "SYMBOL",
                  "name": "_expr"
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "error_expr": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "error"
        },
        {
          "type": "SYMBOL",
          "name": "_expr"
        }
      ]
    },
    "import_expr": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "import"
            },
            {
              "type": "STRING",
              "value": "importstr"
            },
            {
              "type": "STRING",
              "value": "importbin"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "string"
            },
            {
              "type": "SYMBOL",
              "name": "verbatim_string"
            },
            {
              "type": "SYMBOL",
              "name": "string_block"
            }
          ]
        }
      ]
    },
    "parened": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "SYMBOL",
          "name": "_expr"
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "bind": {
      "type": "CHOICE",
      "members": [
        {
          "type": "PREC_DYNAMIC",
          "value": 2,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "SYMBOL",
                "name": "ident"
              },
              {
                "type": "SYMBOL",
                "name": "params"
              },
              {
                "type": "STRING",
                "value": "="
              },
              {
                "type": "SYMBOL",
                "name": "_expr"
              }
            ]
          }
        },
        {
          "type": "PREC_DYNAMIC",
          "value": 2,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "SYMBOL",
                "name": "ident"
              },
              {
                "type": "STRING",
                "value": "="
              },
              {
                "type": "STRING",
                "value": "function"
              },
              {
                "type": "SYMBOL",
                "name": "params"
              },
              {
                "type": "SYMBOL",
                "name": "_expr"
              }
            ]
          }
        },
        {
          "type": "PREC_DYNAMIC",
          "value": 1,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "SYMBOL",
                "name": "_destruct"
              },
              {
                "type": "STRING",
                "value": "="
              },
              {
                "type": "SYMBOL",
                "name": "_expr"
              }
            ]
          }
        }
      ]
    },
    "_destruct": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "ident"
        },
        {
          "type": "STRING",
          "value": "?"
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "["
            },
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "CHOICE",
                      "members": [
                        {
                          "type": "SYMBOL",
                          "name": "_destruct"
                        },
                        {
                          "type": "SYMBOL",
                          "name": "destruct_rest"
                        }
                      ]
                    },
                    {
                      "type": "REPEAT",
                      "content": {
                        "type": "SEQ",
                        "members": [
                          {
                            "type": "STRING",
                            "value": ","
                          },
                          {
                            "type": "CHOICE",
                            "members": [
                              {
                                "type": "SYMBOL",
                                "name": "_destruct"
                              },
                              {
                                "type": "SYMBOL",
                                "name": "destruct_rest"
                              }
                            ]
                          }
                        ]
                      }
                    },
                    {
                      "type": "CHOICE",
                      "members": [
                        {
                          "type": "STRING",
                          "value": ","
                        },
                        {
                          "type": "BLANK"
                        }
                      ]
                    }
                  ]
                },
                {
                  "type": "BLANK"
                }
              ]
            },
            {
              "type": "STRING",
              "value": "]"
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "{"
            },
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "CHOICE",
                      "members": [
                        {
                          "type": "SYMBOL",
                          "name": "destruct_field"
                        },
                        {
                          "type": "SYMBOL",
                          "name": "destruct_rest"
                        }
                      ]
                    },
                    {
                      "type": "REPEAT",
                      "content": {
                        "type": "SEQ",
                        "members": [
                          {
                            "type": "STRING",
                            "value": ","
                          },
                          {
                            "type": "CHOICE",
                            "members": [
                              {
                                "type": "SYMBOL",
                                "name": "destruct_field"
                              },
                              {
                                "type": "SYMBOL",
                                "name": "destruct_rest"
                              }
                            ]
                          }
                        ]
                      }
                    },
                    {
                      "type": "CHOICE",
                      "members": [
                        {
                          "type": "STRING",
                          "value": ","
                        },
                        {
                          "type": "BLANK"
                        }
                      ]
                    }
                  ]
                },
                {
                  "type": "BLANK"
                }
              ]
            },
            {
              "type": "STRING",
              "value": "}"
            }
          ]
        }
      ]
    },
    "destruct_rest": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "..."
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "ident"
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "destruct_field": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "ident"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": ":"
                },
                {
                  "type": "SYMBOL",
                  "name": "_destruct"
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": "="
                },
                {
                  "type": "SYMBOL",
                  "name": "_expr"
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "string": {
      "type": "TOKEN",
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": "\""
              },
              {
                "type": "REPEAT",
                "content": {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "PATTERN",
                      "value": "[^\"\\\\]"
                    },
                    {
                      "type": "PATTERN",
                      "value": "\\\\(.|\\n)"
                    }
                  ]
                }
              },
              {
                "type": "STRING",
                "value": "\""
              }
            ]
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": "'"
              },
              {
                "type": "REPEAT",
                "content": {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "PATTERN",
                      "value": "[^'\\\\]"
                    },
                    {
                      "type": "PATTERN",
                      "value": "\\\\(.|\\n)"
                    }
                  ]
                }
              },
              {
                "type": "STRING",
                "value": "'"
              }
            ]
          }
        ]
      }
    },
    "verbatim_string": {
      "type": "TOKEN",
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": "@\""
              },
              {
                "type": "REPEAT",
                "content": {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "PATTERN",
                      "value": "[^\"]"
                    },
                    {
                      "type": "STRING",
                      "value": "\"\""
                    }
                  ]
                }
              },
              {
                "type": "STRING",
                "value": "\""
              }
            ]
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": "@'"
              },
              {
                "type": "REPEAT",
                "content": {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "PATTERN",
                      "value": "[^']"
                    },
                    {
                      "type": "STRING",
                      "value": "''"
                    }
                  ]
                }
              },
              {
                "type": "STRING",
                "value": "'"
              }
            ]
          }
        ]
      }
    },
    "number": {
      "type": "TOKEN",
      "content": {
        "type": "PATTERN",
        "value": "(?:0|[1-9][0-9]*(?:_[0-9]+)*)(?:\\.[0-9]+(?:_[0-9]+)*)?(?:[eE][+-]?[0-9]+(?:_[0-9]+)*)?"
      }
    },
    "ident": {
      "type": "PATTERN",
      "value": "[_a-zA-Z][_a-zA-Z0-9]*"
    }
  },
  "extras": [
    {
      "type": "PATTERN",
      "value": "[ \\t\\r\\n]+"
    },
    {
      "type": "SYMBOL",
      "name": "line_comment"
    },
    {
      "type": "SYMBOL",
      "name": "block_comment"
    }
  ],
  "conflicts": [
    [
      "bind",
      "_destruct"
    ],
    [
      "field",
      "function_expr"
    ]
  ],
  "precedences": [],
  "externals": [
    {
      "type": "SYMBOL",
      "name": "string_block"
    },
    {
      "type": "SYMBOL",
      "name": "_sb_err_unexpected_end"
    },
    {
      "type": "SYMBOL",
      "name": "_sb_err_missing_newline"
    },
    {
      "type": "SYMBOL",
      "name": "_sb_err_missing_termination"
    },
    {
      "type": "SYMBOL",
      "name": "_sb_err_missing_indent"
    }
  ],
  "inline": [],
  "supertypes": [],
  "reserved": {}
}
