{
  "name": "angular",
  "rules": {
    "document": {
      "type": "REPEAT",
      "content": {
        "type": "SYMBOL",
        "name": "_node"
      }
    },
    "doctype": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "<!"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "_doctype"
          },
          "named": false,
          "value": "doctype"
        },
        {
          "type": "PATTERN",
          "value": "[^>]+"
        },
        {
          "type": "STRING",
          "value": ">"
        }
      ]
    },
    "_doctype": {
      "type": "PATTERN",
      "value": "[Dd][Oo][Cc][Tt][Yy][Pp][Ee]"
    },
    "_node": {
      "type": "CHOICE",
      "members": [
        {
          "type": "PREC",
          "value": 1,
          "content": {
            "type": "SYMBOL",
            "name": "icu_expression"
          }
        },
        {
          "type": "PREC",
          "value": 1,
          "content": {
            "type": "SYMBOL",
            "name": "interpolation"
          }
        },
        {
          "type": "PREC",
          "value": 1,
          "content": {
            "type": "SYMBOL",
            "name": "_any_statement"
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "doctype"
            },
            {
              "type": "SYMBOL",
              "name": "entity"
            },
            {
              "type": "SYMBOL",
              "name": "text"
            },
            {
              "type": "SYMBOL",
              "name": "element"
            },
            {
              "type": "SYMBOL",
              "name": "script_element"
            },
            {
              "type": "SYMBOL",
              "name": "style_element"
            },
            {
              "type": "SYMBOL",
              "name": "erroneous_end_tag"
            }
          ]
        }
      ]
    },
    "element": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "start_tag"
            },
            {
              "type": "REPEAT",
              "content": {
                "type": "SYMBOL",
                "name": "_node"
              }
            },
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "end_tag"
                },
                {
                  "type": "SYMBOL",
                  "name": "_implicit_end_tag"
                }
              ]
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "self_closing_tag"
        }
      ]
    },
    "script_element": {
      "type": "SEQ",
      "members": [
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "script_start_tag"
          },
          "named": true,
          "value": "start_tag"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "raw_text"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "end_tag"
        }
      ]
    },
    "style_element": {
      "type": "SEQ",
      "members": [
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "style_start_tag"
          },
          "named": true,
          "value": "start_tag"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "raw_text"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "end_tag"
        }
      ]
    },
    "start_tag": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "<"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "_start_tag_name"
          },
          "named": true,
          "value": "tag_name"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "attribute"
          }
        },
        {
          "type": "STRING",
          "value": ">"
        }
      ]
    },
    "script_start_tag": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "<"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "_script_start_tag_name"
          },
          "named": true,
          "value": "tag_name"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "attribute"
          }
        },
        {
          "type": "STRING",
          "value": ">"
        }
      ]
    },
    "style_start_tag": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "<"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "_style_start_tag_name"
          },
          "named": true,
          "value": "tag_name"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "attribute"
          }
        },
        {
          "type": "STRING",
          "value": ">"
        }
      ]
    },
    "self_closing_tag": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "<"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "_start_tag_name"
          },
          "named": true,
          "value": "tag_name"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "attribute"
          }
        },
        {
          "type": "STRING",
          "value": "/>"
        }
      ]
    },
    "end_tag": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "</"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "_end_tag_name"
          },
          "named": true,
          "value": "tag_name"
        },
        {
          "type": "STRING",
          "value": ">"
        }
      ]
    },
    "erroneous_end_tag": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "</"
        },
        {
          "type": "SYMBOL",
          "name": "erroneous_end_tag_name"
        },
        {
          "type": "STRING",
          "value": ">"
        }
      ]
    },
    "attribute": {
      "type": "CHOICE",
      "members": [
        {
          "type": "PREC",
          "value": 1,
          "content": {
            "type": "SYMBOL",
            "name": "property_binding"
          }
        },
        {
          "type": "PREC",
          "value": 1,
          "content": {
            "type": "SYMBOL",
            "name": "two_way_binding"
          }
        },
        {
          "type": "PREC",
          "value": 1,
          "content": {
            "type": "SYMBOL",
            "name": "animation_binding"
          }
        },
        {
          "type": "PREC",
          "value": 1,
          "content": {
            "type": "SYMBOL",
            "name": "event_binding"
          }
        },
        {
          "type": "PREC",
          "value": 1,
          "content": {
            "type": "SYMBOL",
            "name": "structural_directive"
          }
        },
        {
          "type": "SYMBOL",
          "name": "_normal_attribute"
        }
      ]
    },
    "attribute_name": {
      "type": "PATTERN",
      "value": "[^<>\\*.\\[\\]\\(\\)\"'=\\s]+"
    },
    "attribute_value": {
      "type": "PATTERN",
      "value": "[^<>\"'=\\s]+"
    },
    "entity": {
      "type": "PATTERN",
      "value": "&(#([xX][0-9a-fA-F]{1,6}|[0-9]{1,5})|[A-Za-z]{1,30});?"
    },
    "quoted_attribute_value": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "'"
            },
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "ALIAS",
                  "content": {
                    "type": "PATTERN",
                    "value": "[^']+"
                  },
                  "named": true,
                  "value": "attribute_value"
                },
                {
                  "type": "BLANK"
                }
              ]
            },
            {
              "type": "STRING",
              "value": "'"
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "\""
            },
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "ALIAS",
                  "content": {
                    "type": "PATTERN",
                    "value": "[^\"]+"
                  },
                  "named": true,
                  "value": "attribute_value"
                },
                {
                  "type": "BLANK"
                }
              ]
            },
            {
              "type": "STRING",
              "value": "\""
            }
          ]
        }
      ]
    },
    "text": {
      "type": "PATTERN",
      "value": "[^<>@{}&\\s]([^<>@{}&]*[^<>@{}&\\s])?"
    },
    "statement_block": {
      "type": "PREC_RIGHT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "{"
          },
          {
            "type": "REPEAT",
            "content": {
              "type": "SYMBOL",
              "name": "_node"
            }
          },
          {
            "type": "STRING",
            "value": "}"
          }
        ]
      }
    },
    "_any_statement": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "if_statement"
        },
        {
          "type": "SYMBOL",
          "name": "for_statement"
        },
        {
          "type": "SYMBOL",
          "name": "defer_statement"
        },
        {
          "type": "SYMBOL",
          "name": "switch_statement"
        },
        {
          "type": "SYMBOL",
          "name": "let_statement"
        },
        {
          "type": "SYMBOL",
          "name": "_alternative_statement"
        }
      ]
    },
    "_alternative_statement": {
      "type": "CHOICE",
      "members": [
        {
          "type": "FIELD",
          "name": "alternative",
          "content": {
            "type": "SYMBOL",
            "name": "else_statement"
          }
        },
        {
          "type": "FIELD",
          "name": "alternative_condition",
          "content": {
            "type": "SYMBOL",
            "name": "else_if_statement"
          }
        },
        {
          "type": "FIELD",
          "name": "empty",
          "content": {
            "type": "SYMBOL",
            "name": "empty_statement"
          }
        },
        {
          "type": "FIELD",
          "name": "placeholder",
          "content": {
            "type": "SYMBOL",
            "name": "placeholder_statement"
          }
        },
        {
          "type": "FIELD",
          "name": "loading",
          "content": {
            "type": "SYMBOL",
            "name": "loading_statement"
          }
        },
        {
          "type": "FIELD",
          "name": "error",
          "content": {
            "type": "SYMBOL",
            "name": "error_statement"
          }
        }
      ]
    },
    "let_statement": {
      "type": "PREC_LEFT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "ALIAS",
            "content": {
              "type": "SYMBOL",
              "name": "_control_flow_start"
            },
            "named": false,
            "value": "@"
          },
          {
            "type": "ALIAS",
            "content": {
              "type": "STRING",
              "value": "let"
            },
            "named": true,
            "value": "control_keyword"
          },
          {
            "type": "SYMBOL",
            "name": "assignment_expression"
          },
          {
            "type": "STRING",
            "value": ";"
          }
        ]
      }
    },
    "switch_statement": {
      "type": "PREC_RIGHT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "ALIAS",
            "content": {
              "type": "SYMBOL",
              "name": "_control_flow_start"
            },
            "named": false,
            "value": "@"
          },
          {
            "type": "ALIAS",
            "content": {
              "type": "STRING",
              "value": "switch"
            },
            "named": true,
            "value": "control_keyword"
          },
          {
            "type": "STRING",
            "value": "("
          },
          {
            "type": "FIELD",
            "name": "value",
            "content": {
              "type": "SYMBOL",
              "name": "expression"
            }
          },
          {
            "type": "STRING",
            "value": ")"
          },
          {
            "type": "FIELD",
            "name": "body",
            "content": {
              "type": "SYMBOL",
              "name": "switch_body"
            }
          }
        ]
      }
    },
    "switch_body": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "{"
        },
        {
          "type": "REPEAT1",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "case_statement"
              },
              {
                "type": "SYMBOL",
                "name": "default_statement"
              }
            ]
          }
        },
        {
          "type": "STRING",
          "value": "}"
        }
      ]
    },
    "case_statement": {
      "type": "SEQ",
      "members": [
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "_control_flow_start"
          },
          "named": false,
          "value": "@"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "STRING",
            "value": "case"
          },
          "named": true,
          "value": "control_keyword"
        },
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "FIELD",
          "name": "value",
          "content": {
            "type": "SYMBOL",
            "name": "_primitive"
          }
        },
        {
          "type": "STRING",
          "value": ")"
        },
        {
          "type": "FIELD",
          "name": "body",
          "content": {
            "type": "SYMBOL",
            "name": "statement_block"
          }
        }
      ]
    },
    "default_statement": {
      "type": "SEQ",
      "members": [
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "_control_flow_start"
          },
          "named": false,
          "value": "@"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "STRING",
            "value": "default"
          },
          "named": true,
          "value": "control_keyword"
        },
        {
          "type": "FIELD",
          "name": "body",
          "content": {
            "type": "SYMBOL",
            "name": "statement_block"
          }
        }
      ]
    },
    "defer_statement": {
      "type": "PREC_LEFT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "ALIAS",
            "content": {
              "type": "SYMBOL",
              "name": "_control_flow_start"
            },
            "named": false,
            "value": "@"
          },
          {
            "type": "ALIAS",
            "content": {
              "type": "STRING",
              "value": "defer"
            },
            "named": true,
            "value": "control_keyword"
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "defer_trigger"
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "FIELD",
            "name": "body",
            "content": {
              "type": "SYMBOL",
              "name": "statement_block"
            }
          }
        ]
      }
    },
    "placeholder_statement": {
      "type": "PREC_LEFT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "ALIAS",
            "content": {
              "type": "SYMBOL",
              "name": "_control_flow_start"
            },
            "named": false,
            "value": "@"
          },
          {
            "type": "ALIAS",
            "content": {
              "type": "STRING",
              "value": "placeholder"
            },
            "named": true,
            "value": "control_keyword"
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "placeholder_minimum"
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "FIELD",
            "name": "body",
            "content": {
              "type": "SYMBOL",
              "name": "statement_block"
            }
          }
        ]
      }
    },
    "loading_statement": {
      "type": "PREC_LEFT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "ALIAS",
            "content": {
              "type": "SYMBOL",
              "name": "_control_flow_start"
            },
            "named": false,
            "value": "@"
          },
          {
            "type": "ALIAS",
            "content": {
              "type": "STRING",
              "value": "loading"
            },
            "named": true,
            "value": "control_keyword"
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "loading_condition"
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "FIELD",
            "name": "body",
            "content": {
              "type": "SYMBOL",
              "name": "statement_block"
            }
          }
        ]
      }
    },
    "error_statement": {
      "type": "SEQ",
      "members": [
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "_control_flow_start"
          },
          "named": false,
          "value": "@"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "STRING",
            "value": "error"
          },
          "named": true,
          "value": "control_keyword"
        },
        {
          "type": "FIELD",
          "name": "body",
          "content": {
            "type": "SYMBOL",
            "name": "statement_block"
          }
        }
      ]
    },
    "defer_trigger": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "FIELD",
          "name": "condition",
          "content": {
            "type": "SYMBOL",
            "name": "defer_trigger_condition"
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "REPEAT",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": ";"
                  },
                  {
                    "type": "FIELD",
                    "name": "condition",
                    "content": {
                      "type": "SYMBOL",
                      "name": "defer_trigger_condition"
                    }
                  }
                ]
              }
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "placeholder_minimum": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "FIELD",
          "name": "minimum",
          "content": {
            "type": "SYMBOL",
            "name": "timed_expression"
          }
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "loading_condition": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "FIELD",
          "name": "condition",
          "content": {
            "type": "SYMBOL",
            "name": "timed_expression"
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": ";"
                },
                {
                  "type": "FIELD",
                  "name": "condition",
                  "content": {
                    "type": "SYMBOL",
                    "name": "timed_expression"
                  }
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "defer_trigger_condition": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "ALIAS",
              "content": {
                "type": "STRING",
                "value": "prefetch"
              },
              "named": true,
              "value": "prefetch_keyword"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "ALIAS",
                  "content": {
                    "type": "STRING",
                    "value": "when"
                  },
                  "named": true,
                  "value": "special_keyword"
                },
                {
                  "type": "FIELD",
                  "name": "trigger",
                  "content": {
                    "type": "SYMBOL",
                    "name": "_any_expression"
                  }
                }
              ]
            },
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "ALIAS",
                  "content": {
                    "type": "STRING",
                    "value": "on"
                  },
                  "named": true,
                  "value": "special_keyword"
                },
                {
                  "type": "FIELD",
                  "name": "trigger",
                  "content": {
                    "type": "SYMBOL",
                    "name": "_primitive"
                  }
                }
              ]
            }
          ]
        }
      ]
    },
    "timed_expression": {
      "type": "SEQ",
      "members": [
        {
          "type": "ALIAS",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "STRING",
                "value": "after"
              },
              {
                "type": "STRING",
                "value": "minimum"
              }
            ]
          },
          "named": true,
          "value": "special_keyword"
        },
        {
          "type": "FIELD",
          "name": "value",
          "content": {
            "type": "SYMBOL",
            "name": "number"
          }
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "STRING",
                "value": "ms"
              },
              {
                "type": "STRING",
                "value": "s"
              }
            ]
          },
          "named": true,
          "value": "unit"
        }
      ]
    },
    "for_statement": {
      "type": "PREC_LEFT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "ALIAS",
            "content": {
              "type": "SYMBOL",
              "name": "_control_flow_start"
            },
            "named": false,
            "value": "@"
          },
          {
            "type": "ALIAS",
            "content": {
              "type": "STRING",
              "value": "for"
            },
            "named": true,
            "value": "control_keyword"
          },
          {
            "type": "STRING",
            "value": "("
          },
          {
            "type": "FIELD",
            "name": "declaration",
            "content": {
              "type": "SYMBOL",
              "name": "for_declaration"
            }
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "FIELD",
                "name": "reference",
                "content": {
                  "type": "SYMBOL",
                  "name": "for_reference"
                }
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "STRING",
            "value": ")"
          },
          {
            "type": "FIELD",
            "name": "body",
            "content": {
              "type": "SYMBOL",
              "name": "statement_block"
            }
          }
        ]
      }
    },
    "empty_statement": {
      "type": "SEQ",
      "members": [
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "_control_flow_start"
          },
          "named": false,
          "value": "@"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "STRING",
            "value": "empty"
          },
          "named": true,
          "value": "control_keyword"
        },
        {
          "type": "FIELD",
          "name": "body",
          "content": {
            "type": "SYMBOL",
            "name": "statement_block"
          }
        }
      ]
    },
    "for_declaration": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "name",
          "content": {
            "type": "SYMBOL",
            "name": "identifier"
          }
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "STRING",
            "value": "of"
          },
          "named": true,
          "value": "special_keyword"
        },
        {
          "type": "FIELD",
          "name": "value",
          "content": {
            "type": "SYMBOL",
            "name": "expression"
          }
        },
        {
          "type": "STRING",
          "value": ";"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "STRING",
            "value": "track"
          },
          "named": true,
          "value": "special_keyword"
        },
        {
          "type": "FIELD",
          "name": "track",
          "content": {
            "type": "SYMBOL",
            "name": "expression"
          }
        }
      ]
    },
    "for_reference": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": ";"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "STRING",
            "value": "let"
          },
          "named": true,
          "value": "special_keyword"
        },
        {
          "type": "FIELD",
          "name": "alias",
          "content": {
            "type": "SYMBOL",
            "name": "assignment_expression"
          }
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "CHOICE",
                "members": [
                  {
                    "type": "STRING",
                    "value": ";"
                  },
                  {
                    "type": "STRING",
                    "value": ","
                  }
                ]
              },
              {
                "type": "FIELD",
                "name": "alias",
                "content": {
                  "type": "SYMBOL",
                  "name": "assignment_expression"
                }
              }
            ]
          }
        }
      ]
    },
    "if_statement": {
      "type": "PREC_RIGHT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_if_start_expression"
          },
          {
            "type": "SYMBOL",
            "name": "_if_body_expression"
          }
        ]
      }
    },
    "else_if_statement": {
      "type": "PREC_RIGHT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_else_if_start_expression"
          },
          {
            "type": "SYMBOL",
            "name": "_if_body_expression"
          }
        ]
      }
    },
    "else_statement": {
      "type": "PREC_RIGHT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "ALIAS",
            "content": {
              "type": "SYMBOL",
              "name": "_control_flow_start"
            },
            "named": false,
            "value": "@"
          },
          {
            "type": "ALIAS",
            "content": {
              "type": "STRING",
              "value": "else"
            },
            "named": true,
            "value": "control_keyword"
          },
          {
            "type": "SYMBOL",
            "name": "statement_block"
          }
        ]
      }
    },
    "_if_start_expression": {
      "type": "SEQ",
      "members": [
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "_control_flow_start"
          },
          "named": false,
          "value": "@"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "STRING",
            "value": "if"
          },
          "named": true,
          "value": "control_keyword"
        }
      ]
    },
    "_else_if_start_expression": {
      "type": "SEQ",
      "members": [
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "_control_flow_start"
          },
          "named": false,
          "value": "@"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "STRING",
            "value": "else"
          },
          "named": true,
          "value": "control_keyword"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "STRING",
            "value": "if"
          },
          "named": true,
          "value": "control_keyword"
        }
      ]
    },
    "_if_body_expression": {
      "type": "PREC_LEFT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "("
          },
          {
            "type": "FIELD",
            "name": "condition",
            "content": {
              "type": "SYMBOL",
              "name": "if_condition"
            }
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "FIELD",
                "name": "reference",
                "content": {
                  "type": "SYMBOL",
                  "name": "if_reference"
                }
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "STRING",
            "value": ")"
          },
          {
            "type": "FIELD",
            "name": "consequence",
            "content": {
              "type": "SYMBOL",
              "name": "statement_block"
            }
          }
        ]
      }
    },
    "if_condition": {
      "type": "PREC_RIGHT",
      "value": 1,
      "content": {
        "type": "SYMBOL",
        "name": "_any_expression"
      }
    },
    "if_reference": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": ";"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "STRING",
            "value": "as"
          },
          "named": true,
          "value": "special_keyword"
        },
        {
          "type": "SYMBOL",
          "name": "identifier"
        }
      ]
    },
    "_any_expression": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "binary_expression"
        },
        {
          "type": "SYMBOL",
          "name": "unary_expression"
        },
        {
          "type": "SYMBOL",
          "name": "expression"
        },
        {
          "type": "SYMBOL",
          "name": "ternary_expression"
        },
        {
          "type": "SYMBOL",
          "name": "nullish_coalescing_expression"
        },
        {
          "type": "SYMBOL",
          "name": "template_string"
        },
        {
          "type": "PREC",
          "value": 3,
          "content": {
            "type": "SYMBOL",
            "name": "conditional_expression"
          }
        }
      ]
    },
    "assignment_expression": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "name",
          "content": {
            "type": "SYMBOL",
            "name": "identifier"
          }
        },
        {
          "type": "STRING",
          "value": "="
        },
        {
          "type": "FIELD",
          "name": "value",
          "content": {
            "type": "SYMBOL",
            "name": "_any_expression"
          }
        }
      ]
    },
    "icu_expression": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "{"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_any_expression"
            },
            {
              "type": "SYMBOL",
              "name": "concatenation_expression"
            }
          ]
        },
        {
          "type": "STRING",
          "value": ","
        },
        {
          "type": "SYMBOL",
          "name": "icu_clause"
        },
        {
          "type": "STRING",
          "value": ","
        },
        {
          "type": "REPEAT1",
          "content": {
            "type": "SYMBOL",
            "name": "icu_case"
          }
        },
        {
          "type": "STRING",
          "value": "}"
        }
      ]
    },
    "icu_clause": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "plural"
        },
        {
          "type": "STRING",
          "value": "select"
        }
      ]
    },
    "icu_case": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "icu_category"
        },
        {
          "type": "STRING",
          "value": "{"
        },
        {
          "type": "REPEAT1",
          "content": {
            "type": "SYMBOL",
            "name": "_node"
          }
        },
        {
          "type": "STRING",
          "value": "}"
        }
      ]
    },
    "icu_category": {
      "type": "PATTERN",
      "value": "[^{}]+",
      "flags": "i"
    },
    "interpolation": {
      "type": "SEQ",
      "members": [
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "_interpolation_start"
          },
          "named": false,
          "value": "{{"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_any_expression"
            },
            {
              "type": "SYMBOL",
              "name": "concatenation_expression"
            }
          ]
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "_interpolation_end"
          },
          "named": false,
          "value": "}}"
        }
      ]
    },
    "concatenation_expression": {
      "type": "PREC",
      "value": 2,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_primitive"
          },
          {
            "type": "STRING",
            "value": "+"
          },
          {
            "type": "SYMBOL",
            "name": "expression"
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "REPEAT",
                "content": {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "STRING",
                      "value": "+"
                    },
                    {
                      "type": "SYMBOL",
                      "name": "_primitive"
                    }
                  ]
                }
              },
              {
                "type": "BLANK"
              }
            ]
          }
        ]
      }
    },
    "structural_directive": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "*"
        },
        {
          "type": "SYMBOL",
          "name": "identifier"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": "="
                },
                {
                  "type": "SYMBOL",
                  "name": "_double_quote"
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "SYMBOL",
                      "name": "structural_expression"
                    },
                    {
                      "type": "SYMBOL",
                      "name": "structural_declaration"
                    }
                  ]
                },
                {
                  "type": "SYMBOL",
                  "name": "_double_quote"
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "structural_expression": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_any_expression"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_alias"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_else_template_expression"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_context_expression"
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "structural_declaration": {
      "type": "SEQ",
      "members": [
        {
          "type": "ALIAS",
          "content": {
            "type": "STRING",
            "value": "let"
          },
          "named": true,
          "value": "special_keyword"
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "structural_assignment"
            },
            {
              "type": "REPEAT",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "CHOICE",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ";"
                      },
                      {
                        "type": "STRING",
                        "value": ","
                      }
                    ]
                  },
                  {
                    "type": "SYMBOL",
                    "name": "structural_assignment"
                  }
                ]
              }
            }
          ]
        }
      ]
    },
    "structural_assignment": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SEQ",
          "members": [
            {
              "type": "FIELD",
              "name": "name",
              "content": {
                "type": "SYMBOL",
                "name": "identifier"
              }
            },
            {
              "type": "STRING",
              "value": ":"
            },
            {
              "type": "FIELD",
              "name": "value",
              "content": {
                "type": "SYMBOL",
                "name": "identifier"
              }
            }
          ]
        },
        {
          "type": "PREC_LEFT",
          "value": 2,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "CHOICE",
                "members": [
                  {
                    "type": "ALIAS",
                    "content": {
                      "type": "STRING",
                      "value": "let"
                    },
                    "named": true,
                    "value": "special_keyword"
                  },
                  {
                    "type": "BLANK"
                  }
                ]
              },
              {
                "type": "FIELD",
                "name": "name",
                "content": {
                  "type": "SYMBOL",
                  "name": "identifier"
                }
              },
              {
                "type": "FIELD",
                "name": "operator",
                "content": {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "SYMBOL",
                      "name": "identifier"
                    },
                    {
                      "type": "STRING",
                      "value": "="
                    }
                  ]
                }
              },
              {
                "type": "FIELD",
                "name": "value",
                "content": {
                  "type": "SYMBOL",
                  "name": "expression"
                }
              },
              {
                "type": "CHOICE",
                "members": [
                  {
                    "type": "SYMBOL",
                    "name": "_alias"
                  },
                  {
                    "type": "BLANK"
                  }
                ]
              }
            ]
          }
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "FIELD",
              "name": "name",
              "content": {
                "type": "SYMBOL",
                "name": "identifier"
              }
            },
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_alias"
                },
                {
                  "type": "BLANK"
                }
              ]
            }
          ]
        }
      ]
    },
    "_alias": {
      "type": "SEQ",
      "members": [
        {
          "type": "ALIAS",
          "content": {
            "type": "STRING",
            "value": "as"
          },
          "named": true,
          "value": "special_keyword"
        },
        {
          "type": "FIELD",
          "name": "alias",
          "content": {
            "type": "SYMBOL",
            "name": "identifier"
          }
        }
      ]
    },
    "_else_template_expression": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": ";"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "STRING",
            "value": "else"
          },
          "named": true,
          "value": "special_keyword"
        },
        {
          "type": "SYMBOL",
          "name": "identifier"
        }
      ]
    },
    "_context_expression": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": ";"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "ALIAS",
              "content": {
                "type": "STRING",
                "value": "context"
              },
              "named": true,
              "value": "special_keyword"
            },
            {
              "type": "FIELD",
              "name": "named",
              "content": {
                "type": "SYMBOL",
                "name": "identifier"
              }
            }
          ]
        },
        {
          "type": "STRING",
          "value": ":"
        },
        {
          "type": "SYMBOL",
          "name": "_any_expression"
        }
      ]
    },
    "property_binding": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "["
        },
        {
          "type": "SYMBOL",
          "name": "binding_name"
        },
        {
          "type": "STRING",
          "value": "]"
        },
        {
          "type": "SYMBOL",
          "name": "_binding_assignment"
        }
      ]
    },
    "event_binding": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "SYMBOL",
          "name": "binding_name"
        },
        {
          "type": "STRING",
          "value": ")"
        },
        {
          "type": "SYMBOL",
          "name": "_binding_assignment"
        }
      ]
    },
    "two_way_binding": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "[("
        },
        {
          "type": "SYMBOL",
          "name": "binding_name"
        },
        {
          "type": "STRING",
          "value": ")]"
        },
        {
          "type": "SYMBOL",
          "name": "_binding_assignment"
        }
      ]
    },
    "animation_binding": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "[@"
        },
        {
          "type": "SYMBOL",
          "name": "binding_name"
        },
        {
          "type": "STRING",
          "value": "]"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "FIELD",
              "name": "trigger",
              "content": {
                "type": "SYMBOL",
                "name": "_binding_assignment"
              }
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "_binding_assignment": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "="
        },
        {
          "type": "SYMBOL",
          "name": "_double_quote"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_any_expression"
                },
                {
                  "type": "SYMBOL",
                  "name": "assignment_expression"
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": ";"
              },
              {
                "type": "CHOICE",
                "members": [
                  {
                    "type": "CHOICE",
                    "members": [
                      {
                        "type": "SYMBOL",
                        "name": "_any_expression"
                      },
                      {
                        "type": "SYMBOL",
                        "name": "assignment_expression"
                      }
                    ]
                  },
                  {
                    "type": "BLANK"
                  }
                ]
              }
            ]
          }
        },
        {
          "type": "SYMBOL",
          "name": "_double_quote"
        }
      ]
    },
    "binding_name": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "identifier"
            },
            {
              "type": "SYMBOL",
              "name": "member_expression"
            }
          ]
        }
      ]
    },
    "_normal_attribute": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "attribute_name"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": "="
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "SYMBOL",
                      "name": "attribute_value"
                    },
                    {
                      "type": "SYMBOL",
                      "name": "quoted_attribute_value"
                    }
                  ]
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "template_string": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_backtick"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "template_chars"
              },
              {
                "type": "SYMBOL",
                "name": "template_substitution"
              }
            ]
          }
        },
        {
          "type": "SYMBOL",
          "name": "_backtick"
        }
      ]
    },
    "template_chars": {
      "type": "IMMEDIATE_TOKEN",
      "content": {
        "type": "PREC",
        "value": 1,
        "content": {
          "type": "PATTERN",
          "value": "(?:[^$`\\\\]+|\\\\.)+"
        }
      }
    },
    "template_substitution": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "${"
        },
        {
          "type": "SYMBOL",
          "name": "_any_expression"
        },
        {
          "type": "STRING",
          "value": "}"
        }
      ]
    },
    "expression": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_primitive"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "FIELD",
              "name": "pipes",
              "content": {
                "type": "SYMBOL",
                "name": "pipe_sequence"
              }
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "unary_expression": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "operator",
          "content": {
            "type": "ALIAS",
            "content": {
              "type": "STRING",
              "value": "!"
            },
            "named": true,
            "value": "unary_operator"
          }
        },
        {
          "type": "FIELD",
          "name": "value",
          "content": {
            "type": "SYMBOL",
            "name": "expression"
          }
        }
      ]
    },
    "binary_expression": {
      "type": "PREC_LEFT",
      "value": 1,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "FIELD",
            "name": "left",
            "content": {
              "type": "SYMBOL",
              "name": "expression"
            }
          },
          {
            "type": "FIELD",
            "name": "operator",
            "content": {
              "type": "SYMBOL",
              "name": "_binary_op"
            }
          },
          {
            "type": "FIELD",
            "name": "right",
            "content": {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "binary_expression"
                },
                {
                  "type": "SYMBOL",
                  "name": "expression"
                }
              ]
            }
          }
        ]
      }
    },
    "ternary_expression": {
      "type": "PREC_RIGHT",
      "value": 1,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "FIELD",
            "name": "condition",
            "content": {
              "type": "SYMBOL",
              "name": "_any_expression"
            }
          },
          {
            "type": "ALIAS",
            "content": {
              "type": "STRING",
              "value": "?"
            },
            "named": true,
            "value": "ternary_operator"
          },
          {
            "type": "FIELD",
            "name": "consequence",
            "content": {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "group"
                },
                {
                  "type": "SYMBOL",
                  "name": "_primitive"
                }
              ]
            }
          },
          {
            "type": "ALIAS",
            "content": {
              "type": "STRING",
              "value": ":"
            },
            "named": true,
            "value": "ternary_operator"
          },
          {
            "type": "FIELD",
            "name": "alternative",
            "content": {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "group"
                },
                {
                  "type": "SYMBOL",
                  "name": "_any_expression"
                }
              ]
            }
          }
        ]
      }
    },
    "nullish_coalescing_expression": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "condition",
          "content": {
            "type": "SYMBOL",
            "name": "_any_expression"
          }
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "STRING",
            "value": "??"
          },
          "named": true,
          "value": "coalescing_operator"
        },
        {
          "type": "FIELD",
          "name": "default",
          "content": {
            "type": "SYMBOL",
            "name": "_primitive"
          }
        }
      ]
    },
    "conditional_expression": {
      "type": "PREC_RIGHT",
      "value": 1,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "FIELD",
            "name": "left",
            "content": {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_primitive"
                },
                {
                  "type": "SYMBOL",
                  "name": "unary_expression"
                },
                {
                  "type": "SYMBOL",
                  "name": "binary_expression"
                }
              ]
            }
          },
          {
            "type": "ALIAS",
            "content": {
              "type": "CHOICE",
              "members": [
                {
                  "type": "STRING",
                  "value": "||"
                },
                {
                  "type": "STRING",
                  "value": "&&"
                }
              ]
            },
            "named": true,
            "value": "conditional_operator"
          },
          {
            "type": "FIELD",
            "name": "right",
            "content": {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_primitive"
                },
                {
                  "type": "SYMBOL",
                  "name": "unary_expression"
                },
                {
                  "type": "SYMBOL",
                  "name": "binary_expression"
                },
                {
                  "type": "SYMBOL",
                  "name": "conditional_expression"
                }
              ]
            }
          }
        ]
      }
    },
    "pipe_sequence": {
      "type": "REPEAT1",
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "ALIAS",
            "content": {
              "type": "STRING",
              "value": "|"
            },
            "named": true,
            "value": "pipe_operator"
          },
          {
            "type": "SYMBOL",
            "name": "pipe_call"
          }
        ]
      }
    },
    "pipe_call": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "name",
          "content": {
            "type": "SYMBOL",
            "name": "identifier"
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "FIELD",
              "name": "arguments",
              "content": {
                "type": "SYMBOL",
                "name": "pipe_arguments"
              }
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "pipe_arguments": {
      "type": "REPEAT1",
      "content": {
        "type": "SYMBOL",
        "name": "_pipe_argument"
      }
    },
    "_pipe_argument": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": ":"
        },
        {
          "type": "SYMBOL",
          "name": "_primitive"
        }
      ]
    },
    "_primitive": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "object"
        },
        {
          "type": "SYMBOL",
          "name": "array"
        },
        {
          "type": "SYMBOL",
          "name": "identifier"
        },
        {
          "type": "SYMBOL",
          "name": "string"
        },
        {
          "type": "SYMBOL",
          "name": "number"
        },
        {
          "type": "SYMBOL",
          "name": "group"
        },
        {
          "type": "SYMBOL",
          "name": "call_expression"
        },
        {
          "type": "SYMBOL",
          "name": "member_expression"
        },
        {
          "type": "SYMBOL",
          "name": "bracket_expression"
        }
      ]
    },
    "object": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "{"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "pair"
          }
        },
        {
          "type": "STRING",
          "value": "}"
        }
      ]
    },
    "pair": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "key",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "identifier"
              },
              {
                "type": "SYMBOL",
                "name": "string"
              }
            ]
          }
        },
        {
          "type": "STRING",
          "value": ":"
        },
        {
          "type": "FIELD",
          "name": "value",
          "content": {
            "type": "SYMBOL",
            "name": "_any_expression"
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": ","
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "array": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "["
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "expression"
            },
            {
              "type": "SYMBOL",
              "name": "unary_expression"
            }
          ]
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": ","
              },
              {
                "type": "CHOICE",
                "members": [
                  {
                    "type": "SYMBOL",
                    "name": "expression"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "unary_expression"
                  }
                ]
              }
            ]
          }
        },
        {
          "type": "STRING",
          "value": "]"
        }
      ]
    },
    "identifier": {
      "type": "PATTERN",
      "value": "[a-zA-Z_0-9\\-\\$]+"
    },
    "string": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_double_quote"
            },
            {
              "type": "REPEAT",
              "content": {
                "type": "CHOICE",
                "members": [
                  {
                    "type": "IMMEDIATE_TOKEN",
                    "content": {
                      "type": "PATTERN",
                      "value": "[^\"]"
                    }
                  },
                  {
                    "type": "SYMBOL",
                    "name": "_escape_sequence"
                  }
                ]
              }
            },
            {
              "type": "SYMBOL",
              "name": "_double_quote"
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_single_quote"
            },
            {
              "type": "REPEAT",
              "content": {
                "type": "CHOICE",
                "members": [
                  {
                    "type": "IMMEDIATE_TOKEN",
                    "content": {
                      "type": "PATTERN",
                      "value": "[^']"
                    }
                  },
                  {
                    "type": "SYMBOL",
                    "name": "_escape_sequence"
                  }
                ]
              }
            },
            {
              "type": "SYMBOL",
              "name": "_single_quote"
            }
          ]
        }
      ]
    },
    "_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}"
              },
              {
                "type": "PATTERN",
                "value": "u\\{[0-9a-fA-F]+\\}"
              },
              {
                "type": "PATTERN",
                "value": "[\\r?][\\n\\u2028\\u2029]"
              }
            ]
          }
        ]
      }
    },
    "number": {
      "type": "PATTERN",
      "value": "[0-9]+\\.?[0-9]*"
    },
    "group": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "SYMBOL",
          "name": "_any_expression"
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "call_expression": {
      "type": "PREC_LEFT",
      "value": 1,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "FIELD",
            "name": "function",
            "content": {
              "type": "SYMBOL",
              "name": "identifier"
            }
          },
          {
            "type": "STRING",
            "value": "("
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "FIELD",
                "name": "arguments",
                "content": {
                  "type": "SYMBOL",
                  "name": "arguments"
                }
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "STRING",
            "value": ")"
          }
        ]
      }
    },
    "arguments": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_primitive"
            },
            {
              "type": "SYMBOL",
              "name": "binary_expression"
            },
            {
              "type": "SYMBOL",
              "name": "unary_expression"
            }
          ]
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": ","
              },
              {
                "type": "SYMBOL",
                "name": "_primitive"
              }
            ]
          }
        }
      ]
    },
    "member_expression": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "object",
          "content": {
            "type": "SYMBOL",
            "name": "_primitive"
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "STRING",
                      "value": "."
                    },
                    {
                      "type": "STRING",
                      "value": "?."
                    },
                    {
                      "type": "STRING",
                      "value": "!."
                    }
                  ]
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "FIELD",
                      "name": "property",
                      "content": {
                        "type": "SYMBOL",
                        "name": "identifier"
                      }
                    },
                    {
                      "type": "FIELD",
                      "name": "call",
                      "content": {
                        "type": "SYMBOL",
                        "name": "call_expression"
                      }
                    }
                  ]
                }
              ]
            }
          ]
        }
      ]
    },
    "bracket_expression": {
      "type": "PREC_LEFT",
      "value": 1,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "FIELD",
            "name": "object",
            "content": {
              "type": "SYMBOL",
              "name": "_primitive"
            }
          },
          {
            "type": "STRING",
            "value": "["
          },
          {
            "type": "FIELD",
            "name": "property",
            "content": {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "identifier"
                },
                {
                  "type": "SYMBOL",
                  "name": "static_member_expression"
                }
              ]
            }
          },
          {
            "type": "STRING",
            "value": "]"
          }
        ]
      }
    },
    "static_member_expression": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_single_quote"
        },
        {
          "type": "SYMBOL",
          "name": "identifier"
        },
        {
          "type": "SYMBOL",
          "name": "_single_quote"
        }
      ]
    },
    "_closing_bracket": {
      "type": "TOKEN",
      "content": {
        "type": "PREC",
        "value": -1,
        "content": {
          "type": "STRING",
          "value": "}"
        }
      }
    },
    "_backtick": {
      "type": "STRING",
      "value": "`"
    },
    "_single_quote": {
      "type": "STRING",
      "value": "'"
    },
    "_double_quote": {
      "type": "STRING",
      "value": "\""
    },
    "_binary_op": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "+"
        },
        {
          "type": "STRING",
          "value": "-"
        },
        {
          "type": "STRING",
          "value": "/"
        },
        {
          "type": "STRING",
          "value": "*"
        },
        {
          "type": "STRING",
          "value": "%"
        },
        {
          "type": "STRING",
          "value": "=="
        },
        {
          "type": "STRING",
          "value": "==="
        },
        {
          "type": "STRING",
          "value": "!="
        },
        {
          "type": "STRING",
          "value": "!=="
        },
        {
          "type": "STRING",
          "value": "&&"
        },
        {
          "type": "STRING",
          "value": "||"
        },
        {
          "type": "STRING",
          "value": "<"
        },
        {
          "type": "STRING",
          "value": "<="
        },
        {
          "type": "STRING",
          "value": ">"
        },
        {
          "type": "STRING",
          "value": ">="
        }
      ]
    }
  },
  "extras": [
    {
      "type": "SYMBOL",
      "name": "comment"
    },
    {
      "type": "PATTERN",
      "value": "\\s+"
    }
  ],
  "conflicts": [],
  "precedences": [],
  "externals": [
    {
      "type": "SYMBOL",
      "name": "_start_tag_name"
    },
    {
      "type": "SYMBOL",
      "name": "_script_start_tag_name"
    },
    {
      "type": "SYMBOL",
      "name": "_style_start_tag_name"
    },
    {
      "type": "SYMBOL",
      "name": "_end_tag_name"
    },
    {
      "type": "SYMBOL",
      "name": "erroneous_end_tag_name"
    },
    {
      "type": "STRING",
      "value": "/>"
    },
    {
      "type": "SYMBOL",
      "name": "_implicit_end_tag"
    },
    {
      "type": "SYMBOL",
      "name": "raw_text"
    },
    {
      "type": "SYMBOL",
      "name": "comment"
    },
    {
      "type": "SYMBOL",
      "name": "_interpolation_start"
    },
    {
      "type": "SYMBOL",
      "name": "_interpolation_end"
    },
    {
      "type": "SYMBOL",
      "name": "_control_flow_start"
    }
  ],
  "inline": [],
  "supertypes": []
}
