tree-sitter-objc/src/grammar.json

11377 lines
262 KiB
JSON

{
"name": "objc",
"word": "identifier",
"rules": {
"translation_unit": {
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_top_level_item"
}
},
"_top_level_item": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "function_definition"
},
{
"type": "SYMBOL",
"name": "linkage_specification"
},
{
"type": "SYMBOL",
"name": "declaration"
},
{
"type": "SYMBOL",
"name": "_statement"
},
{
"type": "SYMBOL",
"name": "type_definition"
},
{
"type": "SYMBOL",
"name": "_empty_declaration"
},
{
"type": "SYMBOL",
"name": "preproc_if"
},
{
"type": "SYMBOL",
"name": "preproc_ifdef"
},
{
"type": "SYMBOL",
"name": "preproc_include"
},
{
"type": "SYMBOL",
"name": "preproc_def"
},
{
"type": "SYMBOL",
"name": "preproc_function_def"
},
{
"type": "SYMBOL",
"name": "_import"
},
{
"type": "SYMBOL",
"name": "class_interface"
},
{
"type": "SYMBOL",
"name": "class_implementation"
},
{
"type": "SYMBOL",
"name": "category_interface"
},
{
"type": "SYMBOL",
"name": "category_implementation"
},
{
"type": "SYMBOL",
"name": "protocol_declaration"
},
{
"type": "SYMBOL",
"name": "protocol_forward_declaration"
},
{
"type": "SYMBOL",
"name": "class_forward_declaration"
},
{
"type": "SYMBOL",
"name": "_ns_assume_nonnull_declaration"
},
{
"type": "SYMBOL",
"name": "compatibility_alias_declaration"
}
]
},
"preproc_include": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "#[ \t]*include"
},
"named": false,
"value": "#include"
},
{
"type": "FIELD",
"name": "path",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "string_literal"
},
{
"type": "SYMBOL",
"name": "system_lib_string"
},
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "preproc_call_expression"
},
"named": true,
"value": "call_expression"
}
]
}
},
{
"type": "STRING",
"value": "\n"
}
]
},
"preproc_def": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "#[ \t]*define"
},
"named": false,
"value": "#define"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "FIELD",
"name": "value",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "preproc_arg"
},
{
"type": "BLANK"
}
]
}
},
{
"type": "STRING",
"value": "\n"
}
]
},
"preproc_function_def": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "#[ \t]*define"
},
"named": false,
"value": "#define"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "FIELD",
"name": "parameters",
"content": {
"type": "SYMBOL",
"name": "preproc_params"
}
},
{
"type": "FIELD",
"name": "value",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "preproc_arg"
},
{
"type": "BLANK"
}
]
}
},
{
"type": "STRING",
"value": "\n"
}
]
},
"preproc_params": {
"type": "SEQ",
"members": [
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "("
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "STRING",
"value": "..."
}
]
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "STRING",
"value": "..."
}
]
}
]
}
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": ")"
}
]
},
"preproc_call": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "directive",
"content": {
"type": "SYMBOL",
"name": "preproc_directive"
}
},
{
"type": "FIELD",
"name": "argument",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "preproc_arg"
},
{
"type": "BLANK"
}
]
}
},
{
"type": "STRING",
"value": "\n"
}
]
},
"preproc_if": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "#[ \t]*if"
},
"named": false,
"value": "#if"
},
{
"type": "FIELD",
"name": "condition",
"content": {
"type": "SYMBOL",
"name": "_preproc_expression"
}
},
{
"type": "STRING",
"value": "\n"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_top_level_item"
}
},
{
"type": "FIELD",
"name": "alternative",
"content": {
"type": "CHOICE",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "preproc_else"
},
{
"type": "SYMBOL",
"name": "preproc_elif"
}
]
},
{
"type": "BLANK"
}
]
}
},
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "#[ \t]*endif"
},
"named": false,
"value": "#endif"
}
]
},
"preproc_ifdef": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "#[ \t]*ifdef"
},
"named": false,
"value": "#ifdef"
},
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "#[ \t]*ifndef"
},
"named": false,
"value": "#ifndef"
}
]
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_top_level_item"
}
},
{
"type": "FIELD",
"name": "alternative",
"content": {
"type": "CHOICE",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "preproc_else"
},
{
"type": "SYMBOL",
"name": "preproc_elif"
}
]
},
{
"type": "BLANK"
}
]
}
},
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "#[ \t]*endif"
},
"named": false,
"value": "#endif"
}
]
},
"preproc_else": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "#[ \t]*else"
},
"named": false,
"value": "#else"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_top_level_item"
}
}
]
},
"preproc_elif": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "#[ \t]*elif"
},
"named": false,
"value": "#elif"
},
{
"type": "FIELD",
"name": "condition",
"content": {
"type": "SYMBOL",
"name": "_preproc_expression"
}
},
{
"type": "STRING",
"value": "\n"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_top_level_item"
}
},
{
"type": "FIELD",
"name": "alternative",
"content": {
"type": "CHOICE",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "preproc_else"
},
{
"type": "SYMBOL",
"name": "preproc_elif"
}
]
},
{
"type": "BLANK"
}
]
}
}
]
},
"preproc_if_in_field_declaration_list": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "#[ \t]*if"
},
"named": false,
"value": "#if"
},
{
"type": "FIELD",
"name": "condition",
"content": {
"type": "SYMBOL",
"name": "_preproc_expression"
}
},
{
"type": "STRING",
"value": "\n"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_field_declaration_list_item"
}
},
{
"type": "FIELD",
"name": "alternative",
"content": {
"type": "CHOICE",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "preproc_else_in_field_declaration_list"
},
"named": true,
"value": "preproc_else"
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "preproc_elif_in_field_declaration_list"
},
"named": true,
"value": "preproc_elif"
}
]
},
{
"type": "BLANK"
}
]
}
},
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "#[ \t]*endif"
},
"named": false,
"value": "#endif"
}
]
},
"preproc_ifdef_in_field_declaration_list": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "#[ \t]*ifdef"
},
"named": false,
"value": "#ifdef"
},
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "#[ \t]*ifndef"
},
"named": false,
"value": "#ifndef"
}
]
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_field_declaration_list_item"
}
},
{
"type": "FIELD",
"name": "alternative",
"content": {
"type": "CHOICE",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "preproc_else_in_field_declaration_list"
},
"named": true,
"value": "preproc_else"
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "preproc_elif_in_field_declaration_list"
},
"named": true,
"value": "preproc_elif"
}
]
},
{
"type": "BLANK"
}
]
}
},
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "#[ \t]*endif"
},
"named": false,
"value": "#endif"
}
]
},
"preproc_else_in_field_declaration_list": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "#[ \t]*else"
},
"named": false,
"value": "#else"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_field_declaration_list_item"
}
}
]
},
"preproc_elif_in_field_declaration_list": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "#[ \t]*elif"
},
"named": false,
"value": "#elif"
},
{
"type": "FIELD",
"name": "condition",
"content": {
"type": "SYMBOL",
"name": "_preproc_expression"
}
},
{
"type": "STRING",
"value": "\n"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_field_declaration_list_item"
}
},
{
"type": "FIELD",
"name": "alternative",
"content": {
"type": "CHOICE",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "preproc_else_in_field_declaration_list"
},
"named": true,
"value": "preproc_else"
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "preproc_elif_in_field_declaration_list"
},
"named": true,
"value": "preproc_elif"
}
]
},
{
"type": "BLANK"
}
]
}
}
]
},
"preproc_directive": {
"type": "PATTERN",
"value": "#[ \\t]*[a-zA-Z]\\w*"
},
"preproc_arg": {
"type": "TOKEN",
"content": {
"type": "PREC",
"value": -1,
"content": {
"type": "REPEAT1",
"content": {
"type": "PATTERN",
"value": ".|\\\\\\r?\\n"
}
}
}
},
"_preproc_expression": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "preproc_has_include"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "preproc_call_expression"
},
"named": true,
"value": "call_expression"
},
{
"type": "SYMBOL",
"name": "number_literal"
},
{
"type": "SYMBOL",
"name": "char_literal"
},
{
"type": "SYMBOL",
"name": "preproc_defined"
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "preproc_unary_expression"
},
"named": true,
"value": "unary_expression"
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "preproc_binary_expression"
},
"named": true,
"value": "binary_expression"
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "preproc_parenthesized_expression"
},
"named": true,
"value": "parenthesized_expression"
}
]
}
]
},
"preproc_parenthesized_expression": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "("
},
{
"type": "SYMBOL",
"name": "_preproc_expression"
},
{
"type": "STRING",
"value": ")"
}
]
},
"preproc_defined": {
"type": "CHOICE",
"members": [
{
"type": "PREC",
"value": 14,
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "defined"
},
{
"type": "STRING",
"value": "("
},
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "STRING",
"value": ")"
}
]
}
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "defined"
},
{
"type": "SYMBOL",
"name": "identifier"
}
]
}
]
},
"preproc_unary_expression": {
"type": "PREC_LEFT",
"value": 13,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "operator",
"content": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "!"
},
{
"type": "STRING",
"value": "~"
},
{
"type": "STRING",
"value": "-"
},
{
"type": "STRING",
"value": "+"
}
]
}
},
{
"type": "FIELD",
"name": "argument",
"content": {
"type": "SYMBOL",
"name": "_preproc_expression"
}
}
]
}
},
"preproc_call_expression": {
"type": "PREC",
"value": 14,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "function",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "FIELD",
"name": "arguments",
"content": {
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "preproc_argument_list"
},
"named": true,
"value": "argument_list"
}
}
]
}
},
"preproc_argument_list": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "("
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_preproc_expression"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "_preproc_expression"
}
]
}
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": ")"
}
]
},
"preproc_binary_expression": {
"type": "CHOICE",
"members": [
{
"type": "PREC_LEFT",
"value": 10,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "left",
"content": {
"type": "SYMBOL",
"name": "_preproc_expression"
}
},
{
"type": "FIELD",
"name": "operator",
"content": {
"type": "STRING",
"value": "+"
}
},
{
"type": "FIELD",
"name": "right",
"content": {
"type": "SYMBOL",
"name": "_preproc_expression"
}
}
]
}
},
{
"type": "PREC_LEFT",
"value": 10,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "left",
"content": {
"type": "SYMBOL",
"name": "_preproc_expression"
}
},
{
"type": "FIELD",
"name": "operator",
"content": {
"type": "STRING",
"value": "-"
}
},
{
"type": "FIELD",
"name": "right",
"content": {
"type": "SYMBOL",
"name": "_preproc_expression"
}
}
]
}
},
{
"type": "PREC_LEFT",
"value": 11,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "left",
"content": {
"type": "SYMBOL",
"name": "_preproc_expression"
}
},
{
"type": "FIELD",
"name": "operator",
"content": {
"type": "STRING",
"value": "*"
}
},
{
"type": "FIELD",
"name": "right",
"content": {
"type": "SYMBOL",
"name": "_preproc_expression"
}
}
]
}
},
{
"type": "PREC_LEFT",
"value": 11,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "left",
"content": {
"type": "SYMBOL",
"name": "_preproc_expression"
}
},
{
"type": "FIELD",
"name": "operator",
"content": {
"type": "STRING",
"value": "/"
}
},
{
"type": "FIELD",
"name": "right",
"content": {
"type": "SYMBOL",
"name": "_preproc_expression"
}
}
]
}
},
{
"type": "PREC_LEFT",
"value": 11,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "left",
"content": {
"type": "SYMBOL",
"name": "_preproc_expression"
}
},
{
"type": "FIELD",
"name": "operator",
"content": {
"type": "STRING",
"value": "%"
}
},
{
"type": "FIELD",
"name": "right",
"content": {
"type": "SYMBOL",
"name": "_preproc_expression"
}
}
]
}
},
{
"type": "PREC_LEFT",
"value": 1,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "left",
"content": {
"type": "SYMBOL",
"name": "_preproc_expression"
}
},
{
"type": "FIELD",
"name": "operator",
"content": {
"type": "STRING",
"value": "||"
}
},
{
"type": "FIELD",
"name": "right",
"content": {
"type": "SYMBOL",
"name": "_preproc_expression"
}
}
]
}
},
{
"type": "PREC_LEFT",
"value": 2,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "left",
"content": {
"type": "SYMBOL",
"name": "_preproc_expression"
}
},
{
"type": "FIELD",
"name": "operator",
"content": {
"type": "STRING",
"value": "&&"
}
},
{
"type": "FIELD",
"name": "right",
"content": {
"type": "SYMBOL",
"name": "_preproc_expression"
}
}
]
}
},
{
"type": "PREC_LEFT",
"value": 3,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "left",
"content": {
"type": "SYMBOL",
"name": "_preproc_expression"
}
},
{
"type": "FIELD",
"name": "operator",
"content": {
"type": "STRING",
"value": "|"
}
},
{
"type": "FIELD",
"name": "right",
"content": {
"type": "SYMBOL",
"name": "_preproc_expression"
}
}
]
}
},
{
"type": "PREC_LEFT",
"value": 4,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "left",
"content": {
"type": "SYMBOL",
"name": "_preproc_expression"
}
},
{
"type": "FIELD",
"name": "operator",
"content": {
"type": "STRING",
"value": "^"
}
},
{
"type": "FIELD",
"name": "right",
"content": {
"type": "SYMBOL",
"name": "_preproc_expression"
}
}
]
}
},
{
"type": "PREC_LEFT",
"value": 5,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "left",
"content": {
"type": "SYMBOL",
"name": "_preproc_expression"
}
},
{
"type": "FIELD",
"name": "operator",
"content": {
"type": "STRING",
"value": "&"
}
},
{
"type": "FIELD",
"name": "right",
"content": {
"type": "SYMBOL",
"name": "_preproc_expression"
}
}
]
}
},
{
"type": "PREC_LEFT",
"value": 6,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "left",
"content": {
"type": "SYMBOL",
"name": "_preproc_expression"
}
},
{
"type": "FIELD",
"name": "operator",
"content": {
"type": "STRING",
"value": "=="
}
},
{
"type": "FIELD",
"name": "right",
"content": {
"type": "SYMBOL",
"name": "_preproc_expression"
}
}
]
}
},
{
"type": "PREC_LEFT",
"value": 6,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "left",
"content": {
"type": "SYMBOL",
"name": "_preproc_expression"
}
},
{
"type": "FIELD",
"name": "operator",
"content": {
"type": "STRING",
"value": "!="
}
},
{
"type": "FIELD",
"name": "right",
"content": {
"type": "SYMBOL",
"name": "_preproc_expression"
}
}
]
}
},
{
"type": "PREC_LEFT",
"value": 7,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "left",
"content": {
"type": "SYMBOL",
"name": "_preproc_expression"
}
},
{
"type": "FIELD",
"name": "operator",
"content": {
"type": "STRING",
"value": ">"
}
},
{
"type": "FIELD",
"name": "right",
"content": {
"type": "SYMBOL",
"name": "_preproc_expression"
}
}
]
}
},
{
"type": "PREC_LEFT",
"value": 7,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "left",
"content": {
"type": "SYMBOL",
"name": "_preproc_expression"
}
},
{
"type": "FIELD",
"name": "operator",
"content": {
"type": "STRING",
"value": ">="
}
},
{
"type": "FIELD",
"name": "right",
"content": {
"type": "SYMBOL",
"name": "_preproc_expression"
}
}
]
}
},
{
"type": "PREC_LEFT",
"value": 7,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "left",
"content": {
"type": "SYMBOL",
"name": "_preproc_expression"
}
},
{
"type": "FIELD",
"name": "operator",
"content": {
"type": "STRING",
"value": "<="
}
},
{
"type": "FIELD",
"name": "right",
"content": {
"type": "SYMBOL",
"name": "_preproc_expression"
}
}
]
}
},
{
"type": "PREC_LEFT",
"value": 7,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "left",
"content": {
"type": "SYMBOL",
"name": "_preproc_expression"
}
},
{
"type": "FIELD",
"name": "operator",
"content": {
"type": "STRING",
"value": "<"
}
},
{
"type": "FIELD",
"name": "right",
"content": {
"type": "SYMBOL",
"name": "_preproc_expression"
}
}
]
}
},
{
"type": "PREC_LEFT",
"value": 9,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "left",
"content": {
"type": "SYMBOL",
"name": "_preproc_expression"
}
},
{
"type": "FIELD",
"name": "operator",
"content": {
"type": "STRING",
"value": "<<"
}
},
{
"type": "FIELD",
"name": "right",
"content": {
"type": "SYMBOL",
"name": "_preproc_expression"
}
}
]
}
},
{
"type": "PREC_LEFT",
"value": 9,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "left",
"content": {
"type": "SYMBOL",
"name": "_preproc_expression"
}
},
{
"type": "FIELD",
"name": "operator",
"content": {
"type": "STRING",
"value": ">>"
}
},
{
"type": "FIELD",
"name": "right",
"content": {
"type": "SYMBOL",
"name": "_preproc_expression"
}
}
]
}
}
]
},
"function_definition": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "ms_call_modifier"
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "_declaration_specifiers"
},
{
"type": "FIELD",
"name": "declarator",
"content": {
"type": "SYMBOL",
"name": "_declarator"
}
},
{
"type": "FIELD",
"name": "body",
"content": {
"type": "SYMBOL",
"name": "compound_statement"
}
}
]
},
"declaration": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "swift_name_attribute_sepcifier"
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "_declaration_specifiers"
},
{
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "declarator",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_declarator"
},
{
"type": "SYMBOL",
"name": "init_declarator"
}
]
}
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "FIELD",
"name": "declarator",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_declarator"
},
{
"type": "SYMBOL",
"name": "init_declarator"
}
]
}
}
]
}
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "attribute_specifier"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "type_qualifier"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": ";"
}
]
},
"type_definition": {
"type": "PREC",
"value": 1,
"content": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "attribute_specifier"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "swift_name_attribute_sepcifier"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "typedef"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "attribute_specifier"
},
{
"type": "BLANK"
}
]
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "type_qualifier"
}
},
{
"type": "FIELD",
"name": "type",
"content": {
"type": "SYMBOL",
"name": "_type_specifier"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "attribute_specifier"
},
{
"type": "BLANK"
}
]
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "type_qualifier"
}
},
{
"type": "FIELD",
"name": "declarator",
"content": {
"type": "SYMBOL",
"name": "_type_declarator"
}
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "attribute_specifier"
},
{
"type": "BLANK"
}
]
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "type_qualifier"
}
},
{
"type": "FIELD",
"name": "type",
"content": {
"type": "SYMBOL",
"name": "ns_enum_specifier"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "attribute_specifier"
},
{
"type": "BLANK"
}
]
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "type_qualifier"
}
},
{
"type": "FIELD",
"name": "declarator",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_type_declarator"
},
{
"type": "BLANK"
}
]
}
}
]
}
]
},
{
"type": "FIELD",
"name": "attributes",
"content": {
"type": "CHOICE",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "SYMBOL",
"name": "attribute_specifier"
}
]
},
{
"type": "BLANK"
}
]
}
},
{
"type": "STRING",
"value": ";"
}
]
}
},
"_declaration_specifiers": {
"type": "SEQ",
"members": [
{
"type": "REPEAT",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "storage_class_specifier"
},
{
"type": "SYMBOL",
"name": "type_qualifier"
},
{
"type": "SYMBOL",
"name": "attribute_specifier"
},
{
"type": "SYMBOL",
"name": "ms_declspec_modifier"
}
]
}
},
{
"type": "FIELD",
"name": "type",
"content": {
"type": "SYMBOL",
"name": "_type_specifier"
}
},
{
"type": "REPEAT",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "storage_class_specifier"
},
{
"type": "SYMBOL",
"name": "type_qualifier"
},
{
"type": "SYMBOL",
"name": "attribute_specifier"
},
{
"type": "SYMBOL",
"name": "ms_declspec_modifier"
}
]
}
}
]
},
"linkage_specification": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "extern"
},
{
"type": "FIELD",
"name": "value",
"content": {
"type": "SYMBOL",
"name": "string_literal"
}
},
{
"type": "FIELD",
"name": "body",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "function_definition"
},
{
"type": "SYMBOL",
"name": "declaration"
},
{
"type": "SYMBOL",
"name": "declaration_list"
}
]
}
}
]
},
"attribute_specifier": {
"type": "PREC_DYNAMIC",
"value": 1,
"content": {
"type": "PREC_LEFT",
"value": 0,
"content": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "__attribute"
},
{
"type": "STRING",
"value": "__attribute__"
}
]
},
{
"type": "STRING",
"value": "("
},
{
"type": "SYMBOL",
"name": "argument_list"
},
{
"type": "STRING",
"value": ")"
}
]
},
{
"type": "SYMBOL",
"name": "method_attribute_specifier"
},
{
"type": "SYMBOL",
"name": "method_variadic_arguments_attribute_specifier"
},
{
"type": "SYMBOL",
"name": "availability_attribute_specifier"
}
]
}
}
},
"ms_declspec_modifier": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "__declspec"
},
{
"type": "STRING",
"value": "("
},
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "STRING",
"value": ")"
}
]
},
"ms_based_modifier": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "__based"
},
{
"type": "SYMBOL",
"name": "argument_list"
}
]
},
"ms_call_modifier": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "__cdecl"
},
{
"type": "STRING",
"value": "__clrcall"
},
{
"type": "STRING",
"value": "__stdcall"
},
{
"type": "STRING",
"value": "__fastcall"
},
{
"type": "STRING",
"value": "__thiscall"
},
{
"type": "STRING",
"value": "__vectorcall"
}
]
},
"ms_restrict_modifier": {
"type": "STRING",
"value": "__restrict"
},
"ms_unsigned_ptr_modifier": {
"type": "STRING",
"value": "__uptr"
},
"ms_signed_ptr_modifier": {
"type": "STRING",
"value": "__sptr"
},
"ms_unaligned_ptr_modifier": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "_unaligned"
},
{
"type": "STRING",
"value": "__unaligned"
}
]
},
"ms_pointer_modifier": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "ms_unaligned_ptr_modifier"
},
{
"type": "SYMBOL",
"name": "ms_restrict_modifier"
},
{
"type": "SYMBOL",
"name": "ms_unsigned_ptr_modifier"
},
{
"type": "SYMBOL",
"name": "ms_signed_ptr_modifier"
}
]
},
"declaration_list": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "{"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_top_level_item"
}
},
{
"type": "STRING",
"value": "}"
}
]
},
"_declarator": {
"type": "CHOICE",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "pointer_declarator"
},
{
"type": "SYMBOL",
"name": "function_declarator"
},
{
"type": "SYMBOL",
"name": "array_declarator"
},
{
"type": "SYMBOL",
"name": "parenthesized_declarator"
},
{
"type": "SYMBOL",
"name": "identifier"
}
]
},
{
"type": "SYMBOL",
"name": "block_declarator"
}
]
},
"_field_declarator": {
"type": "CHOICE",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "pointer_field_declarator"
},
"named": true,
"value": "pointer_declarator"
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "function_field_declarator"
},
"named": true,
"value": "function_declarator"
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "array_field_declarator"
},
"named": true,
"value": "array_declarator"
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "parenthesized_field_declarator"
},
"named": true,
"value": "parenthesized_declarator"
},
{
"type": "SYMBOL",
"name": "_field_identifier"
}
]
},
{
"type": "SYMBOL",
"name": "block_declarator"
}
]
},
"_type_declarator": {
"type": "CHOICE",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "pointer_type_declarator"
},
"named": true,
"value": "pointer_declarator"
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "function_type_declarator"
},
"named": true,
"value": "function_declarator"
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "array_type_declarator"
},
"named": true,
"value": "array_declarator"
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "parenthesized_type_declarator"
},
"named": true,
"value": "parenthesized_declarator"
},
{
"type": "SYMBOL",
"name": "_type_identifier"
}
]
},
{
"type": "SYMBOL",
"name": "block_declarator"
}
]
},
"_abstract_declarator": {
"type": "CHOICE",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "abstract_pointer_declarator"
},
{
"type": "SYMBOL",
"name": "abstract_function_declarator"
},
{
"type": "SYMBOL",
"name": "abstract_array_declarator"
},
{
"type": "SYMBOL",
"name": "abstract_parenthesized_declarator"
}
]
},
{
"type": "SYMBOL",
"name": "block_abstract_declarator"
}
]
},
"parenthesized_declarator": {
"type": "PREC_DYNAMIC",
"value": -10,
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "("
},
{
"type": "SYMBOL",
"name": "_declarator"
},
{
"type": "STRING",
"value": ")"
}
]
}
},
"parenthesized_field_declarator": {
"type": "PREC_DYNAMIC",
"value": -10,
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "("
},
{
"type": "SYMBOL",
"name": "_field_declarator"
},
{
"type": "STRING",
"value": ")"
}
]
}
},
"parenthesized_type_declarator": {
"type": "PREC_DYNAMIC",
"value": -10,
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "("
},
{
"type": "SYMBOL",
"name": "_type_declarator"
},
{
"type": "STRING",
"value": ")"
}
]
}
},
"abstract_parenthesized_declarator": {
"type": "PREC",
"value": 1,
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "("
},
{
"type": "SYMBOL",
"name": "_abstract_declarator"
},
{
"type": "STRING",
"value": ")"
}
]
}
},
"pointer_declarator": {
"type": "PREC_DYNAMIC",
"value": 1,
"content": {
"type": "PREC_RIGHT",
"value": 0,
"content": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "ms_based_modifier"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "*"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "ms_pointer_modifier"
}
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "type_qualifier"
}
},
{
"type": "FIELD",
"name": "declarator",
"content": {
"type": "SYMBOL",
"name": "_declarator"
}
}
]
}
}
},
"pointer_field_declarator": {
"type": "PREC_DYNAMIC",
"value": 1,
"content": {
"type": "PREC_RIGHT",
"value": 0,
"content": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "ms_based_modifier"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "*"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "ms_pointer_modifier"
}
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "type_qualifier"
}
},
{
"type": "FIELD",
"name": "declarator",
"content": {
"type": "SYMBOL",
"name": "_field_declarator"
}
}
]
}
}
},
"pointer_type_declarator": {
"type": "PREC_DYNAMIC",
"value": 1,
"content": {
"type": "PREC_RIGHT",
"value": 0,
"content": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "ms_based_modifier"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "*"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "ms_pointer_modifier"
}
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "type_qualifier"
}
},
{
"type": "FIELD",
"name": "declarator",
"content": {
"type": "SYMBOL",
"name": "_type_declarator"
}
}
]
}
}
},
"abstract_pointer_declarator": {
"type": "PREC_DYNAMIC",
"value": 1,
"content": {
"type": "PREC_RIGHT",
"value": 0,
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "*"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "type_qualifier"
}
},
{
"type": "FIELD",
"name": "declarator",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_abstract_declarator"
},
{
"type": "BLANK"
}
]
}
}
]
}
}
},
"function_declarator": {
"type": "PREC",
"value": 1,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "declarator",
"content": {
"type": "SYMBOL",
"name": "_declarator"
}
},
{
"type": "FIELD",
"name": "parameters",
"content": {
"type": "SYMBOL",
"name": "parameter_list"
}
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "attribute_specifier"
}
}
]
}
},
"function_field_declarator": {
"type": "PREC",
"value": 1,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "declarator",
"content": {
"type": "SYMBOL",
"name": "_field_declarator"
}
},
{
"type": "FIELD",
"name": "parameters",
"content": {
"type": "SYMBOL",
"name": "parameter_list"
}
}
]
}
},
"function_type_declarator": {
"type": "PREC",
"value": 1,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "declarator",
"content": {
"type": "SYMBOL",
"name": "_type_declarator"
}
},
{
"type": "FIELD",
"name": "parameters",
"content": {
"type": "SYMBOL",
"name": "parameter_list"
}
}
]
}
},
"abstract_function_declarator": {
"type": "PREC",
"value": 1,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "declarator",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_abstract_declarator"
},
{
"type": "BLANK"
}
]
}
},
{
"type": "FIELD",
"name": "parameters",
"content": {
"type": "SYMBOL",
"name": "parameter_list"
}
}
]
}
},
"array_declarator": {
"type": "PREC",
"value": 1,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "declarator",
"content": {
"type": "SYMBOL",
"name": "_declarator"
}
},
{
"type": "STRING",
"value": "["
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "type_qualifier"
}
},
{
"type": "FIELD",
"name": "size",
"content": {
"type": "CHOICE",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_expression"
},
{
"type": "STRING",
"value": "*"
}
]
},
{
"type": "BLANK"
}
]
}
},
{
"type": "STRING",
"value": "]"
}
]
}
},
"array_field_declarator": {
"type": "PREC",
"value": 1,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "declarator",
"content": {
"type": "SYMBOL",
"name": "_field_declarator"
}
},
{
"type": "STRING",
"value": "["
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "type_qualifier"
}
},
{
"type": "FIELD",
"name": "size",
"content": {
"type": "CHOICE",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_expression"
},
{
"type": "STRING",
"value": "*"
}
]
},
{
"type": "BLANK"
}
]
}
},
{
"type": "STRING",
"value": "]"
}
]
}
},
"array_type_declarator": {
"type": "PREC",
"value": 1,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "declarator",
"content": {
"type": "SYMBOL",
"name": "_type_declarator"
}
},
{
"type": "STRING",
"value": "["
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "type_qualifier"
}
},
{
"type": "FIELD",
"name": "size",
"content": {
"type": "CHOICE",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_expression"
},
{
"type": "STRING",
"value": "*"
}
]
},
{
"type": "BLANK"
}
]
}
},
{
"type": "STRING",
"value": "]"
}
]
}
},
"abstract_array_declarator": {
"type": "PREC",
"value": 1,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "declarator",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_abstract_declarator"
},
{
"type": "BLANK"
}
]
}
},
{
"type": "STRING",
"value": "["
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "type_qualifier"
}
},
{
"type": "FIELD",
"name": "size",
"content": {
"type": "CHOICE",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_expression"
},
{
"type": "STRING",
"value": "*"
}
]
},
{
"type": "BLANK"
}
]
}
},
{
"type": "STRING",
"value": "]"
}
]
}
},
"init_declarator": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "declarator",
"content": {
"type": "SYMBOL",
"name": "_declarator"
}
},
{
"type": "STRING",
"value": "="
},
{
"type": "FIELD",
"name": "value",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "initializer_list"
},
{
"type": "SYMBOL",
"name": "_expression"
}
]
}
}
]
},
"compound_statement": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "{"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_top_level_item"
}
},
{
"type": "STRING",
"value": "}"
}
]
},
"storage_class_specifier": {
"type": "CHOICE",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "extern"
},
{
"type": "STRING",
"value": "static"
},
{
"type": "STRING",
"value": "auto"
},
{
"type": "STRING",
"value": "register"
},
{
"type": "STRING",
"value": "inline"
}
]
},
{
"type": "PATTERN",
"value": "FOUNDATION_EXPORT|FOUNDATION_EXTERN|FOUNDATION_STATIC_INLINE|NS_INLINE|UIKIT_EXTERN|CG_EXTERN|CG_INLINE"
}
]
},
"type_qualifier": {
"type": "CHOICE",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "const"
},
{
"type": "STRING",
"value": "volatile"
},
{
"type": "STRING",
"value": "restrict"
},
{
"type": "STRING",
"value": "_Atomic"
}
]
},
{
"type": "STRING",
"value": "in"
},
{
"type": "STRING",
"value": "out"
},
{
"type": "STRING",
"value": "inout"
},
{
"type": "STRING",
"value": "bycopy"
},
{
"type": "STRING",
"value": "byref"
},
{
"type": "STRING",
"value": "oneway"
},
{
"type": "STRING",
"value": "_Nullable"
},
{
"type": "STRING",
"value": "_Nonnull"
},
{
"type": "STRING",
"value": "_Nullable_result"
},
{
"type": "STRING",
"value": "_Null_unspecified"
},
{
"type": "STRING",
"value": "__autoreleasing"
},
{
"type": "STRING",
"value": "__nullable"
},
{
"type": "STRING",
"value": "__nonnull"
},
{
"type": "STRING",
"value": "__strong"
},
{
"type": "STRING",
"value": "__weak"
},
{
"type": "STRING",
"value": "__bridge"
},
{
"type": "STRING",
"value": "__bridge_transfer"
},
{
"type": "STRING",
"value": "__bridge_retained"
},
{
"type": "STRING",
"value": "__unsafe_unretained"
},
{
"type": "STRING",
"value": "__block"
},
{
"type": "STRING",
"value": "__kindof"
},
{
"type": "STRING",
"value": "__unused"
},
{
"type": "STRING",
"value": "_Complex"
},
{
"type": "STRING",
"value": "__complex"
},
{
"type": "STRING",
"value": "IBOutlet"
},
{
"type": "STRING",
"value": "IBInspectable"
},
{
"type": "STRING",
"value": "NS_VALID_UNTIL_END_OF_SCOPE"
}
]
},
"_type_specifier": {
"type": "CHOICE",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "struct_specifier"
},
{
"type": "SYMBOL",
"name": "union_specifier"
},
{
"type": "SYMBOL",
"name": "enum_specifier"
},
{
"type": "SYMBOL",
"name": "macro_type_specifier"
},
{
"type": "SYMBOL",
"name": "sized_type_specifier"
},
{
"type": "SYMBOL",
"name": "primitive_type"
},
{
"type": "SYMBOL",
"name": "_type_identifier"
}
]
},
{
"type": "SYMBOL",
"name": "id"
},
{
"type": "SYMBOL",
"name": "SEL"
},
{
"type": "SYMBOL",
"name": "IMP"
},
{
"type": "SYMBOL",
"name": "Class"
},
{
"type": "SYMBOL",
"name": "BOOL"
},
{
"type": "SYMBOL",
"name": "auto"
},
{
"type": "SYMBOL",
"name": "instancetype"
},
{
"type": "SYMBOL",
"name": "ns_enum_specifier"
},
{
"type": "SYMBOL",
"name": "typeof_specifier"
},
{
"type": "SYMBOL",
"name": "atomic_specifier"
},
{
"type": "SYMBOL",
"name": "generic_type_specifier"
}
]
},
"sized_type_specifier": {
"type": "SEQ",
"members": [
{
"type": "REPEAT1",
"content": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "signed"
},
{
"type": "STRING",
"value": "unsigned"
},
{
"type": "STRING",
"value": "long"
},
{
"type": "STRING",
"value": "short"
}
]
}
},
{
"type": "FIELD",
"name": "type",
"content": {
"type": "CHOICE",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "PREC_DYNAMIC",
"value": -1,
"content": {
"type": "SYMBOL",
"name": "_type_identifier"
}
},
{
"type": "SYMBOL",
"name": "primitive_type"
}
]
},
{
"type": "BLANK"
}
]
}
}
]
},
"primitive_type": {
"type": "TOKEN",
"content": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "bool"
},
{
"type": "STRING",
"value": "char"
},
{
"type": "STRING",
"value": "int"
},
{
"type": "STRING",
"value": "float"
},
{
"type": "STRING",
"value": "double"
},
{
"type": "STRING",
"value": "void"
},
{
"type": "STRING",
"value": "size_t"
},
{
"type": "STRING",
"value": "ssize_t"
},
{
"type": "STRING",
"value": "intptr_t"
},
{
"type": "STRING",
"value": "uintptr_t"
},
{
"type": "STRING",
"value": "charptr_t"
},
{
"type": "STRING",
"value": "int8_t"
},
{
"type": "STRING",
"value": "int16_t"
},
{
"type": "STRING",
"value": "int32_t"
},
{
"type": "STRING",
"value": "int64_t"
},
{
"type": "STRING",
"value": "uint8_t"
},
{
"type": "STRING",
"value": "uint16_t"
},
{
"type": "STRING",
"value": "uint32_t"
},
{
"type": "STRING",
"value": "uint64_t"
},
{
"type": "STRING",
"value": "char8_t"
},
{
"type": "STRING",
"value": "char16_t"
},
{
"type": "STRING",
"value": "char32_t"
},
{
"type": "STRING",
"value": "char64_t"
}
]
}
},
"enum_specifier": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "enum"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "name",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_type_identifier"
},
{
"type": "BLANK"
}
]
}
},
{
"type": "FIELD",
"name": "superclass",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ":"
},
{
"type": "SYMBOL",
"name": "_type_specifier"
}
]
},
{
"type": "BLANK"
}
]
}
},
{
"type": "FIELD",
"name": "body",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "enumerator_list"
},
{
"type": "BLANK"
}
]
}
}
]
},
{
"type": "FIELD",
"name": "body",
"content": {
"type": "SYMBOL",
"name": "enumerator_list"
}
}
]
}
]
},
"enumerator_list": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "{"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "enumerator"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "enumerator"
}
]
}
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "}"
}
]
},
"struct_specifier": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "struct"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "attribute_specifier"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "_type_identifier"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "superclass_reference"
},
{
"type": "BLANK"
}
]
},
{
"type": "FIELD",
"name": "body",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "field_declaration_list"
},
{
"type": "BLANK"
}
]
}
}
]
},
{
"type": "FIELD",
"name": "body",
"content": {
"type": "SYMBOL",
"name": "field_declaration_list"
}
}
]
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "struct"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "attribute_specifier"
},
{
"type": "BLANK"
}
]
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "BLANK"
}
]
}
},
{
"type": "FIELD",
"name": "body",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "@defs"
},
{
"type": "STRING",
"value": "("
},
{
"type": "FIELD",
"name": "class_name",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "STRING",
"value": ")"
}
]
}
}
]
}
]
},
"union_specifier": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "union"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "ms_declspec_modifier"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "_type_identifier"
}
},
{
"type": "FIELD",
"name": "body",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "field_declaration_list"
},
{
"type": "BLANK"
}
]
}
}
]
},
{
"type": "FIELD",
"name": "body",
"content": {
"type": "SYMBOL",
"name": "field_declaration_list"
}
}
]
}
]
},
"field_declaration_list": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "{"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_field_declaration_list_item"
}
},
{
"type": "STRING",
"value": "}"
}
]
},
"_field_declaration_list_item": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "field_declaration"
},
{
"type": "SYMBOL",
"name": "preproc_def"
},
{
"type": "SYMBOL",
"name": "preproc_function_def"
},
{
"type": "SYMBOL",
"name": "preproc_call"
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "preproc_if_in_field_declaration_list"
},
"named": true,
"value": "preproc_if"
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "preproc_ifdef_in_field_declaration_list"
},
"named": true,
"value": "preproc_ifdef"
}
]
},
"field_declaration": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_declaration_specifiers"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "declarator",
"content": {
"type": "SYMBOL",
"name": "_field_declarator"
}
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "FIELD",
"name": "declarator",
"content": {
"type": "SYMBOL",
"name": "_field_declarator"
}
}
]
}
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "bitfield_clause"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": ";"
}
]
},
"bitfield_clause": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ":"
},
{
"type": "SYMBOL",
"name": "_expression"
}
]
},
"enumerator": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "="
},
{
"type": "FIELD",
"name": "value",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "REPEAT",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "attribute_specifier"
},
{
"type": "SYMBOL",
"name": "swift_name_attribute_sepcifier"
}
]
}
}
]
},
"parameter_list": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "("
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "parameter_declaration"
},
{
"type": "STRING",
"value": "..."
}
]
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "parameter_declaration"
},
{
"type": "STRING",
"value": "..."
}
]
}
]
}
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": ")"
}
]
},
"parameter_declaration": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_declaration_specifiers"
},
{
"type": "CHOICE",
"members": [
{
"type": "FIELD",
"name": "declarator",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_declarator"
},
{
"type": "SYMBOL",
"name": "_abstract_declarator"
}
]
}
},
{
"type": "BLANK"
}
]
}
]
},
"_statement": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "case_statement"
},
{
"type": "SYMBOL",
"name": "_non_case_statement"
}
]
},
"_non_case_statement": {
"type": "CHOICE",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "labeled_statement"
},
{
"type": "SYMBOL",
"name": "compound_statement"
},
{
"type": "SYMBOL",
"name": "expression_statement"
},
{
"type": "SYMBOL",
"name": "if_statement"
},
{
"type": "SYMBOL",
"name": "switch_statement"
},
{
"type": "SYMBOL",
"name": "do_statement"
},
{
"type": "SYMBOL",
"name": "while_statement"
},
{
"type": "SYMBOL",
"name": "for_statement"
},
{
"type": "SYMBOL",
"name": "return_statement"
},
{
"type": "SYMBOL",
"name": "break_statement"
},
{
"type": "SYMBOL",
"name": "continue_statement"
},
{
"type": "SYMBOL",
"name": "goto_statement"
}
]
},
{
"type": "SYMBOL",
"name": "autoreleasepool_statement"
},
{
"type": "SYMBOL",
"name": "synchronized_statement"
},
{
"type": "SYMBOL",
"name": "for_in_statement"
},
{
"type": "SYMBOL",
"name": "try_catch_statement"
},
{
"type": "SYMBOL",
"name": "throw_statement"
}
]
},
"labeled_statement": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "label",
"content": {
"type": "SYMBOL",
"name": "_statement_identifier"
}
},
{
"type": "STRING",
"value": ":"
},
{
"type": "SYMBOL",
"name": "_statement"
}
]
},
"expression_statement": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_expression"
},
{
"type": "SYMBOL",
"name": "comma_expression"
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": ";"
}
]
},
"if_statement": {
"type": "PREC_RIGHT",
"value": 0,
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "if"
},
{
"type": "FIELD",
"name": "condition",
"content": {
"type": "SYMBOL",
"name": "parenthesized_expression"
}
},
{
"type": "FIELD",
"name": "consequence",
"content": {
"type": "SYMBOL",
"name": "_statement"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "else"
},
{
"type": "FIELD",
"name": "alternative",
"content": {
"type": "SYMBOL",
"name": "_statement"
}
}
]
},
{
"type": "BLANK"
}
]
}
]
}
},
"switch_statement": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "switch"
},
{
"type": "FIELD",
"name": "condition",
"content": {
"type": "SYMBOL",
"name": "parenthesized_expression"
}
},
{
"type": "FIELD",
"name": "body",
"content": {
"type": "SYMBOL",
"name": "compound_statement"
}
}
]
},
"case_statement": {
"type": "PREC_RIGHT",
"value": 0,
"content": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "case"
},
{
"type": "FIELD",
"name": "value",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
}
]
},
{
"type": "STRING",
"value": "default"
}
]
},
{
"type": "STRING",
"value": ":"
},
{
"type": "REPEAT",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_non_case_statement"
},
{
"type": "SYMBOL",
"name": "declaration"
},
{
"type": "SYMBOL",
"name": "type_definition"
}
]
}
}
]
}
},
"while_statement": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "while"
},
{
"type": "FIELD",
"name": "condition",
"content": {
"type": "SYMBOL",
"name": "parenthesized_expression"
}
},
{
"type": "FIELD",
"name": "body",
"content": {
"type": "SYMBOL",
"name": "_statement"
}
}
]
},
"do_statement": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "do"
},
{
"type": "FIELD",
"name": "body",
"content": {
"type": "SYMBOL",
"name": "_statement"
}
},
{
"type": "STRING",
"value": "while"
},
{
"type": "FIELD",
"name": "condition",
"content": {
"type": "SYMBOL",
"name": "parenthesized_expression"
}
},
{
"type": "STRING",
"value": ";"
}
]
},
"for_statement": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "for"
},
{
"type": "STRING",
"value": "("
},
{
"type": "CHOICE",
"members": [
{
"type": "FIELD",
"name": "initializer",
"content": {
"type": "SYMBOL",
"name": "declaration"
}
},
{
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "initializer",
"content": {
"type": "CHOICE",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_expression"
},
{
"type": "SYMBOL",
"name": "comma_expression"
}
]
},
{
"type": "BLANK"
}
]
}
},
{
"type": "STRING",
"value": ";"
}
]
}
]
},
{
"type": "FIELD",
"name": "condition",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_expression"
},
{
"type": "BLANK"
}
]
}
},
{
"type": "STRING",
"value": ";"
},
{
"type": "FIELD",
"name": "update",
"content": {
"type": "CHOICE",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_expression"
},
{
"type": "SYMBOL",
"name": "comma_expression"
}
]
},
{
"type": "BLANK"
}
]
}
},
{
"type": "STRING",
"value": ")"
},
{
"type": "SYMBOL",
"name": "_statement"
}
]
},
"return_statement": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "return"
},
{
"type": "CHOICE",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_expression"
},
{
"type": "SYMBOL",
"name": "comma_expression"
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": ";"
}
]
},
"break_statement": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "break"
},
{
"type": "STRING",
"value": ";"
}
]
},
"continue_statement": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "continue"
},
{
"type": "STRING",
"value": ";"
}
]
},
"goto_statement": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "goto"
},
{
"type": "FIELD",
"name": "label",
"content": {
"type": "SYMBOL",
"name": "_statement_identifier"
}
},
{
"type": "STRING",
"value": ";"
}
]
},
"_expression": {
"type": "CHOICE",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "conditional_expression"
},
{
"type": "SYMBOL",
"name": "assignment_expression"
},
{
"type": "SYMBOL",
"name": "binary_expression"
},
{
"type": "SYMBOL",
"name": "unary_expression"
},
{
"type": "SYMBOL",
"name": "update_expression"
},
{
"type": "SYMBOL",
"name": "cast_expression"
},
{
"type": "SYMBOL",
"name": "pointer_expression"
},
{
"type": "SYMBOL",
"name": "sizeof_expression"
},
{
"type": "SYMBOL",
"name": "subscript_expression"
},
{
"type": "SYMBOL",
"name": "call_expression"
},
{
"type": "SYMBOL",
"name": "field_expression"
},
{
"type": "SYMBOL",
"name": "compound_literal_expression"
},
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "SYMBOL",
"name": "number_literal"
},
{
"type": "SYMBOL",
"name": "string_literal"
},
{
"type": "SYMBOL",
"name": "true"
},
{
"type": "SYMBOL",
"name": "false"
},
{
"type": "SYMBOL",
"name": "null"
},
{
"type": "SYMBOL",
"name": "concatenated_string"
},
{
"type": "SYMBOL",
"name": "char_literal"
},
{
"type": "SYMBOL",
"name": "parenthesized_expression"
}
]
},
{
"type": "SYMBOL",
"name": "self"
},
{
"type": "SYMBOL",
"name": "super"
},
{
"type": "SYMBOL",
"name": "nil"
},
{
"type": "SYMBOL",
"name": "YES"
},
{
"type": "SYMBOL",
"name": "NO"
},
{
"type": "SYMBOL",
"name": "message_expression"
},
{
"type": "SYMBOL",
"name": "selector_expression"
},
{
"type": "SYMBOL",
"name": "protocol_expression"
},
{
"type": "SYMBOL",
"name": "encode_expression"
},
{
"type": "SYMBOL",
"name": "number_expression"
},
{
"type": "SYMBOL",
"name": "string_expression"
},
{
"type": "SYMBOL",
"name": "object_expression"
},
{
"type": "SYMBOL",
"name": "dictionary_expression"
},
{
"type": "SYMBOL",
"name": "array_expression"
},
{
"type": "SYMBOL",
"name": "boolean_expression"
},
{
"type": "SYMBOL",
"name": "block_expression"
},
{
"type": "SYMBOL",
"name": "available_expression"
},
{
"type": "SYMBOL",
"name": "statement_expression"
},
{
"type": "SYMBOL",
"name": "va_arg_expression"
}
]
},
"comma_expression": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "left",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
},
{
"type": "STRING",
"value": ","
},
{
"type": "FIELD",
"name": "right",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_expression"
},
{
"type": "SYMBOL",
"name": "comma_expression"
}
]
}
}
]
},
"conditional_expression": {
"type": "PREC_RIGHT",
"value": -2,
"content": {
"type": "CHOICE",
"members": [
{
"type": "PREC_RIGHT",
"value": -2,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "condition",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
},
{
"type": "STRING",
"value": "?"
},
{
"type": "FIELD",
"name": "consequence",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
},
{
"type": "STRING",
"value": ":"
},
{
"type": "FIELD",
"name": "alternative",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
}
]
}
},
{
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "condition",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
},
{
"type": "STRING",
"value": "?"
},
{
"type": "STRING",
"value": ":"
},
{
"type": "FIELD",
"name": "alternative",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
}
]
}
]
}
},
"_assignment_left_expression": {
"type": "CHOICE",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "SYMBOL",
"name": "call_expression"
},
{
"type": "SYMBOL",
"name": "field_expression"
},
{
"type": "SYMBOL",
"name": "pointer_expression"
},
{
"type": "SYMBOL",
"name": "subscript_expression"
},
{
"type": "SYMBOL",
"name": "parenthesized_expression"
}
]
},
{
"type": "SYMBOL",
"name": "self"
}
]
},
"assignment_expression": {
"type": "PREC_RIGHT",
"value": -1,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "left",
"content": {
"type": "SYMBOL",
"name": "_assignment_left_expression"
}
},
{
"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": "FIELD",
"name": "right",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
}
]
}
},
"pointer_expression": {
"type": "PREC_LEFT",
"value": 12,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "operator",
"content": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "*"
},
{
"type": "STRING",
"value": "&"
}
]
}
},
{
"type": "FIELD",
"name": "argument",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
}
]
}
},
"unary_expression": {
"type": "PREC_LEFT",
"value": 13,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "operator",
"content": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "!"
},
{
"type": "STRING",
"value": "~"
},
{
"type": "STRING",
"value": "-"
},
{
"type": "STRING",
"value": "+"
}
]
}
},
{
"type": "FIELD",
"name": "argument",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
}
]
}
},
"binary_expression": {
"type": "CHOICE",
"members": [
{
"type": "PREC_LEFT",
"value": 10,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "left",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
},
{
"type": "FIELD",
"name": "operator",
"content": {
"type": "STRING",
"value": "+"
}
},
{
"type": "FIELD",
"name": "right",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
}
]
}
},
{
"type": "PREC_LEFT",
"value": 10,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "left",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
},
{
"type": "FIELD",
"name": "operator",
"content": {
"type": "STRING",
"value": "-"
}
},
{
"type": "FIELD",
"name": "right",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
}
]
}
},
{
"type": "PREC_LEFT",
"value": 11,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "left",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
},
{
"type": "FIELD",
"name": "operator",
"content": {
"type": "STRING",
"value": "*"
}
},
{
"type": "FIELD",
"name": "right",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
}
]
}
},
{
"type": "PREC_LEFT",
"value": 11,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "left",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
},
{
"type": "FIELD",
"name": "operator",
"content": {
"type": "STRING",
"value": "/"
}
},
{
"type": "FIELD",
"name": "right",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
}
]
}
},
{
"type": "PREC_LEFT",
"value": 11,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "left",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
},
{
"type": "FIELD",
"name": "operator",
"content": {
"type": "STRING",
"value": "%"
}
},
{
"type": "FIELD",
"name": "right",
"content": {
"type": "SYMBOL",
"name": "_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": "STRING",
"value": "||"
}
},
{
"type": "FIELD",
"name": "right",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
}
]
}
},
{
"type": "PREC_LEFT",
"value": 2,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "left",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
},
{
"type": "FIELD",
"name": "operator",
"content": {
"type": "STRING",
"value": "&&"
}
},
{
"type": "FIELD",
"name": "right",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
}
]
}
},
{
"type": "PREC_LEFT",
"value": 3,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "left",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
},
{
"type": "FIELD",
"name": "operator",
"content": {
"type": "STRING",
"value": "|"
}
},
{
"type": "FIELD",
"name": "right",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
}
]
}
},
{
"type": "PREC_LEFT",
"value": 4,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "left",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
},
{
"type": "FIELD",
"name": "operator",
"content": {
"type": "STRING",
"value": "^"
}
},
{
"type": "FIELD",
"name": "right",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
}
]
}
},
{
"type": "PREC_LEFT",
"value": 5,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "left",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
},
{
"type": "FIELD",
"name": "operator",
"content": {
"type": "STRING",
"value": "&"
}
},
{
"type": "FIELD",
"name": "right",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
}
]
}
},
{
"type": "PREC_LEFT",
"value": 6,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "left",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
},
{
"type": "FIELD",
"name": "operator",
"content": {
"type": "STRING",
"value": "=="
}
},
{
"type": "FIELD",
"name": "right",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
}
]
}
},
{
"type": "PREC_LEFT",
"value": 6,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "left",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
},
{
"type": "FIELD",
"name": "operator",
"content": {
"type": "STRING",
"value": "!="
}
},
{
"type": "FIELD",
"name": "right",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
}
]
}
},
{
"type": "PREC_LEFT",
"value": 7,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "left",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
},
{
"type": "FIELD",
"name": "operator",
"content": {
"type": "STRING",
"value": ">"
}
},
{
"type": "FIELD",
"name": "right",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
}
]
}
},
{
"type": "PREC_LEFT",
"value": 7,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "left",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
},
{
"type": "FIELD",
"name": "operator",
"content": {
"type": "STRING",
"value": ">="
}
},
{
"type": "FIELD",
"name": "right",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
}
]
}
},
{
"type": "PREC_LEFT",
"value": 7,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "left",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
},
{
"type": "FIELD",
"name": "operator",
"content": {
"type": "STRING",
"value": "<="
}
},
{
"type": "FIELD",
"name": "right",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
}
]
}
},
{
"type": "PREC_LEFT",
"value": 7,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "left",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
},
{
"type": "FIELD",
"name": "operator",
"content": {
"type": "STRING",
"value": "<"
}
},
{
"type": "FIELD",
"name": "right",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
}
]
}
},
{
"type": "PREC_LEFT",
"value": 9,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "left",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
},
{
"type": "FIELD",
"name": "operator",
"content": {
"type": "STRING",
"value": "<<"
}
},
{
"type": "FIELD",
"name": "right",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
}
]
}
},
{
"type": "PREC_LEFT",
"value": 9,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "left",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
},
{
"type": "FIELD",
"name": "operator",
"content": {
"type": "STRING",
"value": ">>"
}
},
{
"type": "FIELD",
"name": "right",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
}
]
}
}
]
},
"update_expression": {
"type": "PREC_RIGHT",
"value": 13,
"content": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "operator",
"content": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "--"
},
{
"type": "STRING",
"value": "++"
}
]
}
},
{
"type": "FIELD",
"name": "argument",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "argument",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
},
{
"type": "FIELD",
"name": "operator",
"content": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "--"
},
{
"type": "STRING",
"value": "++"
}
]
}
}
]
}
]
}
},
"cast_expression": {
"type": "PREC",
"value": 12,
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "("
},
{
"type": "FIELD",
"name": "type",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "type_descriptor"
},
{
"type": "SYMBOL",
"name": "block_abstract_declarator"
}
]
}
},
{
"type": "STRING",
"value": ")"
},
{
"type": "FIELD",
"name": "value",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
}
]
}
},
"type_descriptor": {
"type": "SEQ",
"members": [
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "type_qualifier"
}
},
{
"type": "FIELD",
"name": "type",
"content": {
"type": "SYMBOL",
"name": "_type_specifier"
}
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "type_qualifier"
}
},
{
"type": "FIELD",
"name": "declarator",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_abstract_declarator"
},
{
"type": "BLANK"
}
]
}
}
]
},
"sizeof_expression": {
"type": "PREC",
"value": 8,
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "sizeof"
},
{
"type": "CHOICE",
"members": [
{
"type": "FIELD",
"name": "value",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "("
},
{
"type": "FIELD",
"name": "type",
"content": {
"type": "SYMBOL",
"name": "type_descriptor"
}
},
{
"type": "STRING",
"value": ")"
}
]
}
]
}
]
}
},
"subscript_expression": {
"type": "PREC",
"value": 16,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "argument",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
},
{
"type": "STRING",
"value": "["
},
{
"type": "FIELD",
"name": "index",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
},
{
"type": "STRING",
"value": "]"
}
]
}
},
"call_expression": {
"type": "PREC",
"value": 14,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "function",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
},
{
"type": "FIELD",
"name": "arguments",
"content": {
"type": "SYMBOL",
"name": "argument_list"
}
}
]
}
},
"argument_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": ")"
}
]
},
"field_expression": {
"type": "SEQ",
"members": [
{
"type": "PREC",
"value": 15,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "argument",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "."
},
{
"type": "STRING",
"value": "->"
}
]
}
]
}
},
{
"type": "FIELD",
"name": "field",
"content": {
"type": "SYMBOL",
"name": "_field_identifier"
}
}
]
},
"compound_literal_expression": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "("
},
{
"type": "FIELD",
"name": "type",
"content": {
"type": "SYMBOL",
"name": "type_descriptor"
}
},
{
"type": "STRING",
"value": ")"
},
{
"type": "FIELD",
"name": "value",
"content": {
"type": "SYMBOL",
"name": "initializer_list"
}
}
]
},
"parenthesized_expression": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "("
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_expression"
},
{
"type": "SYMBOL",
"name": "comma_expression"
}
]
},
{
"type": "STRING",
"value": ")"
}
]
},
"initializer_list": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "{"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "initializer_pair"
},
{
"type": "SYMBOL",
"name": "_expression"
},
{
"type": "SYMBOL",
"name": "initializer_list"
}
]
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "initializer_pair"
},
{
"type": "SYMBOL",
"name": "_expression"
},
{
"type": "SYMBOL",
"name": "initializer_list"
}
]
}
]
}
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "}"
}
]
},
"initializer_pair": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "designator",
"content": {
"type": "REPEAT1",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "subscript_designator"
},
{
"type": "SYMBOL",
"name": "field_designator"
}
]
}
}
},
{
"type": "STRING",
"value": "="
},
{
"type": "FIELD",
"name": "value",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_expression"
},
{
"type": "SYMBOL",
"name": "initializer_list"
}
]
}
}
]
},
"subscript_designator": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "["
},
{
"type": "SYMBOL",
"name": "_expression"
},
{
"type": "STRING",
"value": "]"
}
]
},
"field_designator": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "."
},
{
"type": "SYMBOL",
"name": "_field_identifier"
}
]
},
"number_literal": {
"type": "TOKEN",
"content": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[-\\+]"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "0x"
},
{
"type": "STRING",
"value": "0b"
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "REPEAT1",
"content": {
"type": "PATTERN",
"value": "[0-9]"
}
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "'"
},
{
"type": "REPEAT1",
"content": {
"type": "PATTERN",
"value": "[0-9]"
}
}
]
}
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "0b"
},
{
"type": "SEQ",
"members": [
{
"type": "REPEAT1",
"content": {
"type": "PATTERN",
"value": "[0-9]"
}
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "'"
},
{
"type": "REPEAT1",
"content": {
"type": "PATTERN",
"value": "[0-9]"
}
}
]
}
}
]
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "0x"
},
{
"type": "SEQ",
"members": [
{
"type": "REPEAT1",
"content": {
"type": "PATTERN",
"value": "[0-9a-fA-F]"
}
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "'"
},
{
"type": "REPEAT1",
"content": {
"type": "PATTERN",
"value": "[0-9a-fA-F]"
}
}
]
}
}
]
}
]
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "."
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "REPEAT1",
"content": {
"type": "PATTERN",
"value": "[0-9a-fA-F]"
}
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "'"
},
{
"type": "REPEAT1",
"content": {
"type": "PATTERN",
"value": "[0-9a-fA-F]"
}
}
]
}
}
]
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "."
},
{
"type": "SEQ",
"members": [
{
"type": "REPEAT1",
"content": {
"type": "PATTERN",
"value": "[0-9]"
}
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "'"
},
{
"type": "REPEAT1",
"content": {
"type": "PATTERN",
"value": "[0-9]"
}
}
]
}
}
]
}
]
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "PATTERN",
"value": "[eEpP]"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[-\\+]"
},
{
"type": "BLANK"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "REPEAT1",
"content": {
"type": "PATTERN",
"value": "[0-9a-fA-F]"
}
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "'"
},
{
"type": "REPEAT1",
"content": {
"type": "PATTERN",
"value": "[0-9a-fA-F]"
}
}
]
}
}
]
}
]
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "REPEAT",
"content": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "u"
},
{
"type": "STRING",
"value": "l"
},
{
"type": "STRING",
"value": "U"
},
{
"type": "STRING",
"value": "L"
},
{
"type": "STRING",
"value": "f"
},
{
"type": "STRING",
"value": "F"
}
]
}
}
]
}
},
"char_literal": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "L'"
},
{
"type": "STRING",
"value": "u'"
},
{
"type": "STRING",
"value": "U'"
},
{
"type": "STRING",
"value": "u8'"
},
{
"type": "STRING",
"value": "'"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "escape_sequence"
},
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "PATTERN",
"value": "[^\\n']"
}
}
]
},
{
"type": "STRING",
"value": "'"
}
]
},
"concatenated_string": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "string_literal"
},
{
"type": "REPEAT1",
"content": {
"type": "SYMBOL",
"name": "string_literal"
}
}
]
},
"string_literal": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "L\""
},
{
"type": "STRING",
"value": "u\""
},
{
"type": "STRING",
"value": "U\""
},
{
"type": "STRING",
"value": "u8\""
},
{
"type": "STRING",
"value": "\""
}
]
},
{
"type": "REPEAT",
"content": {
"type": "CHOICE",
"members": [
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "PREC",
"value": 1,
"content": {
"type": "PATTERN",
"value": "[^\\\\\"\\n]+"
}
}
},
{
"type": "SYMBOL",
"name": "escape_sequence"
}
]
}
},
{
"type": "STRING",
"value": "\""
}
]
},
"escape_sequence": {
"type": "TOKEN",
"content": {
"type": "PREC",
"value": 1,
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "\\"
},
{
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[^xuU]"
},
{
"type": "PATTERN",
"value": "\\d{2,3}"
},
{
"type": "PATTERN",
"value": "x[0-9a-fA-F]{2,}"
},
{
"type": "PATTERN",
"value": "u[0-9a-fA-F]{4}"
},
{
"type": "PATTERN",
"value": "U[0-9a-fA-F]{8}"
}
]
}
]
}
}
},
"system_lib_string": {
"type": "TOKEN",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "<"
},
{
"type": "REPEAT",
"content": {
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[^>\\n]"
},
{
"type": "STRING",
"value": "\\>"
}
]
}
},
{
"type": "STRING",
"value": ">"
}
]
}
},
"true": {
"type": "TOKEN",
"content": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "TRUE"
},
{
"type": "STRING",
"value": "true"
}
]
}
},
"false": {
"type": "TOKEN",
"content": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "FALSE"
},
{
"type": "STRING",
"value": "false"
}
]
}
},
"null": {
"type": "STRING",
"value": "NULL"
},
"identifier": {
"type": "PATTERN",
"value": "[$a-zA-Z_](\\w|\\$)*"
},
"_type_identifier": {
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "identifier"
},
"named": true,
"value": "type_identifier"
},
"_field_identifier": {
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "identifier"
},
"named": true,
"value": "field_identifier"
},
"_statement_identifier": {
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "identifier"
},
"named": true,
"value": "statement_identifier"
},
"_empty_declaration": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_type_specifier"
},
{
"type": "STRING",
"value": ";"
}
]
},
"macro_type_specifier": {
"type": "PREC_DYNAMIC",
"value": -1,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "STRING",
"value": "("
},
{
"type": "FIELD",
"name": "type",
"content": {
"type": "SYMBOL",
"name": "type_descriptor"
}
},
{
"type": "STRING",
"value": ")"
}
]
}
},
"comment": {
"type": "TOKEN",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "//"
},
{
"type": "PATTERN",
"value": "(\\\\(.|\\r?\\n)|[^\\\\\\n])*"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "/*"
},
{
"type": "PATTERN",
"value": "[^*]*\\*+([^/*][^*]*\\*+)*"
},
{
"type": "STRING",
"value": "/"
}
]
}
]
}
},
"_name": {
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
"_import": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "preproc_import"
},
{
"type": "SYMBOL",
"name": "module_import"
}
]
},
"preproc_import": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "#import"
},
{
"type": "FIELD",
"name": "path",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "system_lib_string"
},
{
"type": "SYMBOL",
"name": "string_literal"
}
]
}
}
]
},
"module_import": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "@import"
},
{
"type": "FIELD",
"name": "module",
"content": {
"type": "SYMBOL",
"name": "module_string"
}
}
]
},
"module_string": {
"type": "PATTERN",
"value": "[a-zA-Z_]\\w*(\\.[a-zA-Z_]\\w*)*"
},
"_ns_assume_nonnull_declaration": {
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "PATTERN",
"value": "NS_ASSUME_NONNULL_BEGIN|NS_ASSUME_NONNULL_END|CF_EXTERN_C_BEGIN|CF_EXTERN_C_END"
}
},
"compatibility_alias_declaration": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "@compatibility_alias"
},
{
"type": "FIELD",
"name": "class_name",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "FIELD",
"name": "alias_name",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "STRING",
"value": ";"
}
]
},
"protocol_forward_declaration": {
"type": "PREC",
"value": 6,
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "@protocol"
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_name"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "_name"
}
]
}
}
]
},
{
"type": "STRING",
"value": ";"
}
]
}
},
"class_forward_declaration": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "@class"
},
{
"type": "SEQ",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_name"
},
{
"type": "CHOICE",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "protocol_qualifiers"
},
{
"type": "SYMBOL",
"name": "parameterized_class_type_arguments"
}
]
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_name"
},
{
"type": "CHOICE",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "protocol_qualifiers"
},
{
"type": "SYMBOL",
"name": "parameterized_class_type_arguments"
}
]
},
{
"type": "BLANK"
}
]
}
]
}
]
}
}
]
},
{
"type": "STRING",
"value": ";"
}
]
},
"class_interface": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "class_interface_attribute_sepcifier"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "swift_name_attribute_sepcifier"
},
{
"type": "BLANK"
}
]
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "attribute_specifier"
}
},
{
"type": "STRING",
"value": "@interface"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_name"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "parameterized_class_type_arguments"
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "SYMBOL",
"name": "generics_type_reference"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "superclass_reference"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "parameterized_class_type_arguments"
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "protocol_qualifiers"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_instance_variables"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_interface_declaration"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "@end"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "class_interface_attribute_sepcifier"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "swift_name_attribute_sepcifier"
},
{
"type": "BLANK"
}
]
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "attribute_specifier"
}
},
{
"type": "STRING",
"value": "@interface"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_name"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "parameterized_class_type_arguments"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "protocol_qualifiers"
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "SYMBOL",
"name": "generics_type_reference"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "superclass_reference"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_instance_variables"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_interface_declaration"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "@end"
}
]
}
]
},
"category_interface": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "@interface"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_name"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "parameterized_class_type_arguments"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "protocol_qualifiers"
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "SYMBOL",
"name": "generics_type_reference"
}
]
},
{
"type": "STRING",
"value": "("
},
{
"type": "FIELD",
"name": "category",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "BLANK"
}
]
}
},
{
"type": "STRING",
"value": ")"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "protocol_qualifiers"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_instance_variables"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_interface_declaration"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "@end"
}
]
},
"protocol_declaration": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "swift_name_attribute_sepcifier"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "attribute_specifier"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "@protocol"
},
{
"type": "SYMBOL",
"name": "_name"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "protocol_qualifiers"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_interface_declaration"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "@end"
}
]
},
"superclass_reference": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ":"
},
{
"type": "SYMBOL",
"name": "_name"
},
{
"type": "FIELD",
"name": "type_reference",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "generic_type_references"
},
{
"type": "BLANK"
}
]
}
}
]
},
"protocol_qualifiers": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "<"
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_protocol_identifier"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "_protocol_identifier"
}
]
}
}
]
},
{
"type": "STRING",
"value": ">"
}
]
},
"_protocol_identifier": {
"type": "PREC_DYNAMIC",
"value": 5,
"content": {
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
}
},
"parameterized_class_type_arguments": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "<"
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_parameterized_class_type_arguments"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "_parameterized_class_type_arguments"
}
]
}
}
]
},
{
"type": "STRING",
"value": ">"
}
]
},
"_parameterized_class_type_arguments": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "__covariant"
},
{
"type": "STRING",
"value": "__contravariant"
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "FIELD",
"name": "type",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ":"
},
{
"type": "SYMBOL",
"name": "type_descriptor"
}
]
},
{
"type": "BLANK"
}
]
}
]
},
"generics_type_reference": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "__GENERICS"
},
{
"type": "STRING",
"value": "("
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_name"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "_type_specifier"
}
]
}
}
]
},
{
"type": "STRING",
"value": ")"
}
]
},
"_instance_variables": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "{"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_instance_variable_declaration"
}
},
{
"type": "STRING",
"value": "}"
}
]
},
"_instance_variable_declaration": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_visibility_specification"
},
{
"type": "SYMBOL",
"name": "field_declaration"
}
]
},
"_visibility_specification": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "private"
},
{
"type": "SYMBOL",
"name": "public"
},
{
"type": "SYMBOL",
"name": "protected"
},
{
"type": "SYMBOL",
"name": "package"
}
]
},
"private": {
"type": "STRING",
"value": "@private"
},
"public": {
"type": "STRING",
"value": "@public"
},
"protected": {
"type": "STRING",
"value": "@protected"
},
"package": {
"type": "STRING",
"value": "@package"
},
"_interface_declaration": {
"type": "REPEAT1",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_ns_assume_nonnull_declaration"
},
{
"type": "SYMBOL",
"name": "_interface_declaration_specifier"
},
{
"type": "SYMBOL",
"name": "declaration"
},
{
"type": "SYMBOL",
"name": "method_declaration"
},
{
"type": "SYMBOL",
"name": "property_declaration"
},
{
"type": "SYMBOL",
"name": "_empty_declaration"
},
{
"type": "SYMBOL",
"name": "type_definition"
},
{
"type": "SYMBOL",
"name": "preproc_def"
},
{
"type": "SYMBOL",
"name": "preproc_function_def"
}
]
}
},
"_interface_declaration_specifier": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "optional"
},
{
"type": "SYMBOL",
"name": "required"
}
]
},
"optional": {
"type": "STRING",
"value": "@optional"
},
"required": {
"type": "STRING",
"value": "@required"
},
"method_declaration": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "scope",
"content": {
"type": "SYMBOL",
"name": "_class_member_scope"
}
},
{
"type": "FIELD",
"name": "return_type",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_method_argument_type_specifier"
},
{
"type": "BLANK"
}
]
}
},
{
"type": "FIELD",
"name": "selector",
"content": {
"type": "SYMBOL",
"name": "_method_selector"
}
},
{
"type": "REPEAT",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "attribute_specifier"
},
{
"type": "SYMBOL",
"name": "swift_name_attribute_sepcifier"
}
]
}
},
{
"type": "STRING",
"value": ";"
}
]
},
"_class_member_scope": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "class_scope"
},
{
"type": "SYMBOL",
"name": "instance_scope"
}
]
},
"class_scope": {
"type": "STRING",
"value": "+"
},
"instance_scope": {
"type": "STRING",
"value": "-"
},
"property_declaration": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "@property"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "property_attributes"
},
{
"type": "BLANK"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "attribute_specifier"
},
{
"type": "BLANK"
}
]
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "type_qualifier"
}
},
{
"type": "FIELD",
"name": "type",
"content": {
"type": "SYMBOL",
"name": "_type_specifier"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "attribute_specifier"
},
{
"type": "BLANK"
}
]
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "type_qualifier"
}
},
{
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "declarator",
"content": {
"type": "SYMBOL",
"name": "_declarator"
}
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "FIELD",
"name": "declarator",
"content": {
"type": "SYMBOL",
"name": "_declarator"
}
}
]
}
}
]
}
]
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "attribute_specifier"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "swift_name_attribute_sepcifier"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": ";"
}
]
},
"property_attributes": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "("
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_property_attribute"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "_property_attribute"
}
]
}
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": ")"
}
]
},
"_property_attribute": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "getter"
},
{
"type": "SYMBOL",
"name": "setter"
},
{
"type": "SYMBOL",
"name": "nonnull"
},
{
"type": "SYMBOL",
"name": "nullable"
},
{
"type": "SYMBOL",
"name": "null_resettable"
},
{
"type": "SYMBOL",
"name": "unsafe_unretained"
},
{
"type": "SYMBOL",
"name": "null_unspecified"
},
{
"type": "SYMBOL",
"name": "direct"
},
{
"type": "SYMBOL",
"name": "readwrite"
},
{
"type": "SYMBOL",
"name": "readonly"
},
{
"type": "SYMBOL",
"name": "strong"
},
{
"type": "SYMBOL",
"name": "weak"
},
{
"type": "SYMBOL",
"name": "copy"
},
{
"type": "SYMBOL",
"name": "assign"
},
{
"type": "SYMBOL",
"name": "retain"
},
{
"type": "SYMBOL",
"name": "atomic"
},
{
"type": "SYMBOL",
"name": "nonatomic"
},
{
"type": "SYMBOL",
"name": "class"
},
{
"type": "SYMBOL",
"name": "NS_NONATOMIC_IOSONLY"
},
{
"type": "SYMBOL",
"name": "DISPATCH_QUEUE_REFERENCE_TYPE"
}
]
},
"class_interface_attribute_sepcifier": {
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "PATTERN",
"value": "IB_DESIGNABLE|NS_ROOT_CLASS"
}
},
"method_attribute_specifier": {
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "PATTERN",
"value": "NS_DESIGNATED_INITIALIZER|NS_REQUIRES_SUPER|CF_RETURNS_RETAINED|CF_RETURNS_NOT_RETAINED|NS_REQUIRES_NIL_TERMINATION|NS_DIRECT"
}
},
"method_variadic_arguments_attribute_specifier": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "NS_FORMAT_FUNCTION"
},
{
"type": "STRING",
"value": "CF_FORMAT_FUNCTION"
}
]
},
{
"type": "STRING",
"value": "("
},
{
"type": "SYMBOL",
"name": "number_literal"
},
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "number_literal"
},
{
"type": "STRING",
"value": ")"
}
]
},
"availability_attribute_specifier": {
"type": "PREC",
"value": 1,
"content": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "NS_UNAVAILABLE"
},
{
"type": "STRING",
"value": "DEPRECATED_ATTRIBUTE"
},
{
"type": "STRING",
"value": "UI_APPEARANCE_SELECTOR"
},
{
"type": "STRING",
"value": "UNAVAILABLE_ATTRIBUTE"
},
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "NS_AVAILABLE"
},
{
"type": "STRING",
"value": "__IOS_AVAILABLE"
},
{
"type": "STRING",
"value": "NS_AVAILABLE_IOS"
},
{
"type": "STRING",
"value": "API_AVAILABLE"
},
{
"type": "STRING",
"value": "API_UNAVAILABLE"
},
{
"type": "STRING",
"value": "API_DEPRECATED"
},
{
"type": "STRING",
"value": "NS_ENUM_AVAILABLE_IOS"
},
{
"type": "STRING",
"value": "NS_DEPRECATED_IOS"
},
{
"type": "STRING",
"value": "NS_ENUM_DEPRECATED_IOS"
},
{
"type": "STRING",
"value": "DEPRECATED_MSG_ATTRIBUTE"
},
{
"type": "STRING",
"value": "__deprecated_msg"
},
{
"type": "STRING",
"value": "__deprecated_enum_msg"
},
{
"type": "STRING",
"value": "NS_SWIFT_UNAVAILABLE"
},
{
"type": "STRING",
"value": "NS_EXTENSION_UNAVAILABLE_IOS"
},
{
"type": "STRING",
"value": "NS_CLASS_AVAILABLE_IOS"
},
{
"type": "STRING",
"value": "NS_CLASS_DEPRECATED_IOS"
}
]
},
{
"type": "STRING",
"value": "("
},
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "FIELD",
"name": "message",
"content": {
"type": "SYMBOL",
"name": "string_literal"
}
},
{
"type": "SYMBOL",
"name": "platform_version"
}
]
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "CHOICE",
"members": [
{
"type": "FIELD",
"name": "message",
"content": {
"type": "SYMBOL",
"name": "string_literal"
}
},
{
"type": "SYMBOL",
"name": "platform_version"
}
]
}
]
}
}
]
},
{
"type": "STRING",
"value": ")"
}
]
}
]
}
},
"platform_version": {
"type": "CHOICE",
"members": [
{
"type": "FIELD",
"name": "version",
"content": {
"type": "PATTERN",
"value": "\\d+_\\d+"
}
},
{
"type": "FIELD",
"name": "version",
"content": {
"type": "SYMBOL",
"name": "number_literal"
}
},
{
"type": "FIELD",
"name": "platform",
"content": {
"type": "SYMBOL",
"name": "platform"
}
},
{
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "platform",
"content": {
"type": "SYMBOL",
"name": "platform"
}
},
{
"type": "STRING",
"value": "("
},
{
"type": "FIELD",
"name": "version",
"content": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "\\d+_\\d+"
},
{
"type": "SYMBOL",
"name": "number_literal"
},
{
"type": "SYMBOL",
"name": "identifier"
}
]
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "\\d+_\\d+"
},
{
"type": "SYMBOL",
"name": "number_literal"
},
{
"type": "SYMBOL",
"name": "identifier"
}
]
}
]
}
}
]
}
},
{
"type": "STRING",
"value": ")"
}
]
}
]
},
"platform": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "ios"
},
{
"type": "STRING",
"value": "tvos"
},
{
"type": "STRING",
"value": "macos"
},
{
"type": "STRING",
"value": "macosx"
},
{
"type": "STRING",
"value": "watchos"
}
]
},
"swift_name_attribute_sepcifier": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "NS_REFINED_FOR_SWIFT"
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "NS_SWIFT_NAME"
},
{
"type": "STRING",
"value": "("
},
{
"type": "FIELD",
"name": "class",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "BLANK"
}
]
}
},
{
"type": "FIELD",
"name": "method",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "FIELD",
"name": "parameters",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "("
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_type_specifier"
}
},
{
"type": "STRING",
"value": ":"
}
]
}
},
{
"type": "STRING",
"value": ")"
}
]
},
{
"type": "BLANK"
}
]
}
},
{
"type": "STRING",
"value": ")"
}
]
}
]
},
"getter": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "getter"
},
{
"type": "STRING",
"value": "="
},
{
"type": "SYMBOL",
"name": "_name"
}
]
},
"setter": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "setter"
},
{
"type": "STRING",
"value": "="
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_name"
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": ":"
},
{
"type": "BLANK"
}
]
}
]
}
]
},
"nonnull": {
"type": "STRING",
"value": "nonnull"
},
"nullable": {
"type": "STRING",
"value": "nullable"
},
"null_resettable": {
"type": "STRING",
"value": "null_resettable"
},
"unsafe_unretained": {
"type": "STRING",
"value": "unsafe_unretained"
},
"null_unspecified": {
"type": "STRING",
"value": "null_unspecified"
},
"direct": {
"type": "STRING",
"value": "direct"
},
"readwrite": {
"type": "STRING",
"value": "readwrite"
},
"readonly": {
"type": "STRING",
"value": "readonly"
},
"strong": {
"type": "STRING",
"value": "strong"
},
"weak": {
"type": "STRING",
"value": "weak"
},
"copy": {
"type": "STRING",
"value": "copy"
},
"assign": {
"type": "STRING",
"value": "assign"
},
"retain": {
"type": "STRING",
"value": "retain"
},
"atomic": {
"type": "STRING",
"value": "atomic"
},
"nonatomic": {
"type": "STRING",
"value": "nonatomic"
},
"class": {
"type": "STRING",
"value": "class"
},
"NS_NONATOMIC_IOSONLY": {
"type": "STRING",
"value": "NS_NONATOMIC_IOSONLY"
},
"DISPATCH_QUEUE_REFERENCE_TYPE": {
"type": "STRING",
"value": "DISPATCH_QUEUE_REFERENCE_TYPE"
},
"class_implementation": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "attribute_specifier"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "@implementation"
},
{
"type": "SYMBOL",
"name": "_name"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "superclass_reference"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "NS_UNAVAILABLE"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_instance_variables"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_implementation_definition"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "@end"
}
]
},
"category_implementation": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "attribute_specifier"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "@implementation"
},
{
"type": "SYMBOL",
"name": "_name"
},
{
"type": "STRING",
"value": "("
},
{
"type": "FIELD",
"name": "category",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "STRING",
"value": ")"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_implementation_definition"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "@end"
}
]
},
"_implementation_definition": {
"type": "REPEAT1",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_ns_assume_nonnull_declaration"
},
{
"type": "SYMBOL",
"name": "function_definition"
},
{
"type": "SYMBOL",
"name": "declaration"
},
{
"type": "SYMBOL",
"name": "synthesize_definition"
},
{
"type": "SYMBOL",
"name": "dynamic_definition"
},
{
"type": "SYMBOL",
"name": "method_definition"
},
{
"type": "SYMBOL",
"name": "type_definition"
},
{
"type": "SYMBOL",
"name": "preproc_def"
},
{
"type": "SYMBOL",
"name": "preproc_function_def"
}
]
}
},
"synthesize_definition": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "@synthesize"
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "synthesize_property"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "synthesize_property"
}
]
}
}
]
},
{
"type": "STRING",
"value": ";"
}
]
},
"synthesize_property": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "property",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "="
},
{
"type": "FIELD",
"name": "instance_variable",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
}
]
},
{
"type": "BLANK"
}
]
}
]
},
"dynamic_definition": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "@dynamic"
},
{
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "property",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "FIELD",
"name": "property",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
}
]
}
}
]
},
{
"type": "STRING",
"value": ";"
}
]
},
"method_definition": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "scope",
"content": {
"type": "SYMBOL",
"name": "_class_member_scope"
}
},
{
"type": "FIELD",
"name": "return_type",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_method_argument_type_specifier"
},
{
"type": "BLANK"
}
]
}
},
{
"type": "FIELD",
"name": "selector",
"content": {
"type": "SYMBOL",
"name": "_method_selector"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "attribute_specifier"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": ";"
},
{
"type": "BLANK"
}
]
},
{
"type": "FIELD",
"name": "body",
"content": {
"type": "SYMBOL",
"name": "compound_statement"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": ";"
},
{
"type": "BLANK"
}
]
}
]
},
"_method_selector": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_unary_selector"
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "keyword_selector"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "STRING",
"value": "..."
}
]
},
{
"type": "BLANK"
}
]
}
]
}
]
},
"_unary_selector": {
"type": "SYMBOL",
"name": "identifier"
},
"keyword_selector": {
"type": "REPEAT1",
"content": {
"type": "SYMBOL",
"name": "keyword_declarator"
}
},
"keyword_declarator": {
"type": "PREC_RIGHT",
"value": 0,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "keyword",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "BLANK"
}
]
}
},
{
"type": "STRING",
"value": ":"
},
{
"type": "FIELD",
"name": "type",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_method_argument_type_specifier"
},
{
"type": "BLANK"
}
]
}
},
{
"type": "SYMBOL",
"name": "_name"
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "__unused"
},
{
"type": "BLANK"
}
]
}
]
}
},
"_method_argument_type_specifier": {
"type": "PREC",
"value": 1,
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "("
},
{
"type": "SYMBOL",
"name": "_argument_type_declarator"
},
{
"type": "STRING",
"value": ")"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "attribute_specifier"
},
{
"type": "BLANK"
}
]
}
]
}
},
"_argument_type_declarator": {
"type": "PREC",
"value": 10,
"content": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "nullable"
},
{
"type": "SYMBOL",
"name": "nonnull"
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "NS_NOESCAPE"
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "_declaration_specifiers"
},
{
"type": "CHOICE",
"members": [
{
"type": "FIELD",
"name": "declarator",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_declarator"
},
{
"type": "SYMBOL",
"name": "_abstract_declarator"
}
]
}
},
{
"type": "BLANK"
}
]
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "attribute_specifier"
}
}
]
}
},
"ns_enum_specifier": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "NS_ENUM"
},
{
"type": "STRING",
"value": "NS_ERROR_ENUM"
},
{
"type": "STRING",
"value": "NS_OPTIONS"
}
]
},
{
"type": "STRING",
"value": "("
},
{
"type": "FIELD",
"name": "type",
"content": {
"type": "SYMBOL",
"name": "_type_specifier"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "_type_identifier"
}
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": ")"
},
{
"type": "FIELD",
"name": "body",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "enumerator_list"
},
{
"type": "BLANK"
}
]
}
}
]
},
"typeof_specifier": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "operator",
"content": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "typeof"
},
{
"type": "STRING",
"value": "__typeof"
},
{
"type": "STRING",
"value": "__typeof__"
}
]
}
},
{
"type": "STRING",
"value": "("
},
{
"type": "FIELD",
"name": "type",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
},
{
"type": "STRING",
"value": ")"
}
]
},
"atomic_specifier": {
"type": "PREC",
"value": -1,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "operator",
"content": {
"type": "STRING",
"value": "_Atomic"
}
},
{
"type": "STRING",
"value": "("
},
{
"type": "FIELD",
"name": "type",
"content": {
"type": "SYMBOL",
"name": "type_descriptor"
}
},
{
"type": "STRING",
"value": ")"
}
]
}
},
"generic_type_specifier": {
"type": "PREC_DYNAMIC",
"value": 1,
"content": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "class_name",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_type_identifier"
},
{
"type": "SYMBOL",
"name": "id"
},
{
"type": "SYMBOL",
"name": "Class"
}
]
}
},
{
"type": "FIELD",
"name": "type_reference",
"content": {
"type": "REPEAT1",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "protocol_qualifiers"
},
{
"type": "SYMBOL",
"name": "generic_type_references"
}
]
}
}
}
]
}
]
}
},
"generic_type_references": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "<"
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "type_descriptor"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "type_descriptor"
}
]
}
}
]
},
{
"type": "STRING",
"value": ">"
}
]
},
"block_abstract_declarator": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "("
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "NS_NOESCAPE"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "type_qualifier"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "^"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "type_qualifier"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": ")"
},
{
"type": "FIELD",
"name": "parameters",
"content": {
"type": "SYMBOL",
"name": "parameter_list"
}
}
]
},
"block_declarator": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "("
},
{
"type": "STRING",
"value": "^"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "type_qualifier"
}
},
{
"type": "FIELD",
"name": "declarator",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "type_qualifier"
}
}
]
},
{
"type": "FIELD",
"name": "return_type",
"content": {
"type": "SYMBOL",
"name": "block_declarator"
}
}
]
},
{
"type": "STRING",
"value": ")"
},
{
"type": "FIELD",
"name": "parameters",
"content": {
"type": "SYMBOL",
"name": "parameter_list"
}
}
]
},
"block_expression": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "^"
},
{
"type": "FIELD",
"name": "declarator",
"content": {
"type": "CHOICE",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "type_descriptor"
},
{
"type": "SYMBOL",
"name": "type_qualifier"
}
]
},
{
"type": "BLANK"
}
]
}
},
{
"type": "FIELD",
"name": "parameters",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "parameter_list"
},
{
"type": "BLANK"
}
]
}
},
{
"type": "SYMBOL",
"name": "compound_statement"
}
]
},
"self": {
"type": "STRING",
"value": "self"
},
"super": {
"type": "STRING",
"value": "super"
},
"nil": {
"type": "STRING",
"value": "nil"
},
"id": {
"type": "STRING",
"value": "id"
},
"instancetype": {
"type": "STRING",
"value": "instancetype"
},
"Class": {
"type": "STRING",
"value": "Class"
},
"Method": {
"type": "STRING",
"value": "Method"
},
"SEL": {
"type": "STRING",
"value": "SEL"
},
"IMP": {
"type": "STRING",
"value": "IMP"
},
"BOOL": {
"type": "STRING",
"value": "BOOL"
},
"auto": {
"type": "STRING",
"value": "__auto_type"
},
"autoreleasepool_statement": {
"type": "PREC_RIGHT",
"value": 0,
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "@autoreleasepool"
},
{
"type": "FIELD",
"name": "consequence",
"content": {
"type": "SYMBOL",
"name": "_statement"
}
}
]
}
},
"synchronized_statement": {
"type": "PREC_RIGHT",
"value": 0,
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "@synchronized"
},
{
"type": "FIELD",
"name": "condition",
"content": {
"type": "SYMBOL",
"name": "parenthesized_expression"
}
},
{
"type": "FIELD",
"name": "consequence",
"content": {
"type": "SYMBOL",
"name": "_statement"
}
}
]
}
},
"for_in_statement": {
"type": "PREC_DYNAMIC",
"value": 1,
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "for"
},
{
"type": "STRING",
"value": "("
},
{
"type": "FIELD",
"name": "initializer",
"content": {
"type": "SYMBOL",
"name": "_argument_type_declarator"
}
},
{
"type": "STRING",
"value": "in"
},
{
"type": "FIELD",
"name": "loop",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
},
{
"type": "STRING",
"value": ")"
},
{
"type": "SYMBOL",
"name": "_statement"
}
]
}
},
"try_catch_statement": {
"type": "PREC_RIGHT",
"value": 0,
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "@try"
},
{
"type": "FIELD",
"name": "body",
"content": {
"type": "SYMBOL",
"name": "_statement"
}
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "@catch"
},
{
"type": "FIELD",
"name": "declaration",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "("
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "parameter_declaration"
},
{
"type": "STRING",
"value": "..."
}
]
},
{
"type": "STRING",
"value": ")"
}
]
}
},
{
"type": "FIELD",
"name": "catch",
"content": {
"type": "SYMBOL",
"name": "_statement"
}
}
]
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "@finally"
},
{
"type": "FIELD",
"name": "finally",
"content": {
"type": "SYMBOL",
"name": "_statement"
}
}
]
},
{
"type": "BLANK"
}
]
}
]
}
},
"throw_statement": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "@throw"
},
{
"type": "CHOICE",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_expression"
},
{
"type": "SYMBOL",
"name": "comma_expression"
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": ";"
}
]
},
"message_expression": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "["
},
{
"type": "FIELD",
"name": "receiver",
"content": {
"type": "SYMBOL",
"name": "_receiver"
}
},
{
"type": "FIELD",
"name": "selector",
"content": {
"type": "SYMBOL",
"name": "_message_selector"
}
},
{
"type": "STRING",
"value": "]"
}
]
},
"_receiver": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_type_specifier"
},
{
"type": "SYMBOL",
"name": "_expression"
}
]
},
"_message_selector": {
"type": "CHOICE",
"members": [
{
"type": "FIELD",
"name": "selector",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "SYMBOL",
"name": "keyword_argument_list"
}
]
},
"keyword_argument_list": {
"type": "REPEAT1",
"content": {
"type": "SYMBOL",
"name": "keyword_argument"
}
},
"keyword_argument": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "keyword",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "BLANK"
}
]
}
},
{
"type": "STRING",
"value": ":"
},
{
"type": "FIELD",
"name": "argument",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_expression"
},
{
"type": "SYMBOL",
"name": "_variadic_arguments"
}
]
}
}
]
},
"_variadic_arguments": {
"type": "PREC",
"value": 1,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_expression"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "_expression"
}
]
}
}
]
}
},
"selector_expression": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "@selector"
},
{
"type": "STRING",
"value": "("
},
{
"type": "SYMBOL",
"name": "_selector_name"
},
{
"type": "STRING",
"value": ")"
}
]
},
"_selector_name": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_name"
},
{
"type": "REPEAT1",
"content": {
"type": "SYMBOL",
"name": "_keyword_name"
}
}
]
},
"_keyword_name": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_name"
},
{
"type": "STRING",
"value": ":"
}
]
},
{
"type": "STRING",
"value": ":"
}
]
},
"protocol_expression": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "@protocol"
},
{
"type": "STRING",
"value": "("
},
{
"type": "SYMBOL",
"name": "_name"
},
{
"type": "STRING",
"value": ")"
}
]
},
"encode_expression": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "@encode"
},
{
"type": "STRING",
"value": "("
},
{
"type": "SYMBOL",
"name": "type_descriptor"
},
{
"type": "STRING",
"value": ")"
}
]
},
"number_expression": {
"type": "PREC",
"value": 1,
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "@"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "("
},
{
"type": "CHOICE",
"members": [
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "number_literal"
},
"named": false,
"value": "number_literal"
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "'"
},
{
"type": "PATTERN",
"value": "[A-Za-z0-9]"
},
{
"type": "STRING",
"value": "'"
}
]
}
]
},
{
"type": "STRING",
"value": ")"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "number_literal"
},
"named": false,
"value": "number_literal"
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "'"
},
{
"type": "PATTERN",
"value": "[A-Za-z0-9]"
},
{
"type": "STRING",
"value": "'"
}
]
}
]
}
]
}
]
}
]
}
},
"string_expression": {
"type": "SEQ",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "@"
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "string_literal"
},
"named": false,
"value": "string_literal"
}
]
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "@"
},
{
"type": "BLANK"
}
]
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "string_literal"
},
"named": false,
"value": "string_literal"
}
]
}
}
]
},
"object_expression": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "@"
},
{
"type": "STRING",
"value": "("
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_expression"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": ")"
}
]
},
"dictionary_expression": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "@"
},
{
"type": "STRING",
"value": "{"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_dictionary_key_value_list"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "}"
}
]
},
"_dictionary_key_value_list": {
"type": "SEQ",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_dictionary_key_value_pair"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "_dictionary_key_value_pair"
}
]
}
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "BLANK"
}
]
}
]
},
"_dictionary_key_value_pair": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "key",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
},
{
"type": "STRING",
"value": ":"
},
{
"type": "FIELD",
"name": "value",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
}
]
},
"array_expression": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "@"
},
{
"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": "CHOICE",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "]"
}
]
},
"YES": {
"type": "STRING",
"value": "YES"
},
"NO": {
"type": "STRING",
"value": "NO"
},
"boolean_expression": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "@"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "YES"
},
{
"type": "SYMBOL",
"name": "NO"
},
{
"type": "STRING",
"value": "__objc_no"
},
{
"type": "STRING",
"value": "__objc_yes"
}
]
}
]
},
"available_expression": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "__builtin_available"
},
{
"type": "STRING",
"value": "@available"
}
]
},
{
"type": "STRING",
"value": "("
},
{
"type": "SEQ",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "platform",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "FIELD",
"name": "version",
"content": {
"type": "PATTERN",
"value": "[0-9]+(\\.[0-9]+)*"
}
}
]
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "platform",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "FIELD",
"name": "version",
"content": {
"type": "PATTERN",
"value": "[0-9]+(\\.[0-9]+)*"
}
}
]
}
]
}
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "STRING",
"value": "*"
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": ")"
}
]
},
"statement_expression": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "("
},
{
"type": "FIELD",
"name": "body",
"content": {
"type": "SYMBOL",
"name": "_statement"
}
},
{
"type": "STRING",
"value": ")"
}
]
},
"va_arg_expression": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "va_arg"
},
{
"type": "STRING",
"value": "("
},
{
"type": "FIELD",
"name": "va_list",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
},
{
"type": "STRING",
"value": ","
},
{
"type": "FIELD",
"name": "type",
"content": {
"type": "SYMBOL",
"name": "type_descriptor"
}
},
{
"type": "STRING",
"value": ")"
}
]
},
"preproc_has_include": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "__has_include"
},
{
"type": "STRING",
"value": "("
},
{
"type": "FIELD",
"name": "path",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "string_literal"
},
{
"type": "SYMBOL",
"name": "system_lib_string"
},
{
"type": "SYMBOL",
"name": "module_string"
}
]
}
},
{
"type": "STRING",
"value": ")"
}
]
},
"pragma": {
"type": "TOKEN",
"content": {
"type": "PATTERN",
"value": "#[ \\t]*(pragma|warning|error)[^\\r\\n]*\\r?\\n"
}
},
"_ifdef_if_retain": {
"type": "TOKEN",
"content": {
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "#if[^\\r\\n]*\\r?\\n"
},
{
"type": "SEQ",
"members": [
{
"type": "PATTERN",
"value": "#if[^\\r\\\\\\n]*\\\\\\r?\\n"
},
{
"type": "REPEAT",
"content": {
"type": "PATTERN",
"value": "[^\\r\\\\\\n]*\\\\\\r?\\n"
}
},
{
"type": "PATTERN",
"value": "[^#\\\\\\n]+\\r?\\n"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "PATTERN",
"value": "#if[^\\r\\n]*\\r?\\n"
},
{
"type": "PATTERN",
"value": "#else[ \\t]*\\r?\\n"
}
]
}
]
}
},
"_ifdef_elif_ignore": {
"type": "TOKEN",
"content": {
"type": "SEQ",
"members": [
{
"type": "PATTERN",
"value": "#elif[^\\r\\n]*\\r?\\n"
},
{
"type": "REPEAT",
"content": {
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "([ \\t]*[^#][^#]*)?\\r?\\n"
},
{
"type": "PATTERN",
"value": "[ \\t]*#[ \\t]*(elif|else|import|include|pragma|define|undef|line|warning|error).*\\r?\\n"
}
]
}
},
{
"type": "PATTERN",
"value": "[ \\t]*#endif"
}
]
}
},
"_ifdef_else_ignore": {
"type": "TOKEN",
"content": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "#else"
},
{
"type": "SEQ",
"members": [
{
"type": "PATTERN",
"value": "#else[ \\t]*\\r?\\n"
},
{
"type": "REPEAT",
"content": {
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "([ \\t]*[^#][^#]*)?\\r?\\n"
},
{
"type": "PATTERN",
"value": "[ \\t]*#[ \\t]*(import|include|pragma|define|undef|line|warning|error).*\\r?\\n"
}
]
}
},
{
"type": "PATTERN",
"value": "[ \\t]*#endif"
}
]
}
]
}
},
"_ifdef_endif_retain": {
"type": "TOKEN",
"content": {
"type": "PATTERN",
"value": "#endif[^\\r\\n]*\\r?\\n?"
}
},
"_ifdef_undef_retain": {
"type": "TOKEN",
"content": {
"type": "PATTERN",
"value": "#undef[^\\r\\n]*\\r?\\n?"
}
}
},
"extras": [
{
"type": "PATTERN",
"value": "\\u00A0|\\s|\\\\\\r?\\n"
},
{
"type": "SYMBOL",
"name": "comment"
},
{
"type": "SYMBOL",
"name": "pragma"
},
{
"type": "SYMBOL",
"name": "_ifdef_if_retain"
},
{
"type": "SYMBOL",
"name": "_ifdef_elif_ignore"
},
{
"type": "SYMBOL",
"name": "_ifdef_else_ignore"
},
{
"type": "SYMBOL",
"name": "_ifdef_endif_retain"
},
{
"type": "SYMBOL",
"name": "_ifdef_undef_retain"
}
],
"conflicts": [
[
"_type_specifier",
"_declarator"
],
[
"_type_specifier",
"_declarator",
"macro_type_specifier"
],
[
"_type_specifier",
"_expression"
],
[
"_type_specifier",
"_expression",
"macro_type_specifier"
],
[
"_type_specifier",
"macro_type_specifier"
],
[
"sized_type_specifier"
],
[
"struct_specifier"
],
[
"union_specifier"
],
[
"enum_specifier"
],
[
"ns_enum_specifier"
],
[
"function_declarator"
],
[
"type_descriptor"
],
[
"type_definition"
],
[
"superclass_reference"
],
[
"_expression",
"macro_type_specifier"
],
[
"_expression",
"generic_type_specifier"
],
[
"_declaration_specifiers"
],
[
"_declaration_specifiers",
"class_interface"
],
[
"_protocol_identifier",
"_type_specifier"
],
[
"_protocol_identifier",
"_parameterized_class_type_arguments"
],
[
"declaration",
"_argument_type_declarator"
]
],
"precedences": [],
"externals": [],
"inline": [
"_statement",
"_top_level_item",
"_type_identifier",
"_field_identifier",
"_statement_identifier",
"_non_case_statement",
"_assignment_left_expression"
],
"supertypes": [
"_expression",
"_statement",
"_declarator",
"_abstract_declarator",
"_field_declarator",
"_type_declarator"
]
}