{
  "name": "haxe",
  "word": "identifier",
  "rules": {
    "module": {
      "type": "SEQ",
      "members": [
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "statement"
          }
        }
      ]
    },
    "statement": {
      "type": "PREC_LEFT",
      "value": 0,
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "SYMBOL",
            "name": "preprocessor_statement"
          },
          {
            "type": "SYMBOL",
            "name": "import_statement"
          },
          {
            "type": "SYMBOL",
            "name": "using_statement"
          },
          {
            "type": "SYMBOL",
            "name": "package_statement"
          },
          {
            "type": "SYMBOL",
            "name": "declaration"
          },
          {
            "type": "SYMBOL",
            "name": "switch_expression"
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "SYMBOL",
                "name": "expression"
              },
              {
                "type": "SYMBOL",
                "name": "_lookback_semicolon"
              }
            ]
          },
          {
            "type": "SYMBOL",
            "name": "conditional_statement"
          },
          {
            "type": "SYMBOL",
            "name": "throw_statement"
          },
          {
            "type": "SYMBOL",
            "name": "block"
          }
        ]
      }
    },
    "preprocessor_statement": {
      "type": "PREC_RIGHT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "#"
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "IMMEDIATE_TOKEN",
                    "content": {
                      "type": "CHOICE",
                      "members": [
                        {
                          "type": "STRING",
                          "value": "if"
                        },
                        {
                          "type": "STRING",
                          "value": "elseif"
                        }
                      ]
                    }
                  },
                  {
                    "type": "SYMBOL",
                    "name": "expression"
                  }
                ]
              },
              {
                "type": "IMMEDIATE_TOKEN",
                "content": {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "STRING",
                      "value": "else"
                    },
                    {
                      "type": "STRING",
                      "value": "end"
                    }
                  ]
                }
              }
            ]
          }
        ]
      }
    },
    "package_statement": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "package"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "FIELD",
              "name": "name",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "REPEAT",
                    "content": {
                      "type": "SEQ",
                      "members": [
                        {
                          "type": "SYMBOL",
                          "name": "package_name"
                        },
                        {
                          "type": "STRING",
                          "value": "."
                        }
                      ]
                    }
                  },
                  {
                    "type": "SYMBOL",
                    "name": "package_name"
                  }
                ]
              }
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "_semicolon"
        }
      ]
    },
    "package_name": {
      "type": "SYMBOL",
      "name": "_camelCaseIdentifier"
    },
    "type_name": {
      "type": "SYMBOL",
      "name": "_pascalCaseIdentifier"
    },
    "import_statement": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "import"
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "REPEAT",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "SYMBOL",
                    "name": "package_name"
                  },
                  {
                    "type": "STRING",
                    "value": "."
                  }
                ]
              }
            },
            {
              "type": "REPEAT",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "SYMBOL",
                    "name": "type_name"
                  },
                  {
                    "type": "STRING",
                    "value": "."
                  }
                ]
              }
            },
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "type_name"
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "SEQ",
                      "members": [
                        {
                          "type": "STRING",
                          "value": "."
                        },
                        {
                          "type": "ALIAS",
                          "content": {
                            "type": "SYMBOL",
                            "name": "_camelCaseIdentifier"
                          },
                          "named": true,
                          "value": "identifier"
                        }
                      ]
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                }
              ]
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "_semicolon"
        }
      ]
    },
    "using_statement": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "using"
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "REPEAT",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "SYMBOL",
                    "name": "package_name"
                  },
                  {
                    "type": "STRING",
                    "value": "."
                  }
                ]
              }
            },
            {
              "type": "REPEAT",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "SYMBOL",
                    "name": "type_name"
                  },
                  {
                    "type": "STRING",
                    "value": "."
                  }
                ]
              }
            },
            {
              "type": "SYMBOL",
              "name": "type_name"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "_semicolon"
        }
      ]
    },
    "throw_statement": {
      "type": "PREC_RIGHT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "throw"
          },
          {
            "type": "SYMBOL",
            "name": "expression"
          },
          {
            "type": "SYMBOL",
            "name": "_lookback_semicolon"
          }
        ]
      }
    },
    "_rhs_expression": {
      "type": "PREC_RIGHT",
      "value": 0,
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_literal"
          },
          {
            "type": "SYMBOL",
            "name": "identifier"
          },
          {
            "type": "SYMBOL",
            "name": "member_expression"
          },
          {
            "type": "SYMBOL",
            "name": "call_expression"
          }
        ]
      }
    },
    "_unaryExpression": {
      "type": "PREC_LEFT",
      "value": 1,
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "SEQ",
            "members": [
              {
                "type": "SYMBOL",
                "name": "operator"
              },
              {
                "type": "SYMBOL",
                "name": "_rhs_expression"
              }
            ]
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "SYMBOL",
                "name": "_rhs_expression"
              },
              {
                "type": "SYMBOL",
                "name": "operator"
              }
            ]
          }
        ]
      }
    },
    "runtime_type_check_expression": {
      "type": "PREC",
      "value": 20,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "("
          },
          {
            "type": "ALIAS",
            "content": {
              "type": "SYMBOL",
              "name": "structure_type_pair"
            },
            "named": false,
            "value": "type_check"
          },
          {
            "type": "STRING",
            "value": ")"
          }
        ]
      }
    },
    "switch_expression": {
      "type": "PREC_RIGHT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "switch"
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "identifier"
              },
              {
                "type": "SYMBOL",
                "name": "_parenthesized_expression"
              }
            ]
          },
          {
            "type": "ALIAS",
            "content": {
              "type": "SYMBOL",
              "name": "switch_block"
            },
            "named": true,
            "value": "block"
          }
        ]
      }
    },
    "_closing_brace": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_closing_brace_marker"
        },
        {
          "type": "STRING",
          "value": "}"
        }
      ]
    },
    "switch_block": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "{"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "case_statement"
          }
        },
        {
          "type": "SYMBOL",
          "name": "_closing_brace"
        }
      ]
    },
    "case_statement": {
      "type": "PREC_RIGHT",
      "value": 0,
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": "case"
              },
              {
                "type": "CHOICE",
                "members": [
                  {
                    "type": "SYMBOL",
                    "name": "_rhs_expression"
                  },
                  {
                    "type": "ALIAS",
                    "content": {
                      "type": "STRING",
                      "value": "_"
                    },
                    "named": true,
                    "value": "_rhs_expression"
                  }
                ]
              },
              {
                "type": "STRING",
                "value": ":"
              },
              {
                "type": "SYMBOL",
                "name": "statement"
              }
            ]
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": "default"
              },
              {
                "type": "STRING",
                "value": ":"
              },
              {
                "type": "SYMBOL",
                "name": "statement"
              }
            ]
          }
        ]
      }
    },
    "cast_expression": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "cast"
            },
            {
              "type": "SYMBOL",
              "name": "_rhs_expression"
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "cast"
            },
            {
              "type": "STRING",
              "value": "("
            },
            {
              "type": "SYMBOL",
              "name": "_rhs_expression"
            },
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "STRING",
                      "value": ","
                    },
                    {
                      "type": "FIELD",
                      "name": "type",
                      "content": {
                        "type": "SYMBOL",
                        "name": "type"
                      }
                    }
                  ]
                },
                {
                  "type": "BLANK"
                }
              ]
            },
            {
              "type": "STRING",
              "value": ")"
            }
          ]
        }
      ]
    },
    "type_trace_expression": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "$type"
        },
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "SYMBOL",
          "name": "_rhs_expression"
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "_parenthesized_expression": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "REPEAT1",
          "content": {
            "type": "PREC_LEFT",
            "value": 0,
            "content": {
              "type": "SYMBOL",
              "name": "expression"
            }
          }
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "range_expression": {
      "type": "PREC",
      "value": 1,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "identifier"
          },
          {
            "type": "STRING",
            "value": "in"
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "SYMBOL",
                    "name": "integer"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "_rangeOperator"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "integer"
                  }
                ]
              },
              {
                "type": "SYMBOL",
                "name": "identifier"
              }
            ]
          }
        ]
      }
    },
    "expression": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_unaryExpression"
        },
        {
          "type": "SYMBOL",
          "name": "subscript_expression"
        },
        {
          "type": "SYMBOL",
          "name": "runtime_type_check_expression"
        },
        {
          "type": "SYMBOL",
          "name": "cast_expression"
        },
        {
          "type": "SYMBOL",
          "name": "type_trace_expression"
        },
        {
          "type": "SYMBOL",
          "name": "range_expression"
        },
        {
          "type": "SYMBOL",
          "name": "_parenthesized_expression"
        },
        {
          "type": "SYMBOL",
          "name": "switch_expression"
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_rhs_expression"
            },
            {
              "type": "REPEAT",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "SYMBOL",
                    "name": "operator"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "_rhs_expression"
                  }
                ]
              }
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "return"
            },
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_rhs_expression"
                },
                {
                  "type": "BLANK"
                }
              ]
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "untyped"
            },
            {
              "type": "SYMBOL",
              "name": "_rhs_expression"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "break"
        },
        {
          "type": "STRING",
          "value": "continue"
        }
      ]
    },
    "subscript_expression": {
      "type": "PREC_LEFT",
      "value": 1,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "identifier"
              },
              {
                "type": "SYMBOL",
                "name": "_parenthesized_expression"
              },
              {
                "type": "SYMBOL",
                "name": "member_expression"
              }
            ]
          },
          {
            "type": "STRING",
            "value": "["
          },
          {
            "type": "FIELD",
            "name": "index",
            "content": {
              "type": "SYMBOL",
              "name": "expression"
            }
          },
          {
            "type": "STRING",
            "value": "]"
          }
        ]
      }
    },
    "member_expression": {
      "type": "PREC_RIGHT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "FIELD",
                "name": "object",
                "content": {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "STRING",
                      "value": "this"
                    },
                    {
                      "type": "SYMBOL",
                      "name": "identifier"
                    }
                  ]
                }
              },
              {
                "type": "FIELD",
                "name": "literal",
                "content": {
                  "type": "SYMBOL",
                  "name": "_literal"
                }
              }
            ]
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "TOKEN",
                "content": {
                  "type": "STRING",
                  "value": "."
                }
              },
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "ALIAS",
                    "content": {
                      "type": "STRING",
                      "value": "?"
                    },
                    "named": true,
                    "value": "operator"
                  },
                  {
                    "type": "STRING",
                    "value": "."
                  }
                ]
              }
            ]
          },
          {
            "type": "REPEAT1",
            "content": {
              "type": "FIELD",
              "name": "member",
              "content": {
                "type": "SYMBOL",
                "name": "_lhs_expression"
              }
            }
          }
        ]
      }
    },
    "_lhs_expression": {
      "type": "PREC",
      "value": 1,
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "SYMBOL",
            "name": "identifier"
          },
          {
            "type": "SYMBOL",
            "name": "member_expression"
          }
        ]
      }
    },
    "builtin_type": {
      "type": "PREC_RIGHT",
      "value": 0,
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "STRING",
            "value": "Void"
          },
          {
            "type": "STRING",
            "value": "Int"
          },
          {
            "type": "STRING",
            "value": "Float"
          },
          {
            "type": "STRING",
            "value": "Bool"
          },
          {
            "type": "STRING",
            "value": "Null"
          }
        ]
      }
    },
    "_function_type_args": {
      "type": "SEQ",
      "members": [
        {
          "type": "SEQ",
          "members": [
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "SYMBOL",
                      "name": "identifier"
                    },
                    {
                      "type": "STRING",
                      "value": ":"
                    }
                  ]
                },
                {
                  "type": "BLANK"
                }
              ]
            },
            {
              "type": "SYMBOL",
              "name": "type"
            }
          ]
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": ","
              },
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "CHOICE",
                    "members": [
                      {
                        "type": "SEQ",
                        "members": [
                          {
                            "type": "SYMBOL",
                            "name": "identifier"
                          },
                          {
                            "type": "STRING",
                            "value": ":"
                          }
                        ]
                      },
                      {
                        "type": "BLANK"
                      }
                    ]
                  },
                  {
                    "type": "SYMBOL",
                    "name": "type"
                  }
                ]
              }
            ]
          }
        }
      ]
    },
    "function_type": {
      "type": "PREC_RIGHT",
      "value": 0,
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": "("
              },
              {
                "type": "STRING",
                "value": ")"
              },
              {
                "type": "STRING",
                "value": "->"
              },
              {
                "type": "SYMBOL",
                "name": "type"
              }
            ]
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "SYMBOL",
                "name": "type"
              },
              {
                "type": "STRING",
                "value": "->"
              },
              {
                "type": "FIELD",
                "name": "return_type",
                "content": {
                  "type": "SYMBOL",
                  "name": "type"
                }
              }
            ]
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": "("
              },
              {
                "type": "SYMBOL",
                "name": "_function_type_args"
              },
              {
                "type": "STRING",
                "value": ")"
              },
              {
                "type": "STRING",
                "value": "->"
              },
              {
                "type": "SYMBOL",
                "name": "type"
              }
            ]
          }
        ]
      }
    },
    "type": {
      "type": "PREC_RIGHT",
      "value": 0,
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "SEQ",
            "members": [
              {
                "type": "CHOICE",
                "members": [
                  {
                    "type": "FIELD",
                    "name": "type_name",
                    "content": {
                      "type": "SYMBOL",
                      "name": "_lhs_expression"
                    }
                  },
                  {
                    "type": "FIELD",
                    "name": "built_in",
                    "content": {
                      "type": "ALIAS",
                      "content": {
                        "type": "SYMBOL",
                        "name": "builtin_type"
                      },
                      "named": true,
                      "value": "identifier"
                    }
                  }
                ]
              },
              {
                "type": "CHOICE",
                "members": [
                  {
                    "type": "SYMBOL",
                    "name": "type_params"
                  },
                  {
                    "type": "BLANK"
                  }
                ]
              }
            ]
          },
          {
            "type": "SYMBOL",
            "name": "function_type"
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": "("
              },
              {
                "type": "ALIAS",
                "content": {
                  "type": "SYMBOL",
                  "name": "type"
                },
                "named": false,
                "value": "type"
              },
              {
                "type": "STRING",
                "value": ")"
              }
            ]
          }
        ]
      }
    },
    "block": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "{"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "statement"
          }
        },
        {
          "type": "SYMBOL",
          "name": "_closing_brace"
        }
      ]
    },
    "metadata": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "TOKEN",
              "content": {
                "type": "STRING",
                "value": "@"
              }
            },
            {
              "type": "TOKEN",
              "content": {
                "type": "STRING",
                "value": "@:"
              }
            }
          ]
        },
        {
          "type": "FIELD",
          "name": "name",
          "content": {
            "type": "SYMBOL",
            "name": "_lhs_expression"
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": "("
                },
                {
                  "type": "SYMBOL",
                  "name": "expression"
                },
                {
                  "type": "STRING",
                  "value": ")"
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "_arg_list": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "expression"
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ","
                      },
                      {
                        "type": "SYMBOL",
                        "name": "expression"
                      }
                    ]
                  }
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "conditional_statement": {
      "type": "PREC_RIGHT",
      "value": 1,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "FIELD",
            "name": "name",
            "content": {
              "type": "STRING",
              "value": "if"
            }
          },
          {
            "type": "FIELD",
            "name": "arguments_list",
            "content": {
              "type": "SYMBOL",
              "name": "_arg_list"
            }
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "block"
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "CHOICE",
                    "members": [
                      {
                        "type": "STRING",
                        "value": "else"
                      },
                      {
                        "type": "STRING",
                        "value": "else if"
                      }
                    ]
                  },
                  {
                    "type": "SYMBOL",
                    "name": "block"
                  }
                ]
              },
              {
                "type": "BLANK"
              }
            ]
          }
        ]
      }
    },
    "_call": {
      "type": "PREC",
      "value": 1,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "FIELD",
            "name": "object",
            "content": {
              "type": "SYMBOL",
              "name": "_lhs_expression"
            }
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "type_params"
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "FIELD",
            "name": "arguments_list",
            "content": {
              "type": "SYMBOL",
              "name": "_arg_list"
            }
          }
        ]
      }
    },
    "_constructor_call": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "new"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "_call"
        }
      ]
    },
    "call_expression": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_call"
        },
        {
          "type": "SYMBOL",
          "name": "_constructor_call"
        }
      ]
    },
    "operator": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_binaryOperator"
        },
        {
          "type": "SYMBOL",
          "name": "_unaryOperator"
        }
      ]
    },
    "_unaryOperator": {
      "type": "PREC_RIGHT",
      "value": 0,
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_prefixUnaryOperator"
          },
          {
            "type": "SYMBOL",
            "name": "_postfixUnaryOperator"
          }
        ]
      }
    },
    "_prefixUnaryOperator": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "~"
        },
        {
          "type": "STRING",
          "value": "!"
        },
        {
          "type": "STRING",
          "value": "-"
        },
        {
          "type": "STRING",
          "value": "++"
        },
        {
          "type": "STRING",
          "value": "--"
        }
      ]
    },
    "_postfixUnaryOperator": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "++"
        },
        {
          "type": "STRING",
          "value": "--"
        }
      ]
    },
    "_binaryOperator": {
      "type": "PREC_LEFT",
      "value": 0,
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_arithmeticOperator"
          },
          {
            "type": "SYMBOL",
            "name": "_bitwiseOperator"
          },
          {
            "type": "SYMBOL",
            "name": "_logicalOperator"
          },
          {
            "type": "SYMBOL",
            "name": "_comparisonOperator"
          },
          {
            "type": "SYMBOL",
            "name": "_miscOperator"
          },
          {
            "type": "SYMBOL",
            "name": "_assignmentOperator"
          },
          {
            "type": "SYMBOL",
            "name": "_compoundAssignmentOperator"
          },
          {
            "type": "SYMBOL",
            "name": "_rangeOperator"
          }
        ]
      }
    },
    "_arithmeticOperator": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "%"
        },
        {
          "type": "STRING",
          "value": "*"
        },
        {
          "type": "STRING",
          "value": "/"
        },
        {
          "type": "STRING",
          "value": "+"
        },
        {
          "type": "STRING",
          "value": "-"
        }
      ]
    },
    "_bitwiseOperator": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "<<"
        },
        {
          "type": "STRING",
          "value": ">>"
        },
        {
          "type": "STRING",
          "value": ">>>"
        },
        {
          "type": "STRING",
          "value": "&"
        },
        {
          "type": "STRING",
          "value": "|"
        },
        {
          "type": "STRING",
          "value": "^"
        }
      ]
    },
    "_logicalOperator": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "&&"
        },
        {
          "type": "STRING",
          "value": "||"
        }
      ]
    },
    "_comparisonOperator": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "=="
        },
        {
          "type": "STRING",
          "value": "!="
        },
        {
          "type": "STRING",
          "value": "<"
        },
        {
          "type": "STRING",
          "value": "<="
        },
        {
          "type": "STRING",
          "value": ">"
        },
        {
          "type": "STRING",
          "value": ">="
        }
      ]
    },
    "_miscOperator": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "=>"
        },
        {
          "type": "STRING",
          "value": "??"
        }
      ]
    },
    "_assignmentOperator": {
      "type": "STRING",
      "value": "="
    },
    "_compoundAssignmentOperator": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_arithmeticOperator"
            },
            {
              "type": "SYMBOL",
              "name": "_bitwiseOperator"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "_assignmentOperator"
        }
      ]
    },
    "_rangeOperator": {
      "type": "STRING",
      "value": "..."
    },
    "declaration": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "interface_declaration"
        },
        {
          "type": "SYMBOL",
          "name": "class_declaration"
        },
        {
          "type": "SYMBOL",
          "name": "typedef_declaration"
        },
        {
          "type": "SYMBOL",
          "name": "function_declaration"
        },
        {
          "type": "SYMBOL",
          "name": "variable_declaration"
        }
      ]
    },
    "_access_identifier": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "default"
        },
        {
          "type": "STRING",
          "value": "null"
        },
        {
          "type": "STRING",
          "value": "get"
        },
        {
          "type": "STRING",
          "value": "set"
        },
        {
          "type": "STRING",
          "value": "dynamic"
        },
        {
          "type": "STRING",
          "value": "never"
        }
      ]
    },
    "access_identifiers": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "SYMBOL",
          "name": "_access_identifier"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": ","
                },
                {
                  "type": "SYMBOL",
                  "name": "_access_identifier"
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "type_params": {
      "type": "PREC_RIGHT",
      "value": 1,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "<"
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "SYMBOL",
                "name": "type"
              },
              {
                "type": "REPEAT",
                "content": {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "STRING",
                      "value": ","
                    },
                    {
                      "type": "SYMBOL",
                      "name": "type"
                    }
                  ]
                }
              }
            ]
          },
          {
            "type": "STRING",
            "value": ">"
          }
        ]
      }
    },
    "_modifier": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "macro"
        },
        {
          "type": "STRING",
          "value": "abstract"
        },
        {
          "type": "STRING",
          "value": "static"
        },
        {
          "type": "STRING",
          "value": "public"
        },
        {
          "type": "STRING",
          "value": "private"
        },
        {
          "type": "STRING",
          "value": "extern"
        },
        {
          "type": "STRING",
          "value": "inline"
        },
        {
          "type": "STRING",
          "value": "overload"
        },
        {
          "type": "STRING",
          "value": "override"
        },
        {
          "type": "STRING",
          "value": "final"
        }
      ]
    },
    "class_declaration": {
      "type": "SEQ",
      "members": [
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "metadata"
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "STRING",
                  "value": "final"
                },
                {
                  "type": "STRING",
                  "value": "abstract"
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "class"
        },
        {
          "type": "FIELD",
          "name": "name",
          "content": {
            "type": "SYMBOL",
            "name": "_lhs_expression"
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "type_params"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": "extends"
                },
                {
                  "type": "FIELD",
                  "name": "super_class_name",
                  "content": {
                    "type": "SYMBOL",
                    "name": "_lhs_expression"
                  }
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "SYMBOL",
                      "name": "type_params"
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "REPEAT",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": "implements"
                  },
                  {
                    "type": "FIELD",
                    "name": "interface_name",
                    "content": {
                      "type": "SYMBOL",
                      "name": "_lhs_expression"
                    }
                  },
                  {
                    "type": "CHOICE",
                    "members": [
                      {
                        "type": "SYMBOL",
                        "name": "type_params"
                      },
                      {
                        "type": "BLANK"
                      }
                    ]
                  }
                ]
              }
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "FIELD",
          "name": "body",
          "content": {
            "type": "SYMBOL",
            "name": "block"
          }
        }
      ]
    },
    "interface_declaration": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "final"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "interface"
        },
        {
          "type": "FIELD",
          "name": "name",
          "content": {
            "type": "SYMBOL",
            "name": "_lhs_expression"
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "type_params"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "REPEAT",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": "extends"
                  },
                  {
                    "type": "FIELD",
                    "name": "interface_name",
                    "content": {
                      "type": "SYMBOL",
                      "name": "_lhs_expression"
                    }
                  },
                  {
                    "type": "CHOICE",
                    "members": [
                      {
                        "type": "SYMBOL",
                        "name": "type_params"
                      },
                      {
                        "type": "BLANK"
                      }
                    ]
                  }
                ]
              }
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "FIELD",
          "name": "body",
          "content": {
            "type": "SYMBOL",
            "name": "block"
          }
        }
      ]
    },
    "typedef_declaration": {
      "type": "SEQ",
      "members": [
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "metadata"
          }
        },
        {
          "type": "STRING",
          "value": "typedef"
        },
        {
          "type": "FIELD",
          "name": "name",
          "content": {
            "type": "SYMBOL",
            "name": "_lhs_expression"
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "type_params"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "="
            },
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "block"
                },
                {
                  "type": "SYMBOL",
                  "name": "_lhs_expression"
                },
                {
                  "type": "SYMBOL",
                  "name": "type"
                }
              ]
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "_lookback_semicolon"
        }
      ]
    },
    "function_declaration": {
      "type": "SEQ",
      "members": [
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "metadata"
          }
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "_modifier"
          }
        },
        {
          "type": "STRING",
          "value": "function"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "FIELD",
              "name": "name",
              "content": {
                "type": "SYMBOL",
                "name": "_lhs_expression"
              }
            },
            {
              "type": "FIELD",
              "name": "name",
              "content": {
                "type": "ALIAS",
                "content": {
                  "type": "STRING",
                  "value": "new"
                },
                "named": true,
                "value": "identifier"
              }
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "type_params"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "_function_arg_list"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": ":"
                },
                {
                  "type": "FIELD",
                  "name": "return_type",
                  "content": {
                    "type": "SYMBOL",
                    "name": "type"
                  }
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "FIELD",
              "name": "body",
              "content": {
                "type": "SYMBOL",
                "name": "block"
              }
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "_lookback_semicolon"
        }
      ]
    },
    "_function_arg_list": {
      "type": "PREC",
      "value": 1,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "("
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "SYMBOL",
                    "name": "function_arg"
                  },
                  {
                    "type": "REPEAT",
                    "content": {
                      "type": "SEQ",
                      "members": [
                        {
                          "type": "STRING",
                          "value": ","
                        },
                        {
                          "type": "SYMBOL",
                          "name": "function_arg"
                        }
                      ]
                    }
                  }
                ]
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "STRING",
            "value": ")"
          }
        ]
      }
    },
    "function_arg": {
      "type": "PREC",
      "value": 1,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "FIELD",
            "name": "name",
            "content": {
              "type": "SYMBOL",
              "name": "_lhs_expression"
            }
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "STRING",
                "value": "?"
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": ":"
                  },
                  {
                    "type": "ALIAS",
                    "content": {
                      "type": "CHOICE",
                      "members": [
                        {
                          "type": "SYMBOL",
                          "name": "_lhs_expression"
                        },
                        {
                          "type": "SYMBOL",
                          "name": "type"
                        },
                        {
                          "type": "SYMBOL",
                          "name": "structure_type"
                        }
                      ]
                    },
                    "named": true,
                    "value": "type"
                  }
                ]
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "SYMBOL",
                    "name": "_assignmentOperator"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "_literal"
                  }
                ]
              },
              {
                "type": "BLANK"
              }
            ]
          }
        ]
      }
    },
    "variable_declaration": {
      "type": "SEQ",
      "members": [
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "metadata"
          }
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "_modifier"
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "var"
            },
            {
              "type": "STRING",
              "value": "final"
            }
          ]
        },
        {
          "type": "FIELD",
          "name": "name",
          "content": {
            "type": "SYMBOL",
            "name": "_lhs_expression"
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "access_identifiers"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": ":"
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "REPEAT",
                      "content": {
                        "type": "STRING",
                        "value": "("
                      }
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                },
                {
                  "type": "FIELD",
                  "name": "type",
                  "content": {
                    "type": "SYMBOL",
                    "name": "type"
                  }
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "REPEAT",
                      "content": {
                        "type": "STRING",
                        "value": ")"
                      }
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "operator"
                },
                {
                  "type": "SYMBOL",
                  "name": "expression"
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "_lookback_semicolon"
        }
      ]
    },
    "_literal": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "integer"
        },
        {
          "type": "SYMBOL",
          "name": "float"
        },
        {
          "type": "SYMBOL",
          "name": "string"
        },
        {
          "type": "SYMBOL",
          "name": "bool"
        },
        {
          "type": "SYMBOL",
          "name": "null"
        },
        {
          "type": "SYMBOL",
          "name": "array"
        },
        {
          "type": "SYMBOL",
          "name": "map"
        },
        {
          "type": "SYMBOL",
          "name": "object"
        },
        {
          "type": "SYMBOL",
          "name": "pair"
        }
      ]
    },
    "integer": {
      "type": "CHOICE",
      "members": [
        {
          "type": "PATTERN",
          "value": "[\\d_]+"
        },
        {
          "type": "PATTERN",
          "value": "0x[a-fA-F\\d_]+"
        }
      ]
    },
    "float": {
      "type": "CHOICE",
      "members": [
        {
          "type": "PATTERN",
          "value": "[\\d_]+[\\.]+[\\d_]*"
        },
        {
          "type": "PATTERN",
          "value": "[\\d_]+[\\.]+[\\d_]*e[\\d_]*"
        }
      ]
    },
    "bool": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "true"
        },
        {
          "type": "STRING",
          "value": "false"
        }
      ]
    },
    "string": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SEQ",
          "members": [
            {
              "type": "PATTERN",
              "value": "\\'"
            },
            {
              "type": "REPEAT",
              "content": {
                "type": "CHOICE",
                "members": [
                  {
                    "type": "SYMBOL",
                    "name": "interpolation"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "escape_sequence"
                  },
                  {
                    "type": "PATTERN",
                    "value": "[^\\']"
                  }
                ]
              }
            },
            {
              "type": "PATTERN",
              "value": "\\'"
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "PATTERN",
              "value": "\\\""
            },
            {
              "type": "REPEAT",
              "content": {
                "type": "CHOICE",
                "members": [
                  {
                    "type": "SYMBOL",
                    "name": "escape_sequence"
                  },
                  {
                    "type": "PATTERN",
                    "value": "[^\\\"]"
                  }
                ]
              }
            },
            {
              "type": "PATTERN",
              "value": "\\\""
            }
          ]
        }
      ]
    },
    "null": {
      "type": "STRING",
      "value": "null"
    },
    "array": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "["
            },
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "PREC_LEFT",
                      "value": 0,
                      "content": {
                        "type": "SYMBOL",
                        "name": "expression"
                      }
                    },
                    {
                      "type": "REPEAT",
                      "content": {
                        "type": "SEQ",
                        "members": [
                          {
                            "type": "STRING",
                            "value": ","
                          },
                          {
                            "type": "PREC_LEFT",
                            "value": 0,
                            "content": {
                              "type": "SYMBOL",
                              "name": "expression"
                            }
                          }
                        ]
                      }
                    }
                  ]
                },
                {
                  "type": "BLANK"
                }
              ]
            },
            {
              "type": "STRING",
              "value": "]"
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "["
            },
            {
              "type": "SYMBOL",
              "name": "expression"
            },
            {
              "type": "SYMBOL",
              "name": "identifier"
            },
            {
              "type": "STRING",
              "value": "]"
            }
          ]
        }
      ]
    },
    "map": {
      "type": "PREC",
      "value": 1,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "["
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "SYMBOL",
                "name": "pair"
              },
              {
                "type": "REPEAT",
                "content": {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "STRING",
                      "value": ","
                    },
                    {
                      "type": "SYMBOL",
                      "name": "pair"
                    }
                  ]
                }
              }
            ]
          },
          {
            "type": "STRING",
            "value": "]"
          }
        ]
      }
    },
    "object": {
      "type": "PREC",
      "value": 1,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "{"
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "SYMBOL",
                    "name": "pair"
                  },
                  {
                    "type": "REPEAT",
                    "content": {
                      "type": "SEQ",
                      "members": [
                        {
                          "type": "STRING",
                          "value": ","
                        },
                        {
                          "type": "SYMBOL",
                          "name": "pair"
                        }
                      ]
                    }
                  }
                ]
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "SYMBOL",
            "name": "_closing_brace"
          }
        ]
      }
    },
    "structure_type": {
      "type": "PREC",
      "value": 1,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "{"
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "ALIAS",
                    "content": {
                      "type": "SYMBOL",
                      "name": "structure_type_pair"
                    },
                    "named": true,
                    "value": "pair"
                  },
                  {
                    "type": "REPEAT",
                    "content": {
                      "type": "SEQ",
                      "members": [
                        {
                          "type": "STRING",
                          "value": ","
                        },
                        {
                          "type": "ALIAS",
                          "content": {
                            "type": "SYMBOL",
                            "name": "structure_type_pair"
                          },
                          "named": true,
                          "value": "pair"
                        }
                      ]
                    }
                  }
                ]
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "SYMBOL",
            "name": "_closing_brace"
          }
        ]
      }
    },
    "structure_type_pair": {
      "type": "PREC_LEFT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "identifier"
              }
            ]
          },
          {
            "type": "STRING",
            "value": ":"
          },
          {
            "type": "SYMBOL",
            "name": "type"
          }
        ]
      }
    },
    "pair": {
      "type": "PREC_RIGHT",
      "value": 0,
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "SEQ",
            "members": [
              {
                "type": "CHOICE",
                "members": [
                  {
                    "type": "SYMBOL",
                    "name": "identifier"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "string"
                  }
                ]
              },
              {
                "type": "STRING",
                "value": ":"
              },
              {
                "type": "SYMBOL",
                "name": "expression"
              }
            ]
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "CHOICE",
                "members": [
                  {
                    "type": "SYMBOL",
                    "name": "identifier"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "_literal"
                  }
                ]
              },
              {
                "type": "STRING",
                "value": "=>"
              },
              {
                "type": "SYMBOL",
                "name": "expression"
              }
            ]
          }
        ]
      }
    },
    "interpolation": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_interpolated_block"
        },
        {
          "type": "SYMBOL",
          "name": "_interpolated_identifier"
        }
      ]
    },
    "_interpolated_block": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "${"
        },
        {
          "type": "SYMBOL",
          "name": "expression"
        },
        {
          "type": "STRING",
          "value": "}"
        }
      ]
    },
    "_interpolated_identifier": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "$"
            },
            {
              "type": "SYMBOL",
              "name": "_lhs_expression"
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "${"
            },
            {
              "type": "SYMBOL",
              "name": "_lhs_expression"
            },
            {
              "type": "STRING",
              "value": "}"
            }
          ]
        }
      ]
    },
    "_interpolated_expression": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "$"
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "IMMEDIATE_TOKEN",
              "content": {
                "type": "STRING",
                "value": "{"
              }
            },
            {
              "type": "SYMBOL",
              "name": "expression"
            },
            {
              "type": "STRING",
              "value": "}"
            }
          ]
        }
      ]
    },
    "escape_sequence": {
      "type": "IMMEDIATE_TOKEN",
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "\\"
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "PATTERN",
                "value": "[^xu0-7]"
              },
              {
                "type": "PATTERN",
                "value": "[0-7]{1,3}"
              },
              {
                "type": "PATTERN",
                "value": "x[0-9a-fA-F]{2}"
              },
              {
                "type": "PATTERN",
                "value": "u[0-9a-fA-F]{4}"
              }
            ]
          }
        ]
      }
    },
    "comment": {
      "type": "TOKEN",
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": "//"
              },
              {
                "type": "PATTERN",
                "value": ".*"
              }
            ]
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": "/*"
              },
              {
                "type": "PATTERN",
                "value": "[^*]*\\*+([^/*][^*]*\\*+)*"
              },
              {
                "type": "STRING",
                "value": "/"
              }
            ]
          }
        ]
      }
    },
    "keyword": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "catch"
        },
        {
          "type": "STRING",
          "value": "do"
        },
        {
          "type": "STRING",
          "value": "enum"
        },
        {
          "type": "STRING",
          "value": "for"
        },
        {
          "type": "STRING",
          "value": "try"
        },
        {
          "type": "STRING",
          "value": "while"
        }
      ]
    },
    "reserved_keyword": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "operator"
        }
      ]
    },
    "identifier": {
      "type": "PATTERN",
      "value": "[a-zA-Z_]+[a-zA-Z0-9]*"
    },
    "_camelCaseIdentifier": {
      "type": "PATTERN",
      "value": "[a-z_]+[a-zA-Z0-9]*"
    },
    "_pascalCaseIdentifier": {
      "type": "PATTERN",
      "value": "[A-Z]+[a-zA-Z0-9]*"
    },
    "_semicolon": {
      "type": "SYMBOL",
      "name": "_lookback_semicolon"
    }
  },
  "extras": [
    {
      "type": "SYMBOL",
      "name": "comment"
    },
    {
      "type": "PATTERN",
      "value": "[\\s\\uFEFF\\u2060\\u200B\\u00A0]"
    },
    {
      "type": "SYMBOL",
      "name": "_closing_brace_unmarker"
    }
  ],
  "conflicts": [
    [
      "block",
      "object"
    ],
    [
      "typedef_declaration",
      "type"
    ],
    [
      "call_expression",
      "_constructor_call"
    ],
    [
      "_rhs_expression",
      "pair"
    ],
    [
      "_literal",
      "pair"
    ],
    [
      "pair",
      "pair"
    ],
    [
      "function_declaration"
    ],
    [
      "function_type",
      "variable_declaration"
    ],
    [
      "type",
      "function_type",
      "variable_declaration"
    ],
    [
      "type",
      "_function_type_args"
    ],
    [
      "structure_type_pair",
      "_function_type_args"
    ],
    [
      "function_declaration",
      "variable_declaration"
    ],
    [
      "_prefixUnaryOperator",
      "_arithmeticOperator"
    ],
    [
      "_prefixUnaryOperator",
      "_postfixUnaryOperator"
    ]
  ],
  "precedences": [],
  "externals": [
    {
      "type": "SYMBOL",
      "name": "_lookback_semicolon"
    },
    {
      "type": "SYMBOL",
      "name": "_closing_brace_marker"
    },
    {
      "type": "SYMBOL",
      "name": "_closing_brace_unmarker"
    }
  ],
  "inline": [
    "statement",
    "expression"
  ],
  "supertypes": [
    "declaration"
  ]
}
