{
  "$schema": "https://tree-sitter.github.io/tree-sitter/assets/schemas/grammar.schema.json",
  "name": "toml",
  "rules": {
    "document": {
      "type": "SEQ",
      "members": [
        {
          "type": "REPEAT",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "pair"
              },
              {
                "type": "PATTERN",
                "value": "\\r?\\n"
              }
            ]
          }
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "table"
              },
              {
                "type": "SYMBOL",
                "name": "table_array_element"
              }
            ]
          }
        }
      ]
    },
    "comment": {
      "type": "TOKEN",
      "content": {
        "type": "PREC",
        "value": -1,
        "content": {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "#"
            },
            {
              "type": "REPEAT",
              "content": {
                "type": "PATTERN",
                "value": "[^\\x00-\\x08\\x0a-\\x1f\\x7f]"
              }
            }
          ]
        }
      }
    },
    "table": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "["
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "dotted_key"
            },
            {
              "type": "SYMBOL",
              "name": "_key"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "]"
        },
        {
          "type": "SYMBOL",
          "name": "_line_ending_or_eof"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "pair"
              },
              {
                "type": "PATTERN",
                "value": "\\r?\\n"
              }
            ]
          }
        }
      ]
    },
    "table_array_element": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "[["
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "dotted_key"
            },
            {
              "type": "SYMBOL",
              "name": "_key"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "]]"
        },
        {
          "type": "SYMBOL",
          "name": "_line_ending_or_eof"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "pair"
              },
              {
                "type": "PATTERN",
                "value": "\\r?\\n"
              }
            ]
          }
        }
      ]
    },
    "pair": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_inline_pair"
        },
        {
          "type": "SYMBOL",
          "name": "_line_ending_or_eof"
        }
      ]
    },
    "_inline_pair": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "dotted_key"
            },
            {
              "type": "SYMBOL",
              "name": "_key"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "="
        },
        {
          "type": "SYMBOL",
          "name": "_inline_value"
        }
      ]
    },
    "_key": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "bare_key"
        },
        {
          "type": "SYMBOL",
          "name": "quoted_key"
        }
      ]
    },
    "dotted_key": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "dotted_key"
            },
            {
              "type": "SYMBOL",
              "name": "_key"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "."
        },
        {
          "type": "SYMBOL",
          "name": "_key"
        }
      ]
    },
    "bare_key": {
      "type": "PATTERN",
      "value": "[A-Za-z0-9_-]+"
    },
    "quoted_key": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_basic_string"
        },
        {
          "type": "SYMBOL",
          "name": "_literal_string"
        }
      ]
    },
    "_inline_value": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "string"
        },
        {
          "type": "SYMBOL",
          "name": "integer"
        },
        {
          "type": "SYMBOL",
          "name": "float"
        },
        {
          "type": "SYMBOL",
          "name": "boolean"
        },
        {
          "type": "SYMBOL",
          "name": "offset_date_time"
        },
        {
          "type": "SYMBOL",
          "name": "local_date_time"
        },
        {
          "type": "SYMBOL",
          "name": "local_date"
        },
        {
          "type": "SYMBOL",
          "name": "local_time"
        },
        {
          "type": "SYMBOL",
          "name": "array"
        },
        {
          "type": "SYMBOL",
          "name": "inline_table"
        }
      ]
    },
    "string": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_basic_string"
        },
        {
          "type": "SYMBOL",
          "name": "_multiline_basic_string"
        },
        {
          "type": "SYMBOL",
          "name": "_literal_string"
        },
        {
          "type": "SYMBOL",
          "name": "_multiline_literal_string"
        }
      ]
    },
    "_basic_string": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "\""
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "IMMEDIATE_TOKEN",
                "content": {
                  "type": "REPEAT1",
                  "content": {
                    "type": "PATTERN",
                    "value": "[^\\x00-\\x08\\x0a-\\x1f\\x22\\x5c\\x7f]"
                  }
                }
              },
              {
                "type": "SYMBOL",
                "name": "escape_sequence"
              }
            ]
          }
        },
        {
          "type": "IMMEDIATE_TOKEN",
          "content": {
            "type": "STRING",
            "value": "\""
          }
        }
      ]
    },
    "_multiline_basic_string": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "\"\"\""
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "IMMEDIATE_TOKEN",
                "content": {
                  "type": "REPEAT1",
                  "content": {
                    "type": "PATTERN",
                    "value": "[^\\x00-\\x08\\x0a-\\x1f\\x22\\x5c\\x7f]"
                  }
                }
              },
              {
                "type": "SYMBOL",
                "name": "_multiline_basic_string_content"
              },
              {
                "type": "IMMEDIATE_TOKEN",
                "content": {
                  "type": "PATTERN",
                  "value": "\\r?\\n"
                }
              },
              {
                "type": "SYMBOL",
                "name": "escape_sequence"
              },
              {
                "type": "ALIAS",
                "content": {
                  "type": "SYMBOL",
                  "name": "_escape_line_ending"
                },
                "named": true,
                "value": "escape_sequence"
              }
            ]
          }
        },
        {
          "type": "SYMBOL",
          "name": "_multiline_basic_string_end"
        }
      ]
    },
    "escape_sequence": {
      "type": "IMMEDIATE_TOKEN",
      "content": {
        "type": "PATTERN",
        "value": "\\\\([btnfr\"\\\\]|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8})"
      }
    },
    "_escape_line_ending": {
      "type": "IMMEDIATE_TOKEN",
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "PATTERN",
            "value": "\\\\"
          },
          {
            "type": "PATTERN",
            "value": "\\r?\\n"
          }
        ]
      }
    },
    "_literal_string": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "'"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "IMMEDIATE_TOKEN",
              "content": {
                "type": "REPEAT1",
                "content": {
                  "type": "PATTERN",
                  "value": "[^\\x00-\\x08\\x0a-\\x1f\\x27\\x7f]"
                }
              }
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "IMMEDIATE_TOKEN",
          "content": {
            "type": "STRING",
            "value": "'"
          }
        }
      ]
    },
    "_multiline_literal_string": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "'''"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "IMMEDIATE_TOKEN",
                "content": {
                  "type": "REPEAT1",
                  "content": {
                    "type": "PATTERN",
                    "value": "[^\\x00-\\x08\\x0a-\\x1f\\x27\\x7f]"
                  }
                }
              },
              {
                "type": "SYMBOL",
                "name": "_multiline_literal_string_content"
              },
              {
                "type": "IMMEDIATE_TOKEN",
                "content": {
                  "type": "PATTERN",
                  "value": "\\r?\\n"
                }
              }
            ]
          }
        },
        {
          "type": "SYMBOL",
          "name": "_multiline_literal_string_end"
        }
      ]
    },
    "integer": {
      "type": "CHOICE",
      "members": [
        {
          "type": "PATTERN",
          "value": "[+-]?(0|[1-9](_?[0-9])*)"
        },
        {
          "type": "PATTERN",
          "value": "0x[0-9a-fA-F](_?[0-9a-fA-F])*"
        },
        {
          "type": "PATTERN",
          "value": "0o[0-7](_?[0-7])*"
        },
        {
          "type": "PATTERN",
          "value": "0b[01](_?[01])*"
        }
      ]
    },
    "float": {
      "type": "CHOICE",
      "members": [
        {
          "type": "TOKEN",
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "PATTERN",
                "value": "[+-]?(0|[1-9](_?[0-9])*)"
              },
              {
                "type": "CHOICE",
                "members": [
                  {
                    "type": "PATTERN",
                    "value": "[.][0-9](_?[0-9])*"
                  },
                  {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "CHOICE",
                        "members": [
                          {
                            "type": "PATTERN",
                            "value": "[.][0-9](_?[0-9])*"
                          },
                          {
                            "type": "BLANK"
                          }
                        ]
                      },
                      {
                        "type": "SEQ",
                        "members": [
                          {
                            "type": "PATTERN",
                            "value": "[eE]"
                          },
                          {
                            "type": "PATTERN",
                            "value": "[+-]?[0-9](_?[0-9])*"
                          }
                        ]
                      }
                    ]
                  }
                ]
              }
            ]
          }
        },
        {
          "type": "PATTERN",
          "value": "[+-]?(inf|nan)"
        }
      ]
    },
    "boolean": {
      "type": "PATTERN",
      "value": "true|false"
    },
    "offset_date_time": {
      "type": "TOKEN",
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "PATTERN",
            "value": "([0-9]+)-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])"
          },
          {
            "type": "PATTERN",
            "value": "[ tT]"
          },
          {
            "type": "PATTERN",
            "value": "([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]|60)([.][0-9]+)?"
          },
          {
            "type": "PATTERN",
            "value": "([zZ])|([+-]([01][0-9]|2[0-3]):[0-5][0-9])"
          }
        ]
      }
    },
    "local_date_time": {
      "type": "TOKEN",
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "PATTERN",
            "value": "([0-9]+)-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])"
          },
          {
            "type": "PATTERN",
            "value": "[ tT]"
          },
          {
            "type": "PATTERN",
            "value": "([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]|60)([.][0-9]+)?"
          }
        ]
      }
    },
    "local_date": {
      "type": "PATTERN",
      "value": "([0-9]+)-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])"
    },
    "local_time": {
      "type": "PATTERN",
      "value": "([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]|60)([.][0-9]+)?"
    },
    "array": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "["
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "PATTERN",
            "value": "\\r?\\n"
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_inline_value"
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "PATTERN",
                    "value": "\\r?\\n"
                  }
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ","
                      },
                      {
                        "type": "REPEAT",
                        "content": {
                          "type": "PATTERN",
                          "value": "\\r?\\n"
                        }
                      },
                      {
                        "type": "SYMBOL",
                        "name": "_inline_value"
                      },
                      {
                        "type": "REPEAT",
                        "content": {
                          "type": "PATTERN",
                          "value": "\\r?\\n"
                        }
                      }
                    ]
                  }
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "SEQ",
                      "members": [
                        {
                          "type": "STRING",
                          "value": ","
                        },
                        {
                          "type": "REPEAT",
                          "content": {
                            "type": "PATTERN",
                            "value": "\\r?\\n"
                          }
                        }
                      ]
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "]"
        }
      ]
    },
    "inline_table": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "{"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "ALIAS",
                  "content": {
                    "type": "SYMBOL",
                    "name": "_inline_pair"
                  },
                  "named": true,
                  "value": "pair"
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ","
                      },
                      {
                        "type": "ALIAS",
                        "content": {
                          "type": "SYMBOL",
                          "name": "_inline_pair"
                        },
                        "named": true,
                        "value": "pair"
                      }
                    ]
                  }
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "}"
        }
      ]
    }
  },
  "extras": [
    {
      "type": "SYMBOL",
      "name": "comment"
    },
    {
      "type": "PATTERN",
      "value": "[ \\t]"
    }
  ],
  "conflicts": [],
  "precedences": [],
  "externals": [
    {
      "type": "SYMBOL",
      "name": "_line_ending_or_eof"
    },
    {
      "type": "SYMBOL",
      "name": "_multiline_basic_string_content"
    },
    {
      "type": "SYMBOL",
      "name": "_multiline_basic_string_end"
    },
    {
      "type": "SYMBOL",
      "name": "_multiline_literal_string_content"
    },
    {
      "type": "SYMBOL",
      "name": "_multiline_literal_string_end"
    }
  ],
  "inline": [],
  "supertypes": []
}
