{ "name": "tiger", "word": "identifier", "rules": { "source_file": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "_expr" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "_declaration_chunks" }, { "type": "BLANK" } ] } ] }, "_expr": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "nil_literal" }, { "type": "SYMBOL", "name": "integer_literal" }, { "type": "SYMBOL", "name": "string_literal" }, { "type": "SYMBOL", "name": "array_expression" }, { "type": "SYMBOL", "name": "record_expression" }, { "type": "SYMBOL", "name": "_lvalue" }, { "type": "SYMBOL", "name": "function_call" }, { "type": "SYMBOL", "name": "unary_expression" }, { "type": "SYMBOL", "name": "binary_expression" }, { "type": "SYMBOL", "name": "sequence_expression" }, { "type": "SYMBOL", "name": "assignment_expression" }, { "type": "SYMBOL", "name": "if_expression" }, { "type": "SYMBOL", "name": "while_expression" }, { "type": "SYMBOL", "name": "for_expression" }, { "type": "SYMBOL", "name": "break_expression" }, { "type": "SYMBOL", "name": "let_expression" }, { "type": "SYMBOL", "name": "new_expression" }, { "type": "SYMBOL", "name": "method_call" }, { "type": "SYMBOL", "name": "meta_cast" }, { "type": "SYMBOL", "name": "meta_expression" } ] }, "nil_literal": { "type": "STRING", "value": "nil" }, "integer_literal": { "type": "PATTERN", "value": "[0-9]+" }, "string_literal": { "type": "SEQ", "members": [ { "type": "STRING", "value": "\"" }, { "type": "REPEAT", "content": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "escape_sequence" }, { "type": "PATTERN", "value": "[^\"\\\\]+" } ] } }, { "type": "STRING", "value": "\"" } ] }, "identifier": { "type": "PATTERN", "value": "[_a-zA-Z0-9]+" }, "_type_identifier": { "type": "CHOICE", "members": [ { "type": "ALIAS", "content": { "type": "SYMBOL", "name": "identifier" }, "named": true, "value": "type_identifier" }, { "type": "SYMBOL", "name": "meta_type_identifier" } ] }, "_field_identifier": { "type": "ALIAS", "content": { "type": "SYMBOL", "name": "identifier" }, "named": true, "value": "field_identifier" }, "escape_sequence": { "type": "IMMEDIATE_TOKEN", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "\\" }, { "type": "CHOICE", "members": [ { "type": "CHOICE", "members": [ { "type": "STRING", "value": "a" }, { "type": "STRING", "value": "b" }, { "type": "STRING", "value": "f" }, { "type": "STRING", "value": "n" }, { "type": "STRING", "value": "r" }, { "type": "STRING", "value": "t" }, { "type": "STRING", "value": "v" } ] }, { "type": "PATTERN", "value": "[0-3][0-7]{2}" }, { "type": "SEQ", "members": [ { "type": "STRING", "value": "x" }, { "type": "PATTERN", "value": "[0-9a-fA-F]{2}" } ] }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": "\\" }, { "type": "STRING", "value": "\"" } ] } ] } ] } }, "_lvalue": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "identifier" }, { "type": "SYMBOL", "name": "record_value" }, { "type": "SYMBOL", "name": "array_value" }, { "type": "SYMBOL", "name": "meta_lvalue" } ] }, "record_value": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "record", "content": { "type": "SYMBOL", "name": "_lvalue" } }, { "type": "STRING", "value": "." }, { "type": "FIELD", "name": "field", "content": { "type": "SYMBOL", "name": "_field_identifier" } } ] }, "array_value": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "array", "content": { "type": "SYMBOL", "name": "_lvalue" } }, { "type": "STRING", "value": "[" }, { "type": "FIELD", "name": "index", "content": { "type": "SYMBOL", "name": "_expr" } }, { "type": "STRING", "value": "]" } ] }, "function_call": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "function", "content": { "type": "SYMBOL", "name": "identifier" } }, { "type": "STRING", "value": "(" }, { "type": "FIELD", "name": "arguments", "content": { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_expr" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "_expr" } ] } } ] }, { "type": "BLANK" } ] } }, { "type": "STRING", "value": ")" } ] }, "unary_expression": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "operator", "content": { "type": "ALIAS", "content": { "type": "STRING", "value": "-" }, "named": true, "value": "operator" } }, { "type": "FIELD", "name": "expression", "content": { "type": "SYMBOL", "name": "_expr" } } ] }, "binary_expression": { "type": "CHOICE", "members": [ { "type": "PREC_LEFT", "value": 6, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "left", "content": { "type": "SYMBOL", "name": "_expr" } }, { "type": "FIELD", "name": "operator", "content": { "type": "ALIAS", "content": { "type": "CHOICE", "members": [ { "type": "STRING", "value": "*" }, { "type": "STRING", "value": "/" } ] }, "named": true, "value": "operator" } }, { "type": "FIELD", "name": "right", "content": { "type": "SYMBOL", "name": "_expr" } } ] } }, { "type": "PREC_LEFT", "value": 5, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "left", "content": { "type": "SYMBOL", "name": "_expr" } }, { "type": "FIELD", "name": "operator", "content": { "type": "ALIAS", "content": { "type": "CHOICE", "members": [ { "type": "STRING", "value": "+" }, { "type": "STRING", "value": "-" } ] }, "named": true, "value": "operator" } }, { "type": "FIELD", "name": "right", "content": { "type": "SYMBOL", "name": "_expr" } } ] } }, { "type": "PREC_LEFT", "value": 4, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "left", "content": { "type": "SYMBOL", "name": "_expr" } }, { "type": "FIELD", "name": "operator", "content": { "type": "ALIAS", "content": { "type": "CHOICE", "members": [ { "type": "STRING", "value": ">=" }, { "type": "STRING", "value": "<=" }, { "type": "STRING", "value": "=" }, { "type": "STRING", "value": "<>" }, { "type": "STRING", "value": "<" }, { "type": "STRING", "value": ">" } ] }, "named": true, "value": "operator" } }, { "type": "FIELD", "name": "right", "content": { "type": "SYMBOL", "name": "_expr" } } ] } }, { "type": "PREC_LEFT", "value": 3, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "left", "content": { "type": "SYMBOL", "name": "_expr" } }, { "type": "FIELD", "name": "operator", "content": { "type": "ALIAS", "content": { "type": "STRING", "value": "&" }, "named": true, "value": "operator" } }, { "type": "FIELD", "name": "right", "content": { "type": "SYMBOL", "name": "_expr" } } ] } }, { "type": "PREC_LEFT", "value": 2, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "left", "content": { "type": "SYMBOL", "name": "_expr" } }, { "type": "FIELD", "name": "operator", "content": { "type": "ALIAS", "content": { "type": "STRING", "value": "|" }, "named": true, "value": "operator" } }, { "type": "FIELD", "name": "right", "content": { "type": "SYMBOL", "name": "_expr" } } ] } } ] }, "sequence_expression": { "type": "SEQ", "members": [ { "type": "STRING", "value": "(" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_expr" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": ";" }, { "type": "SYMBOL", "name": "_expr" } ] } } ] }, { "type": "BLANK" } ] }, { "type": "STRING", "value": ")" } ] }, "array_expression": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "type", "content": { "type": "SYMBOL", "name": "_type_identifier" } }, { "type": "STRING", "value": "[" }, { "type": "FIELD", "name": "size", "content": { "type": "SYMBOL", "name": "_expr" } }, { "type": "STRING", "value": "]" }, { "type": "STRING", "value": "of" }, { "type": "FIELD", "name": "init", "content": { "type": "SYMBOL", "name": "_expr" } } ] }, "record_expression": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "type", "content": { "type": "SYMBOL", "name": "_type_identifier" } }, { "type": "STRING", "value": "{" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "SEQ", "members": [ { "type": "FIELD", "name": "field", "content": { "type": "SYMBOL", "name": "_field_identifier" } }, { "type": "STRING", "value": "=" }, { "type": "FIELD", "name": "init", "content": { "type": "SYMBOL", "name": "_expr" } } ] }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SEQ", "members": [ { "type": "FIELD", "name": "field", "content": { "type": "SYMBOL", "name": "_field_identifier" } }, { "type": "STRING", "value": "=" }, { "type": "FIELD", "name": "init", "content": { "type": "SYMBOL", "name": "_expr" } } ] } ] } } ] }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "}" } ] }, "assignment_expression": { "type": "PREC_RIGHT", "value": 1, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "left", "content": { "type": "SYMBOL", "name": "_lvalue" } }, { "type": "ALIAS", "content": { "type": "STRING", "value": ":=" }, "named": true, "value": "operator" }, { "type": "FIELD", "name": "right", "content": { "type": "SYMBOL", "name": "_expr" } } ] } }, "if_expression": { "type": "PREC_RIGHT", "value": 0, "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "if" }, { "type": "FIELD", "name": "condition", "content": { "type": "SYMBOL", "name": "_expr" } }, { "type": "STRING", "value": "then" }, { "type": "FIELD", "name": "consequence", "content": { "type": "SYMBOL", "name": "_expr" } }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": "else" }, { "type": "FIELD", "name": "alternative", "content": { "type": "SYMBOL", "name": "_expr" } } ] }, { "type": "BLANK" } ] } ] } }, "while_expression": { "type": "SEQ", "members": [ { "type": "STRING", "value": "while" }, { "type": "FIELD", "name": "condition", "content": { "type": "SYMBOL", "name": "_expr" } }, { "type": "STRING", "value": "do" }, { "type": "FIELD", "name": "body", "content": { "type": "SYMBOL", "name": "_expr" } } ] }, "for_expression": { "type": "SEQ", "members": [ { "type": "STRING", "value": "for" }, { "type": "FIELD", "name": "index", "content": { "type": "SYMBOL", "name": "identifier" } }, { "type": "ALIAS", "content": { "type": "STRING", "value": ":=" }, "named": true, "value": "operator" }, { "type": "FIELD", "name": "start", "content": { "type": "SYMBOL", "name": "_expr" } }, { "type": "STRING", "value": "to" }, { "type": "FIELD", "name": "end", "content": { "type": "SYMBOL", "name": "_expr" } }, { "type": "STRING", "value": "do" }, { "type": "FIELD", "name": "body", "content": { "type": "SYMBOL", "name": "_expr" } } ] }, "break_expression": { "type": "STRING", "value": "break" }, "let_expression": { "type": "SEQ", "members": [ { "type": "STRING", "value": "let" }, { "type": "FIELD", "name": "declarations", "content": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "_declaration_chunks" }, { "type": "BLANK" } ] } }, { "type": "STRING", "value": "in" }, { "type": "FIELD", "name": "body", "content": { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_expr" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": ";" }, { "type": "SYMBOL", "name": "_expr" } ] } } ] }, { "type": "BLANK" } ] } }, { "type": "STRING", "value": "end" } ] }, "_declaration_chunks": { "type": "REPEAT1", "content": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "meta_chunks" }, { "type": "SYMBOL", "name": "_declaration_chunk" } ] } }, "_declaration_chunk": { "type": "PREC_LEFT", "value": 0, "content": { "type": "CHOICE", "members": [ { "type": "REPEAT1", "content": { "type": "SYMBOL", "name": "type_declaration" } }, { "type": "REPEAT1", "content": { "type": "SYMBOL", "name": "class_declaration" } }, { "type": "REPEAT1", "content": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "function_declaration" }, { "type": "SYMBOL", "name": "primitive_declaration" } ] } }, { "type": "SYMBOL", "name": "variable_declaration" }, { "type": "SYMBOL", "name": "import_declaration" } ] } }, "type_declaration": { "type": "SEQ", "members": [ { "type": "STRING", "value": "type" }, { "type": "FIELD", "name": "name", "content": { "type": "SYMBOL", "name": "identifier" } }, { "type": "STRING", "value": "=" }, { "type": "FIELD", "name": "value", "content": { "type": "SYMBOL", "name": "_type" } } ] }, "_type": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "type_alias" }, { "type": "SYMBOL", "name": "record_type" }, { "type": "SYMBOL", "name": "array_type" }, { "type": "SYMBOL", "name": "class_type" } ] }, "type_alias": { "type": "SYMBOL", "name": "_type_identifier" }, "record_type": { "type": "SEQ", "members": [ { "type": "STRING", "value": "{" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "SEQ", "members": [ { "type": "FIELD", "name": "name", "content": { "type": "SYMBOL", "name": "_field_identifier" } }, { "type": "STRING", "value": ":" }, { "type": "FIELD", "name": "type", "content": { "type": "SYMBOL", "name": "_type_identifier" } } ] }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SEQ", "members": [ { "type": "FIELD", "name": "name", "content": { "type": "SYMBOL", "name": "_field_identifier" } }, { "type": "STRING", "value": ":" }, { "type": "FIELD", "name": "type", "content": { "type": "SYMBOL", "name": "_type_identifier" } } ] } ] } } ] }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "}" } ] }, "array_type": { "type": "SEQ", "members": [ { "type": "STRING", "value": "array" }, { "type": "STRING", "value": "of" }, { "type": "FIELD", "name": "element_type", "content": { "type": "SYMBOL", "name": "_type_identifier" } } ] }, "function_declaration": { "type": "SEQ", "members": [ { "type": "STRING", "value": "function" }, { "type": "SYMBOL", "name": "_function_declaration_common" }, { "type": "STRING", "value": "=" }, { "type": "FIELD", "name": "body", "content": { "type": "SYMBOL", "name": "_expr" } } ] }, "primitive_declaration": { "type": "SEQ", "members": [ { "type": "STRING", "value": "primitive" }, { "type": "SYMBOL", "name": "_function_declaration_common" } ] }, "_function_declaration_common": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "name", "content": { "type": "SYMBOL", "name": "identifier" } }, { "type": "FIELD", "name": "parameters", "content": { "type": "SYMBOL", "name": "parameters" } }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": ":" }, { "type": "FIELD", "name": "return_type", "content": { "type": "SYMBOL", "name": "_type_identifier" } } ] }, { "type": "BLANK" } ] } ] }, "parameters": { "type": "SEQ", "members": [ { "type": "STRING", "value": "(" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "SEQ", "members": [ { "type": "FIELD", "name": "name", "content": { "type": "SYMBOL", "name": "identifier" } }, { "type": "STRING", "value": ":" }, { "type": "FIELD", "name": "type", "content": { "type": "SYMBOL", "name": "_type_identifier" } } ] }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SEQ", "members": [ { "type": "FIELD", "name": "name", "content": { "type": "SYMBOL", "name": "identifier" } }, { "type": "STRING", "value": ":" }, { "type": "FIELD", "name": "type", "content": { "type": "SYMBOL", "name": "_type_identifier" } } ] } ] } } ] }, { "type": "BLANK" } ] }, { "type": "STRING", "value": ")" } ] }, "variable_declaration": { "type": "SEQ", "members": [ { "type": "STRING", "value": "var" }, { "type": "FIELD", "name": "name", "content": { "type": "SYMBOL", "name": "identifier" } }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": ":" }, { "type": "FIELD", "name": "type", "content": { "type": "SYMBOL", "name": "_type_identifier" } } ] }, { "type": "BLANK" } ] }, { "type": "ALIAS", "content": { "type": "STRING", "value": ":=" }, "named": true, "value": "operator" }, { "type": "FIELD", "name": "value", "content": { "type": "SYMBOL", "name": "_expr" } } ] }, "import_declaration": { "type": "SEQ", "members": [ { "type": "STRING", "value": "import" }, { "type": "FIELD", "name": "file", "content": { "type": "SYMBOL", "name": "string_literal" } } ] }, "new_expression": { "type": "SEQ", "members": [ { "type": "STRING", "value": "new" }, { "type": "FIELD", "name": "class", "content": { "type": "SYMBOL", "name": "_type_identifier" } } ] }, "method_call": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "object", "content": { "type": "SYMBOL", "name": "_lvalue" } }, { "type": "STRING", "value": "." }, { "type": "FIELD", "name": "method", "content": { "type": "SYMBOL", "name": "identifier" } }, { "type": "STRING", "value": "(" }, { "type": "FIELD", "name": "arguments", "content": { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_expr" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "_expr" } ] } } ] }, { "type": "BLANK" } ] } }, { "type": "STRING", "value": ")" } ] }, "class_declaration": { "type": "SEQ", "members": [ { "type": "STRING", "value": "class" }, { "type": "FIELD", "name": "name", "content": { "type": "SYMBOL", "name": "identifier" } }, { "type": "SYMBOL", "name": "_class_declaration_common" } ] }, "class_type": { "type": "SEQ", "members": [ { "type": "STRING", "value": "class" }, { "type": "SYMBOL", "name": "_class_declaration_common" } ] }, "_class_declaration_common": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "extends_qualifier" }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "{" }, { "type": "FIELD", "name": "fields", "content": { "type": "REPEAT", "content": { "type": "SYMBOL", "name": "_class_field" } } }, { "type": "STRING", "value": "}" } ] }, "extends_qualifier": { "type": "SEQ", "members": [ { "type": "STRING", "value": "extends" }, { "type": "FIELD", "name": "super", "content": { "type": "SYMBOL", "name": "_type_identifier" } } ] }, "_class_field": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "_field_declaration" }, { "type": "SYMBOL", "name": "method_declaration" } ] }, "_field_declaration": { "type": "ALIAS", "content": { "type": "SYMBOL", "name": "variable_declaration" }, "named": true, "value": "field_declaration" }, "method_declaration": { "type": "SEQ", "members": [ { "type": "STRING", "value": "method" }, { "type": "SYMBOL", "name": "_function_declaration_common" }, { "type": "STRING", "value": "=" }, { "type": "FIELD", "name": "body", "content": { "type": "SYMBOL", "name": "_expr" } } ] }, "meta_chunks": { "type": "SEQ", "members": [ { "type": "STRING", "value": "_chunks" }, { "type": "STRING", "value": "(" }, { "type": "FIELD", "name": "index", "content": { "type": "SYMBOL", "name": "integer_literal" } }, { "type": "STRING", "value": ")" } ] }, "meta_cast": { "type": "SEQ", "members": [ { "type": "STRING", "value": "_cast" }, { "type": "STRING", "value": "(" }, { "type": "FIELD", "name": "expression", "content": { "type": "SYMBOL", "name": "_expr" } }, { "type": "STRING", "value": "," }, { "type": "FIELD", "name": "type", "content": { "type": "SYMBOL", "name": "_type" } }, { "type": "STRING", "value": ")" } ] }, "meta_expression": { "type": "SEQ", "members": [ { "type": "STRING", "value": "_exp" }, { "type": "STRING", "value": "(" }, { "type": "FIELD", "name": "index", "content": { "type": "SYMBOL", "name": "integer_literal" } }, { "type": "STRING", "value": ")" } ] }, "meta_lvalue": { "type": "SEQ", "members": [ { "type": "STRING", "value": "_lvalue" }, { "type": "STRING", "value": "(" }, { "type": "FIELD", "name": "index", "content": { "type": "SYMBOL", "name": "integer_literal" } }, { "type": "STRING", "value": ")" } ] }, "meta_type_identifier": { "type": "SEQ", "members": [ { "type": "STRING", "value": "_namety" }, { "type": "STRING", "value": "(" }, { "type": "SYMBOL", "name": "integer_literal" }, { "type": "STRING", "value": ")" } ] } }, "extras": [ { "type": "PATTERN", "value": "( |\\n|\\r|\\t)+" }, { "type": "SYMBOL", "name": "comment" } ], "conflicts": [ [ "_lvalue", "array_expression" ], [ "_lvalue", "record_expression" ], [ "_lvalue", "_type_identifier" ] ], "precedences": [], "externals": [ { "type": "SYMBOL", "name": "comment" } ], "inline": [ "_type_identifier", "_field_identifier", "_function_declaration_common", "_class_declaration_common", "_class_field" ], "supertypes": [] }