159 lines
3.6 KiB
JSON
159 lines
3.6 KiB
JSON
{
|
|
"name": "named_precedences",
|
|
|
|
"extras": [
|
|
{
|
|
"type": "PATTERN",
|
|
"value": "\\s+"
|
|
}
|
|
],
|
|
|
|
"precedences": [
|
|
[
|
|
{"type": "SYMBOL", "name": "member_expression"},
|
|
{"type": "STRING", "value": "and"},
|
|
{"type": "STRING", "value": "or"}
|
|
],
|
|
[
|
|
{"type": "SYMBOL", "name": "nested_type"},
|
|
{"type": "STRING", "value": "type_intersection"},
|
|
{"type": "STRING", "value": "type_union"}
|
|
]
|
|
],
|
|
|
|
"conflicts": [
|
|
["expression", "type"],
|
|
["expression", "nested_type"]
|
|
],
|
|
|
|
"rules": {
|
|
"program": {
|
|
"type": "REPEAT",
|
|
"content": {
|
|
"type": "CHOICE",
|
|
"members": [
|
|
{"type": "SYMBOL", "name": "expression_statement"},
|
|
{"type": "SYMBOL", "name": "declaration_statement"}
|
|
]
|
|
}
|
|
},
|
|
|
|
"expression_statement": {
|
|
"type": "SEQ",
|
|
"members": [
|
|
{"type": "SYMBOL", "name": "expression"},
|
|
{"type": "STRING", "value": ";"}
|
|
]
|
|
},
|
|
|
|
"declaration_statement": {
|
|
"type": "SEQ",
|
|
"members": [
|
|
{"type": "SYMBOL", "name": "type"},
|
|
{"type": "SYMBOL", "name": "expression"},
|
|
{"type": "STRING", "value": ";"}
|
|
]
|
|
},
|
|
|
|
"expression": {
|
|
"type": "CHOICE",
|
|
"members": [
|
|
{"type": "SYMBOL", "name": "member_expression"},
|
|
{"type": "SYMBOL", "name": "binary_expression"},
|
|
{"type": "SYMBOL", "name": "identifier"}
|
|
]
|
|
},
|
|
|
|
"member_expression": {
|
|
"type": "SEQ",
|
|
"members": [
|
|
{"type": "SYMBOL", "name": "expression"},
|
|
{"type": "STRING", "value": "."},
|
|
{"type": "SYMBOL", "name": "identifier"}
|
|
]
|
|
},
|
|
|
|
"binary_expression": {
|
|
"type": "CHOICE",
|
|
"members": [
|
|
{
|
|
"type": "PREC_LEFT",
|
|
"value": "or",
|
|
"content": {
|
|
"type": "SEQ",
|
|
"members": [
|
|
{"type": "SYMBOL", "name": "expression"},
|
|
{"type": "STRING", "value": "||"},
|
|
{"type": "SYMBOL", "name": "expression"}
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"type": "PREC_LEFT",
|
|
"value": "and",
|
|
"content": {
|
|
"type": "SEQ",
|
|
"members": [
|
|
{"type": "SYMBOL", "name": "expression"},
|
|
{"type": "STRING", "value": "&&"},
|
|
{"type": "SYMBOL", "name": "expression"}
|
|
]
|
|
}
|
|
}
|
|
]
|
|
},
|
|
|
|
"type": {
|
|
"type": "CHOICE",
|
|
"members": [
|
|
{"type": "SYMBOL", "name": "nested_type"},
|
|
{"type": "SYMBOL", "name": "binary_type"},
|
|
{"type": "SYMBOL", "name": "identifier"}
|
|
]
|
|
},
|
|
|
|
"nested_type": {
|
|
"type": "SEQ",
|
|
"members": [
|
|
{"type": "SYMBOL", "name": "identifier"},
|
|
{"type": "STRING", "value": "."},
|
|
{"type": "SYMBOL", "name": "identifier"}
|
|
]
|
|
},
|
|
|
|
"binary_type": {
|
|
"type": "CHOICE",
|
|
"members": [
|
|
{
|
|
"type": "PREC_LEFT",
|
|
"value": "type_union",
|
|
"content": {
|
|
"type": "SEQ",
|
|
"members": [
|
|
{"type": "SYMBOL", "name": "type"},
|
|
{"type": "STRING", "value": "||"},
|
|
{"type": "SYMBOL", "name": "type"}
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"type": "PREC_LEFT",
|
|
"value": "type_intersection",
|
|
"content": {
|
|
"type": "SEQ",
|
|
"members": [
|
|
{"type": "SYMBOL", "name": "type"},
|
|
{"type": "STRING", "value": "&&"},
|
|
{"type": "SYMBOL", "name": "type"}
|
|
]
|
|
}
|
|
}
|
|
]
|
|
},
|
|
|
|
"identifier": {
|
|
"type": "PATTERN",
|
|
"value": "[a-z]\\w+"
|
|
}
|
|
}
|
|
}
|