{ "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": "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": "CHOICE", "members": [ { "type": "FIELD", "name": "declarator", "content": { "type": "SYMBOL", "name": "_type_declarator" } }, { "type": "BLANK" } ] }, { "type": "CHOICE", "members": [ { "type": "CHOICE", "members": [ { "type": "FIELD", "name": "attributes", "content": { "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": "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": "CHOICE", "members": [ { "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" } } ] } ] }, { "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" } ] } } ] } ] }, "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": "CHOICE", "members": [ { "type": "FIELD", "name": "category", "content": { "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" } } ] } }, "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": "CHOICE", "members": [ { "type": "FIELD", "name": "keyword", "content": { "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" ], [ "function_declarator" ], [ "type_descriptor" ], [ "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": [ "_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" ] }