Add a way to automatically inline rules

This commit is contained in:
Max Brunsfeld 2017-07-11 21:17:27 -07:00
parent 26a25278cd
commit 65bf1389e1
15 changed files with 219 additions and 14 deletions

View file

@ -0,0 +1,11 @@
==================================
Expressions
==================================
1 + 2 * 3;
---
(statement (sum
(number)
(product (number) (number))))

View file

@ -0,0 +1,68 @@
{
"name": "inline_rules",
"extras": [
{"type": "PATTERN", "value": "\\s"}
],
"inline": [
"expression"
],
"rules": {
"statement": {
"type": "SEQ",
"members": [
{"type": "SYMBOL", "name": "expression"},
{"type": "STRING", "value": ";"}
]
},
"expression": {
"type": "CHOICE",
"members": [
{"type": "SYMBOL", "name": "sum"},
{"type": "SYMBOL", "name": "product"},
{"type": "SYMBOL", "name": "number"},
{"type": "SYMBOL", "name": "parenthesized_expression"}
]
},
"parenthesized_expression": {
"type": "SEQ",
"members": [
{"type": "STRING", "value": "("},
{"type": "SYMBOL", "name": "expression"},
{"type": "STRING", "value": ")"}
]
},
"sum": {
"type": "PREC_LEFT",
"value": 0,
"content": {
"type": "SEQ",
"members": [
{"type": "SYMBOL", "name": "expression"},
{"type": "STRING", "value": "+"},
{"type": "SYMBOL", "name": "expression"}
]
}
},
"product": {
"type": "PREC_LEFT",
"value": 2,
"content": {
"type": "SEQ",
"members": [
{"type": "SYMBOL", "name": "expression"},
{"type": "STRING", "value": "*"},
{"type": "SYMBOL", "name": "expression"}
]
}
},
"number": {"type": "PATTERN", "value": "\\d+"}
}
}