{
  "$schema": "https://tree-sitter.github.io/tree-sitter/assets/schemas/grammar.schema.json",
  "name": "flatbuffers",
  "rules": {
    "source_file": {
      "type": "SEQ",
      "members": [
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "include"
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "REPEAT",
              "content": {
                "type": "CHOICE",
                "members": [
                  {
                    "type": "SYMBOL",
                    "name": "namespace_decl"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "type_decl"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "enum_decl"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "union_decl"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "root_decl"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "file_extension_decl"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "file_identifier_decl"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "attribute_decl"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "rpc_decl"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "object"
                  }
                ]
              }
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "documentation": {
      "type": "TOKEN",
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "///"
          },
          {
            "type": "PATTERN",
            "value": ".*"
          }
        ]
      }
    },
    "include": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "include"
        },
        {
          "type": "FIELD",
          "name": "include_name",
          "content": {
            "type": "SYMBOL",
            "name": "string_constant"
          }
        },
        {
          "type": "STRING",
          "value": ";"
        }
      ]
    },
    "namespace_decl": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "namespace"
        },
        {
          "type": "FIELD",
          "name": "namespace_ident",
          "content": {
            "type": "SYMBOL",
            "name": "full_ident"
          }
        },
        {
          "type": "STRING",
          "value": ";"
        }
      ]
    },
    "attribute_decl": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "attribute"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "FIELD",
              "name": "attribute_name",
              "content": {
                "type": "SYMBOL",
                "name": "identifier"
              }
            },
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": "\""
                },
                {
                  "type": "FIELD",
                  "name": "attribute_name",
                  "content": {
                    "type": "SYMBOL",
                    "name": "identifier"
                  }
                },
                {
                  "type": "STRING",
                  "value": "\""
                }
              ]
            }
          ]
        },
        {
          "type": "STRING",
          "value": ";"
        }
      ]
    },
    "type_decl": {
      "type": "SEQ",
      "members": [
        {
          "type": "REPEAT",
          "content": {
            "type": "FIELD",
            "name": "documentation",
            "content": {
              "type": "SYMBOL",
              "name": "documentation"
            }
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "table"
            },
            {
              "type": "STRING",
              "value": "struct"
            }
          ]
        },
        {
          "type": "FIELD",
          "name": "table_or_struct_name",
          "content": {
            "type": "SYMBOL",
            "name": "identifier"
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "FIELD",
              "name": "metadata",
              "content": {
                "type": "SYMBOL",
                "name": "metadata"
              }
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "{"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "field_decl"
          }
        },
        {
          "type": "STRING",
          "value": "}"
        }
      ]
    },
    "enum_decl": {
      "type": "SEQ",
      "members": [
        {
          "type": "REPEAT",
          "content": {
            "type": "FIELD",
            "name": "documentation",
            "content": {
              "type": "SYMBOL",
              "name": "documentation"
            }
          }
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "enum"
            },
            {
              "type": "FIELD",
              "name": "enum_name",
              "content": {
                "type": "SYMBOL",
                "name": "identifier"
              }
            },
            {
              "type": "STRING",
              "value": ":"
            },
            {
              "type": "FIELD",
              "name": "enum_type",
              "content": {
                "type": "SYMBOL",
                "name": "type"
              }
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "FIELD",
              "name": "metadata",
              "content": {
                "type": "SYMBOL",
                "name": "metadata"
              }
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "{"
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "FIELD",
              "name": "enum_val_decl",
              "content": {
                "type": "SYMBOL",
                "name": "enum_val_decl"
              }
            },
            {
              "type": "REPEAT",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": ","
                  },
                  {
                    "type": "FIELD",
                    "name": "enum_val_decl",
                    "content": {
                      "type": "SYMBOL",
                      "name": "enum_val_decl"
                    }
                  }
                ]
              }
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": ","
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "}"
        }
      ]
    },
    "union_decl": {
      "type": "SEQ",
      "members": [
        {
          "type": "REPEAT",
          "content": {
            "type": "FIELD",
            "name": "documentation",
            "content": {
              "type": "SYMBOL",
              "name": "documentation"
            }
          }
        },
        {
          "type": "STRING",
          "value": "union"
        },
        {
          "type": "FIELD",
          "name": "union_name",
          "content": {
            "type": "SYMBOL",
            "name": "identifier"
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "FIELD",
              "name": "metadata",
              "content": {
                "type": "SYMBOL",
                "name": "metadata"
              }
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "{"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "FIELD",
                  "name": "union_field_decl",
                  "content": {
                    "type": "SYMBOL",
                    "name": "union_field_decl"
                  }
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ","
                      },
                      {
                        "type": "FIELD",
                        "name": "union_field_decl",
                        "content": {
                          "type": "SYMBOL",
                          "name": "union_field_decl"
                        }
                      }
                    ]
                  }
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "STRING",
                      "value": ","
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                }
              ]
            },
            {
              "type": "FIELD",
              "name": "field_without_type",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "SYMBOL",
                    "name": "full_ident"
                  },
                  {
                    "type": "REPEAT",
                    "content": {
                      "type": "SEQ",
                      "members": [
                        {
                          "type": "STRING",
                          "value": ","
                        },
                        {
                          "type": "SYMBOL",
                          "name": "full_ident"
                        }
                      ]
                    }
                  },
                  {
                    "type": "CHOICE",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ","
                      },
                      {
                        "type": "BLANK"
                      }
                    ]
                  }
                ]
              }
            }
          ]
        },
        {
          "type": "STRING",
          "value": "}"
        }
      ]
    },
    "object": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "{"
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "REPEAT",
              "content": {
                "type": "FIELD",
                "name": "documentation",
                "content": {
                  "type": "SYMBOL",
                  "name": "documentation"
                }
              }
            },
            {
              "type": "REPEAT",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": ","
                  },
                  {
                    "type": "REPEAT",
                    "content": {
                      "type": "FIELD",
                      "name": "documentation",
                      "content": {
                        "type": "SYMBOL",
                        "name": "documentation"
                      }
                    }
                  }
                ]
              }
            }
          ]
        },
        {
          "type": "STRING",
          "value": "}"
        }
      ]
    },
    "root_decl": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "root_type"
        },
        {
          "type": "FIELD",
          "name": "root_type_ident",
          "content": {
            "type": "SYMBOL",
            "name": "identifier"
          }
        },
        {
          "type": "STRING",
          "value": ";"
        }
      ]
    },
    "file_extension_decl": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "file_extension"
        },
        {
          "type": "FIELD",
          "name": "file_extension_constant",
          "content": {
            "type": "SYMBOL",
            "name": "string_constant"
          }
        },
        {
          "type": "STRING",
          "value": ";"
        }
      ]
    },
    "file_identifier_decl": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "file_identifier"
        },
        {
          "type": "FIELD",
          "name": "file_identifier_constant",
          "content": {
            "type": "SYMBOL",
            "name": "string_constant"
          }
        },
        {
          "type": "STRING",
          "value": ";"
        }
      ]
    },
    "value": {
      "type": "CHOICE",
      "members": [
        {
          "type": "FIELD",
          "name": "single_value",
          "content": {
            "type": "SYMBOL",
            "name": "single_value"
          }
        },
        {
          "type": "FIELD",
          "name": "object_value",
          "content": {
            "type": "SYMBOL",
            "name": "object"
          }
        },
        {
          "type": "FIELD",
          "name": "array_value",
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": "["
              },
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "FIELD",
                    "name": "array_value_item",
                    "content": {
                      "type": "SYMBOL",
                      "name": "value"
                    }
                  },
                  {
                    "type": "REPEAT",
                    "content": {
                      "type": "SEQ",
                      "members": [
                        {
                          "type": "STRING",
                          "value": ","
                        },
                        {
                          "type": "FIELD",
                          "name": "array_value_item",
                          "content": {
                            "type": "SYMBOL",
                            "name": "value"
                          }
                        }
                      ]
                    }
                  }
                ]
              },
              {
                "type": "STRING",
                "value": "]"
              }
            ]
          }
        }
      ]
    },
    "enum_val_decl": {
      "type": "SEQ",
      "members": [
        {
          "type": "REPEAT",
          "content": {
            "type": "FIELD",
            "name": "documentation",
            "content": {
              "type": "SYMBOL",
              "name": "documentation"
            }
          }
        },
        {
          "type": "FIELD",
          "name": "enum_key",
          "content": {
            "type": "SYMBOL",
            "name": "identifier"
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": "="
                },
                {
                  "type": "FIELD",
                  "name": "enum_int_constant",
                  "content": {
                    "type": "SYMBOL",
                    "name": "int_constant"
                  }
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "field_decl": {
      "type": "SEQ",
      "members": [
        {
          "type": "REPEAT",
          "content": {
            "type": "FIELD",
            "name": "documentation",
            "content": {
              "type": "SYMBOL",
              "name": "documentation"
            }
          }
        },
        {
          "type": "FIELD",
          "name": "field_key",
          "content": {
            "type": "SYMBOL",
            "name": "identifier"
          }
        },
        {
          "type": "STRING",
          "value": ":"
        },
        {
          "type": "FIELD",
          "name": "field_type",
          "content": {
            "type": "SYMBOL",
            "name": "type"
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": "="
                },
                {
                  "type": "FIELD",
                  "name": "field_value",
                  "content": {
                    "type": "SYMBOL",
                    "name": "value"
                  }
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "FIELD",
              "name": "metadata",
              "content": {
                "type": "SYMBOL",
                "name": "metadata"
              }
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": ";"
        }
      ]
    },
    "union_field_decl": {
      "type": "SEQ",
      "members": [
        {
          "type": "REPEAT",
          "content": {
            "type": "FIELD",
            "name": "documentation",
            "content": {
              "type": "SYMBOL",
              "name": "documentation"
            }
          }
        },
        {
          "type": "FIELD",
          "name": "union_field_key",
          "content": {
            "type": "SYMBOL",
            "name": "identifier"
          }
        },
        {
          "type": "STRING",
          "value": ":"
        },
        {
          "type": "FIELD",
          "name": "union_field_value",
          "content": {
            "type": "SYMBOL",
            "name": "type"
          }
        }
      ]
    },
    "type": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "bool"
        },
        {
          "type": "STRING",
          "value": "byte"
        },
        {
          "type": "STRING",
          "value": "ubyte"
        },
        {
          "type": "STRING",
          "value": "short"
        },
        {
          "type": "STRING",
          "value": "ushort"
        },
        {
          "type": "STRING",
          "value": "int"
        },
        {
          "type": "STRING",
          "value": "uint"
        },
        {
          "type": "STRING",
          "value": "float"
        },
        {
          "type": "STRING",
          "value": "long"
        },
        {
          "type": "STRING",
          "value": "ulong"
        },
        {
          "type": "STRING",
          "value": "double"
        },
        {
          "type": "STRING",
          "value": "int8"
        },
        {
          "type": "STRING",
          "value": "uint8"
        },
        {
          "type": "STRING",
          "value": "int16"
        },
        {
          "type": "STRING",
          "value": "uint16"
        },
        {
          "type": "STRING",
          "value": "int32"
        },
        {
          "type": "STRING",
          "value": "uint32"
        },
        {
          "type": "STRING",
          "value": "int64"
        },
        {
          "type": "STRING",
          "value": "uint64"
        },
        {
          "type": "STRING",
          "value": "float32"
        },
        {
          "type": "STRING",
          "value": "float64"
        },
        {
          "type": "STRING",
          "value": "string"
        },
        {
          "type": "FIELD",
          "name": "full_ident",
          "content": {
            "type": "SYMBOL",
            "name": "full_ident"
          }
        },
        {
          "type": "FIELD",
          "name": "array_type",
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": "["
              },
              {
                "type": "SYMBOL",
                "name": "type"
              },
              {
                "type": "STRING",
                "value": "]"
              }
            ]
          }
        }
      ]
    },
    "rpc_decl": {
      "type": "SEQ",
      "members": [
        {
          "type": "REPEAT",
          "content": {
            "type": "FIELD",
            "name": "documentation",
            "content": {
              "type": "SYMBOL",
              "name": "documentation"
            }
          }
        },
        {
          "type": "STRING",
          "value": "rpc_service"
        },
        {
          "type": "FIELD",
          "name": "rpc_name",
          "content": {
            "type": "SYMBOL",
            "name": "identifier"
          }
        },
        {
          "type": "STRING",
          "value": "{"
        },
        {
          "type": "FIELD",
          "name": "rpc_method",
          "content": {
            "type": "REPEAT",
            "content": {
              "type": "SYMBOL",
              "name": "rpc_method"
            }
          }
        },
        {
          "type": "STRING",
          "value": "}"
        }
      ]
    },
    "rpc_method": {
      "type": "SEQ",
      "members": [
        {
          "type": "REPEAT",
          "content": {
            "type": "FIELD",
            "name": "documentation",
            "content": {
              "type": "SYMBOL",
              "name": "documentation"
            }
          }
        },
        {
          "type": "FIELD",
          "name": "rpc_method_name",
          "content": {
            "type": "SYMBOL",
            "name": "identifier"
          }
        },
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "FIELD",
          "name": "rpc_parameter",
          "content": {
            "type": "SYMBOL",
            "name": "identifier"
          }
        },
        {
          "type": "STRING",
          "value": ")"
        },
        {
          "type": "STRING",
          "value": ":"
        },
        {
          "type": "FIELD",
          "name": "rpc_return_type",
          "content": {
            "type": "SYMBOL",
            "name": "identifier"
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "FIELD",
              "name": "metadata",
              "content": {
                "type": "SYMBOL",
                "name": "metadata"
              }
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": ";"
        }
      ]
    },
    "metadata": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "FIELD",
              "name": "field_and_value",
              "content": {
                "type": "SYMBOL",
                "name": "field_and_value"
              }
            },
            {
              "type": "REPEAT",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": ","
                  },
                  {
                    "type": "FIELD",
                    "name": "field_and_value",
                    "content": {
                      "type": "SYMBOL",
                      "name": "field_and_value"
                    }
                  }
                ]
              }
            }
          ]
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "field_and_value": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "field_key",
          "content": {
            "type": "SYMBOL",
            "name": "identifier"
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": ":"
                },
                {
                  "type": "FIELD",
                  "name": "field_value",
                  "content": {
                    "type": "SYMBOL",
                    "name": "single_value"
                  }
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "single_value": {
      "type": "CHOICE",
      "members": [
        {
          "type": "FIELD",
          "name": "scalar_value",
          "content": {
            "type": "SYMBOL",
            "name": "scalar"
          }
        },
        {
          "type": "FIELD",
          "name": "string_constant",
          "content": {
            "type": "SYMBOL",
            "name": "string_constant"
          }
        },
        {
          "type": "FIELD",
          "name": "full_ident",
          "content": {
            "type": "SYMBOL",
            "name": "full_ident"
          }
        }
      ]
    },
    "identifier": {
      "type": "TOKEN",
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "PATTERN",
            "value": "[a-zA-Z]"
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "REPEAT",
                "content": {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "PATTERN",
                      "value": "[a-zA-Z]"
                    },
                    {
                      "type": "PATTERN",
                      "value": "[0-9]"
                    },
                    {
                      "type": "STRING",
                      "value": "_"
                    }
                  ]
                }
              },
              {
                "type": "BLANK"
              }
            ]
          }
        ]
      }
    },
    "full_ident": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "identifier"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "REPEAT",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": "."
                  },
                  {
                    "type": "SYMBOL",
                    "name": "identifier"
                  }
                ]
              }
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "scalar": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "float_constant"
        },
        {
          "type": "SYMBOL",
          "name": "int_constant"
        },
        {
          "type": "SYMBOL",
          "name": "bool_constant"
        }
      ]
    },
    "bool_constant": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "true"
        },
        {
          "type": "SYMBOL",
          "name": "false"
        }
      ]
    },
    "int_constant": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "plus_minus_constant"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "int_lit"
        }
      ]
    },
    "float_constant": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "plus_minus_constant"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "float_lit"
        }
      ]
    },
    "plus_minus_constant": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "plus_token"
        },
        {
          "type": "SYMBOL",
          "name": "minus_token"
        }
      ]
    },
    "plus_token": {
      "type": "TOKEN",
      "content": {
        "type": "STRING",
        "value": "+"
      }
    },
    "minus_token": {
      "type": "TOKEN",
      "content": {
        "type": "STRING",
        "value": "-"
      }
    },
    "true": {
      "type": "STRING",
      "value": "true"
    },
    "false": {
      "type": "STRING",
      "value": "false"
    },
    "int_lit": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "decimal_lit"
        },
        {
          "type": "SYMBOL",
          "name": "hex_lit"
        }
      ]
    },
    "decimal_lit": {
      "type": "CHOICE",
      "members": [
        {
          "type": "TOKEN",
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "PATTERN",
                "value": "[1-9]"
              },
              {
                "type": "REPEAT",
                "content": {
                  "type": "PATTERN",
                  "value": "[0-9]"
                }
              }
            ]
          }
        },
        {
          "type": "TOKEN",
          "content": {
            "type": "STRING",
            "value": "0"
          }
        }
      ]
    },
    "hex_lit": {
      "type": "TOKEN",
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "0"
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "STRING",
                "value": "x"
              },
              {
                "type": "STRING",
                "value": "X"
              }
            ]
          },
          {
            "type": "PATTERN",
            "value": "[0-9A-Fa-f]"
          },
          {
            "type": "REPEAT",
            "content": {
              "type": "PATTERN",
              "value": "[0-9A-Fa-f]"
            }
          }
        ]
      }
    },
    "float_lit": {
      "type": "CHOICE",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "inf_token"
            },
            {
              "type": "SYMBOL",
              "name": "nan_token"
            }
          ]
        },
        {
          "type": "TOKEN",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "PATTERN",
                        "value": "[0-9]"
                      },
                      {
                        "type": "REPEAT",
                        "content": {
                          "type": "PATTERN",
                          "value": "[0-9]"
                        }
                      }
                    ]
                  },
                  {
                    "type": "STRING",
                    "value": "."
                  },
                  {
                    "type": "CHOICE",
                    "members": [
                      {
                        "type": "SEQ",
                        "members": [
                          {
                            "type": "PATTERN",
                            "value": "[0-9]"
                          },
                          {
                            "type": "REPEAT",
                            "content": {
                              "type": "PATTERN",
                              "value": "[0-9]"
                            }
                          }
                        ]
                      },
                      {
                        "type": "BLANK"
                      }
                    ]
                  },
                  {
                    "type": "CHOICE",
                    "members": [
                      {
                        "type": "SEQ",
                        "members": [
                          {
                            "type": "CHOICE",
                            "members": [
                              {
                                "type": "STRING",
                                "value": "e"
                              },
                              {
                                "type": "STRING",
                                "value": "E"
                              }
                            ]
                          },
                          {
                            "type": "CHOICE",
                            "members": [
                              {
                                "type": "CHOICE",
                                "members": [
                                  {
                                    "type": "STRING",
                                    "value": "+"
                                  },
                                  {
                                    "type": "STRING",
                                    "value": "-"
                                  }
                                ]
                              },
                              {
                                "type": "BLANK"
                              }
                            ]
                          },
                          {
                            "type": "SEQ",
                            "members": [
                              {
                                "type": "PATTERN",
                                "value": "[0-9]"
                              },
                              {
                                "type": "REPEAT",
                                "content": {
                                  "type": "PATTERN",
                                  "value": "[0-9]"
                                }
                              }
                            ]
                          }
                        ]
                      },
                      {
                        "type": "BLANK"
                      }
                    ]
                  }
                ]
              },
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "PATTERN",
                        "value": "[0-9]"
                      },
                      {
                        "type": "REPEAT",
                        "content": {
                          "type": "PATTERN",
                          "value": "[0-9]"
                        }
                      }
                    ]
                  },
                  {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "CHOICE",
                        "members": [
                          {
                            "type": "STRING",
                            "value": "e"
                          },
                          {
                            "type": "STRING",
                            "value": "E"
                          }
                        ]
                      },
                      {
                        "type": "CHOICE",
                        "members": [
                          {
                            "type": "CHOICE",
                            "members": [
                              {
                                "type": "STRING",
                                "value": "+"
                              },
                              {
                                "type": "STRING",
                                "value": "-"
                              }
                            ]
                          },
                          {
                            "type": "BLANK"
                          }
                        ]
                      },
                      {
                        "type": "SEQ",
                        "members": [
                          {
                            "type": "PATTERN",
                            "value": "[0-9]"
                          },
                          {
                            "type": "REPEAT",
                            "content": {
                              "type": "PATTERN",
                              "value": "[0-9]"
                            }
                          }
                        ]
                      }
                    ]
                  }
                ]
              },
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": "."
                  },
                  {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "PATTERN",
                        "value": "[0-9]"
                      },
                      {
                        "type": "REPEAT",
                        "content": {
                          "type": "PATTERN",
                          "value": "[0-9]"
                        }
                      }
                    ]
                  },
                  {
                    "type": "CHOICE",
                    "members": [
                      {
                        "type": "SEQ",
                        "members": [
                          {
                            "type": "CHOICE",
                            "members": [
                              {
                                "type": "STRING",
                                "value": "e"
                              },
                              {
                                "type": "STRING",
                                "value": "E"
                              }
                            ]
                          },
                          {
                            "type": "CHOICE",
                            "members": [
                              {
                                "type": "CHOICE",
                                "members": [
                                  {
                                    "type": "STRING",
                                    "value": "+"
                                  },
                                  {
                                    "type": "STRING",
                                    "value": "-"
                                  }
                                ]
                              },
                              {
                                "type": "BLANK"
                              }
                            ]
                          },
                          {
                            "type": "SEQ",
                            "members": [
                              {
                                "type": "PATTERN",
                                "value": "[0-9]"
                              },
                              {
                                "type": "REPEAT",
                                "content": {
                                  "type": "PATTERN",
                                  "value": "[0-9]"
                                }
                              }
                            ]
                          }
                        ]
                      },
                      {
                        "type": "BLANK"
                      }
                    ]
                  }
                ]
              }
            ]
          }
        }
      ]
    },
    "inf_token": {
      "type": "CHOICE",
      "members": [
        {
          "type": "TOKEN",
          "content": {
            "type": "STRING",
            "value": "infinity"
          }
        },
        {
          "type": "TOKEN",
          "content": {
            "type": "STRING",
            "value": "inf"
          }
        }
      ]
    },
    "nan_token": {
      "type": "TOKEN",
      "content": {
        "type": "STRING",
        "value": "nan"
      }
    },
    "string_constant": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "\""
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "IMMEDIATE_TOKEN",
                "content": {
                  "type": "PREC",
                  "value": 1,
                  "content": {
                    "type": "PATTERN",
                    "value": "[^\"\\\\]+"
                  }
                }
              },
              {
                "type": "SYMBOL",
                "name": "escape_sequence"
              }
            ]
          }
        },
        {
          "type": "STRING",
          "value": "\""
        }
      ]
    },
    "escape_sequence": {
      "type": "IMMEDIATE_TOKEN",
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "\\"
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "PATTERN",
                "value": "[^xuU]"
              },
              {
                "type": "PATTERN",
                "value": "\\d{2,3}"
              },
              {
                "type": "PATTERN",
                "value": "x[0-9a-fA-F]{2,}"
              },
              {
                "type": "PATTERN",
                "value": "u[0-9a-fA-F]{4}"
              },
              {
                "type": "PATTERN",
                "value": "U[0-9a-fA-F]{8}"
              }
            ]
          }
        ]
      }
    },
    "comment": {
      "type": "TOKEN",
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "PREC",
            "value": 1,
            "content": {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": "//"
                },
                {
                  "type": "PATTERN",
                  "value": ".*"
                }
              ]
            }
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": "/*"
              },
              {
                "type": "PATTERN",
                "value": "[^*]*\\*+([^/*][^*]*\\*+)*"
              },
              {
                "type": "STRING",
                "value": "/"
              }
            ]
          }
        ]
      }
    }
  },
  "extras": [
    {
      "type": "SYMBOL",
      "name": "comment"
    },
    {
      "type": "PATTERN",
      "value": "\\s"
    }
  ],
  "conflicts": [],
  "precedences": [],
  "externals": [],
  "inline": [],
  "supertypes": []
}
