{
  "name": "json",
  "rules": {
    "document": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "schema"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "ALIAS",
              "content": {
                "type": "SYMBOL",
                "name": "rootObject"
              },
              "named": true,
              "value": "object"
            },
            {
              "type": "SYMBOL",
              "name": "_value"
            }
          ]
        }
      ]
    },
    "_value": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "object"
        },
        {
          "type": "SYMBOL",
          "name": "array"
        },
        {
          "type": "SYMBOL",
          "name": "number"
        },
        {
          "type": "SYMBOL",
          "name": "string"
        },
        {
          "type": "SYMBOL",
          "name": "true"
        },
        {
          "type": "SYMBOL",
          "name": "false"
        },
        {
          "type": "SYMBOL",
          "name": "null"
        }
      ]
    },
    "rootObject": {
      "type": "SEQ",
      "members": [
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "pair"
            },
            {
              "type": "REPEAT",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "CHOICE",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ","
                      },
                      {
                        "type": "BLANK"
                      }
                    ]
                  },
                  {
                    "type": "SYMBOL",
                    "name": "pair"
                  }
                ]
              }
            }
          ]
        }
      ]
    },
    "comment": {
      "type": "TOKEN",
      "content": {
        "type": "PATTERN",
        "value": "\\/\\/.*\\n"
      }
    },
    "object": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "{"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "pair"
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "CHOICE",
                        "members": [
                          {
                            "type": "STRING",
                            "value": ","
                          },
                          {
                            "type": "BLANK"
                          }
                        ]
                      },
                      {
                        "type": "SYMBOL",
                        "name": "pair"
                      }
                    ]
                  }
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": ","
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "}"
        }
      ]
    },
    "pair": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "key",
          "content": {
            "type": "SYMBOL",
            "name": "string"
          }
        },
        {
          "type": "STRING",
          "value": ":"
        },
        {
          "type": "FIELD",
          "name": "value",
          "content": {
            "type": "SYMBOL",
            "name": "_value"
          }
        }
      ]
    },
    "array": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "["
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_value"
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "CHOICE",
                        "members": [
                          {
                            "type": "STRING",
                            "value": ","
                          },
                          {
                            "type": "BLANK"
                          }
                        ]
                      },
                      {
                        "type": "SYMBOL",
                        "name": "_value"
                      }
                    ]
                  }
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": ","
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "]"
        }
      ]
    },
    "number": {
      "type": "PREC",
      "value": 2,
      "content": {
        "type": "TOKEN",
        "content": {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "STRING",
                      "value": "0x"
                    },
                    {
                      "type": "STRING",
                      "value": "0X"
                    }
                  ]
                },
                {
                  "type": "PATTERN",
                  "value": "[\\da-fA-F][\\da-fA-F_]*[\\da-fA-F]"
                }
              ]
            },
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "SEQ",
                      "members": [
                        {
                          "type": "CHOICE",
                          "members": [
                            {
                              "type": "CHOICE",
                              "members": [
                                {
                                  "type": "STRING",
                                  "value": "-"
                                },
                                {
                                  "type": "STRING",
                                  "value": "+"
                                }
                              ]
                            },
                            {
                              "type": "BLANK"
                            }
                          ]
                        },
                        {
                          "type": "CHOICE",
                          "members": [
                            {
                              "type": "STRING",
                              "value": "0"
                            },
                            {
                              "type": "SEQ",
                              "members": [
                                {
                                  "type": "PATTERN",
                                  "value": "[1-9]"
                                },
                                {
                                  "type": "CHOICE",
                                  "members": [
                                    {
                                      "type": "PATTERN",
                                      "value": "[\\d_]+"
                                    },
                                    {
                                      "type": "BLANK"
                                    }
                                  ]
                                },
                                {
                                  "type": "CHOICE",
                                  "members": [
                                    {
                                      "type": "PATTERN",
                                      "value": "\\d"
                                    },
                                    {
                                      "type": "BLANK"
                                    }
                                  ]
                                }
                              ]
                            }
                          ]
                        }
                      ]
                    },
                    {
                      "type": "STRING",
                      "value": "."
                    },
                    {
                      "type": "CHOICE",
                      "members": [
                        {
                          "type": "PATTERN",
                          "value": "[\\d_]+"
                        },
                        {
                          "type": "BLANK"
                        }
                      ]
                    },
                    {
                      "type": "CHOICE",
                      "members": [
                        {
                          "type": "SEQ",
                          "members": [
                            {
                              "type": "CHOICE",
                              "members": [
                                {
                                  "type": "STRING",
                                  "value": "e"
                                },
                                {
                                  "type": "STRING",
                                  "value": "E"
                                }
                              ]
                            },
                            {
                              "type": "SEQ",
                              "members": [
                                {
                                  "type": "CHOICE",
                                  "members": [
                                    {
                                      "type": "CHOICE",
                                      "members": [
                                        {
                                          "type": "STRING",
                                          "value": "-"
                                        },
                                        {
                                          "type": "STRING",
                                          "value": "+"
                                        }
                                      ]
                                    },
                                    {
                                      "type": "BLANK"
                                    }
                                  ]
                                },
                                {
                                  "type": "PATTERN",
                                  "value": "[\\d_]+"
                                }
                              ]
                            }
                          ]
                        },
                        {
                          "type": "BLANK"
                        }
                      ]
                    }
                  ]
                },
                {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "STRING",
                      "value": "."
                    },
                    {
                      "type": "PATTERN",
                      "value": "[\\d_]+"
                    },
                    {
                      "type": "CHOICE",
                      "members": [
                        {
                          "type": "SEQ",
                          "members": [
                            {
                              "type": "CHOICE",
                              "members": [
                                {
                                  "type": "STRING",
                                  "value": "e"
                                },
                                {
                                  "type": "STRING",
                                  "value": "E"
                                }
                              ]
                            },
                            {
                              "type": "SEQ",
                              "members": [
                                {
                                  "type": "CHOICE",
                                  "members": [
                                    {
                                      "type": "CHOICE",
                                      "members": [
                                        {
                                          "type": "STRING",
                                          "value": "-"
                                        },
                                        {
                                          "type": "STRING",
                                          "value": "+"
                                        }
                                      ]
                                    },
                                    {
                                      "type": "BLANK"
                                    }
                                  ]
                                },
                                {
                                  "type": "PATTERN",
                                  "value": "[\\d_]+"
                                }
                              ]
                            }
                          ]
                        },
                        {
                          "type": "BLANK"
                        }
                      ]
                    }
                  ]
                },
                {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "SEQ",
                      "members": [
                        {
                          "type": "CHOICE",
                          "members": [
                            {
                              "type": "CHOICE",
                              "members": [
                                {
                                  "type": "STRING",
                                  "value": "-"
                                },
                                {
                                  "type": "STRING",
                                  "value": "+"
                                }
                              ]
                            },
                            {
                              "type": "BLANK"
                            }
                          ]
                        },
                        {
                          "type": "CHOICE",
                          "members": [
                            {
                              "type": "STRING",
                              "value": "0"
                            },
                            {
                              "type": "SEQ",
                              "members": [
                                {
                                  "type": "PATTERN",
                                  "value": "[1-9]"
                                },
                                {
                                  "type": "CHOICE",
                                  "members": [
                                    {
                                      "type": "PATTERN",
                                      "value": "[\\d_]+"
                                    },
                                    {
                                      "type": "BLANK"
                                    }
                                  ]
                                },
                                {
                                  "type": "CHOICE",
                                  "members": [
                                    {
                                      "type": "PATTERN",
                                      "value": "\\d"
                                    },
                                    {
                                      "type": "BLANK"
                                    }
                                  ]
                                }
                              ]
                            }
                          ]
                        }
                      ]
                    },
                    {
                      "type": "CHOICE",
                      "members": [
                        {
                          "type": "SEQ",
                          "members": [
                            {
                              "type": "CHOICE",
                              "members": [
                                {
                                  "type": "STRING",
                                  "value": "e"
                                },
                                {
                                  "type": "STRING",
                                  "value": "E"
                                }
                              ]
                            },
                            {
                              "type": "SEQ",
                              "members": [
                                {
                                  "type": "CHOICE",
                                  "members": [
                                    {
                                      "type": "CHOICE",
                                      "members": [
                                        {
                                          "type": "STRING",
                                          "value": "-"
                                        },
                                        {
                                          "type": "STRING",
                                          "value": "+"
                                        }
                                      ]
                                    },
                                    {
                                      "type": "BLANK"
                                    }
                                  ]
                                },
                                {
                                  "type": "PATTERN",
                                  "value": "[\\d_]+"
                                }
                              ]
                            }
                          ]
                        },
                        {
                          "type": "BLANK"
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "STRING",
                      "value": "0b"
                    },
                    {
                      "type": "STRING",
                      "value": "0B"
                    }
                  ]
                },
                {
                  "type": "PATTERN",
                  "value": "[01][01_]*[01]"
                }
              ]
            },
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "STRING",
                      "value": "0o"
                    },
                    {
                      "type": "STRING",
                      "value": "0O"
                    }
                  ]
                },
                {
                  "type": "PATTERN",
                  "value": "[0-7][0-7_]*[0-7]"
                }
              ]
            }
          ]
        }
      }
    },
    "string": {
      "type": "PREC",
      "value": 1,
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": "'"
                  },
                  {
                    "type": "STRING",
                    "value": "'"
                  }
                ]
              },
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": "\""
                  },
                  {
                    "type": "STRING",
                    "value": "\""
                  }
                ]
              }
            ]
          },
          {
            "type": "PATTERN",
            "value": "[^:{},\\[\\]\\s'\"`]+"
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": "'"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "_string_content"
                  },
                  {
                    "type": "STRING",
                    "value": "'"
                  }
                ]
              },
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": "\""
                  },
                  {
                    "type": "SYMBOL",
                    "name": "_string_content"
                  },
                  {
                    "type": "STRING",
                    "value": "\""
                  }
                ]
              }
            ]
          }
        ]
      }
    },
    "_string_content": {
      "type": "REPEAT1",
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "IMMEDIATE_TOKEN",
            "content": {
              "type": "PATTERN",
              "value": "[^\\\\'\\\\\"]+"
            }
          },
          {
            "type": "SYMBOL",
            "name": "_escape_sequence"
          }
        ]
      }
    },
    "_escape_sequence": {
      "type": "IMMEDIATE_TOKEN",
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "\\"
          },
          {
            "type": "PATTERN",
            "value": "(\\'|\\\"|\\\\|\\/|b|n|r|t|u)"
          }
        ]
      }
    },
    "true": {
      "type": "STRING",
      "value": "true"
    },
    "false": {
      "type": "STRING",
      "value": "false"
    },
    "null": {
      "type": "STRING",
      "value": "null"
    },
    "schema": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "`"
        },
        {
          "type": "PATTERN",
          "value": "[^`]*"
        },
        {
          "type": "STRING",
          "value": "`"
        }
      ]
    }
  },
  "extras": [
    {
      "type": "PATTERN",
      "value": "\\s"
    },
    {
      "type": "SYMBOL",
      "name": "comment"
    }
  ],
  "conflicts": [],
  "externals": [],
  "inline": [],
  "supertypes": [
    "_value"
  ]
}

