Start fresh with foreach

This commit is contained in:
Uy Ha 2021-06-06 15:44:05 +02:00
parent bdc2d6e321
commit 265b10cf72
5 changed files with 1841 additions and 5586 deletions

View file

@ -41,52 +41,13 @@ module.exports = grammar({
foreach_loop: ($) =>
seq(
repeat($.space),
"foreach",
repeat($.seperation),
"(",
repeat($.seperation),
choice($.foreach_range, $.foreach_lists_items, $.foreach_iter),
")",
repeat($.command_invocation),
/foreach/i,
repeat($.space),
"endforeach",
repeat($.seperation),
"(",
optional($.variable),
repeat($.seperation),
optional($.arguments),
")"
),
foreach_range: ($) => choice($.foreach_range_stop, $.foreach_range_full),
foreach_range_stop: ($) =>
seq(
field("loop_var", $.variable),
repeat1($.seperation),
seq("RANGE", optional($.seperation)),
optional(field("stop", $.integer))
),
foreach_range_full: ($) =>
seq(
field("loop_var", $.variable),
repeat1($.seperation),
/RANGE[ \t\n]+/,
field("start", $.integer),
field("stop", $.integer),
optional(seq(repeat1($.seperation), field("step", $.integer)))
),
foreach_lists_items: ($) =>
seq(
field("loop_var", $.variable),
"IN",
repeat(seq(repeat1($.seperation), choice($.foreach_lists)))
),
foreach_lists: ($) =>
prec.left(seq("LISTS", optional(seq(repeat1($.seperation), $.variable)))),
// foreach_items: ($) => prec.left(seq("ITEMS", repeat(seq(repeat1($.seperation), $.argument)))),
foreach_iter: ($) =>
seq(field("loop_var", $.variable), optional(seq(repeat1($.seperation), $.arguments))),
normal_command: ($) =>
seq(
repeat($.space),

View file

@ -393,55 +393,9 @@
}
},
{
"type": "STRING",
"type": "PATTERN",
"value": "foreach"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "seperation"
}
},
{
"type": "STRING",
"value": "("
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "seperation"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "foreach_range"
},
{
"type": "SYMBOL",
"name": "foreach_lists_items"
},
{
"type": "SYMBOL",
"name": "foreach_iter"
}
]
},
{
"type": "STRING",
"value": ")"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "command_invocation"
}
},
{
"type": "REPEAT",
"content": {
@ -451,7 +405,7 @@
},
{
"type": "STRING",
"value": "endforeach"
"value": "("
},
{
"type": "REPEAT",
@ -460,16 +414,12 @@
"name": "seperation"
}
},
{
"type": "STRING",
"value": "("
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "variable"
"name": "arguments"
},
{
"type": "BLANK"
@ -482,259 +432,6 @@
}
]
},
"foreach_range": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "foreach_range_stop"
},
{
"type": "SYMBOL",
"name": "foreach_range_full"
}
]
},
"foreach_range_stop": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "loop_var",
"content": {
"type": "SYMBOL",
"name": "variable"
}
},
{
"type": "REPEAT1",
"content": {
"type": "SYMBOL",
"name": "seperation"
}
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "RANGE"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "seperation"
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "FIELD",
"name": "stop",
"content": {
"type": "SYMBOL",
"name": "integer"
}
},
{
"type": "BLANK"
}
]
}
]
},
"foreach_range_full": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "loop_var",
"content": {
"type": "SYMBOL",
"name": "variable"
}
},
{
"type": "REPEAT1",
"content": {
"type": "SYMBOL",
"name": "seperation"
}
},
{
"type": "PATTERN",
"value": "RANGE[ \\t\\n]+"
},
{
"type": "FIELD",
"name": "start",
"content": {
"type": "SYMBOL",
"name": "integer"
}
},
{
"type": "FIELD",
"name": "stop",
"content": {
"type": "SYMBOL",
"name": "integer"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "REPEAT1",
"content": {
"type": "SYMBOL",
"name": "seperation"
}
},
{
"type": "FIELD",
"name": "step",
"content": {
"type": "SYMBOL",
"name": "integer"
}
}
]
},
{
"type": "BLANK"
}
]
}
]
},
"foreach_lists_items": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "loop_var",
"content": {
"type": "SYMBOL",
"name": "variable"
}
},
{
"type": "STRING",
"value": "IN"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "REPEAT1",
"content": {
"type": "SYMBOL",
"name": "seperation"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "foreach_lists"
}
]
}
]
}
}
]
},
"foreach_lists": {
"type": "PREC_LEFT",
"value": 0,
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "LISTS"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "REPEAT1",
"content": {
"type": "SYMBOL",
"name": "seperation"
}
},
{
"type": "SYMBOL",
"name": "variable"
}
]
},
{
"type": "BLANK"
}
]
}
]
}
},
"foreach_iter": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "loop_var",
"content": {
"type": "SYMBOL",
"name": "variable"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "REPEAT1",
"content": {
"type": "SYMBOL",
"name": "seperation"
}
},
{
"type": "SYMBOL",
"name": "arguments"
}
]
},
{
"type": "BLANK"
}
]
}
]
},
"normal_command": {
"type": "SEQ",
"members": [

View file

@ -116,20 +116,9 @@
"fields": {}
},
{
"type": "foreach_iter",
"type": "foreach_loop",
"named": true,
"fields": {
"loop_var": {
"multiple": false,
"required": true,
"types": [
{
"type": "variable",
"named": true
}
]
}
},
"fields": {},
"children": {
"multiple": true,
"required": false,
@ -138,86 +127,6 @@
"type": "arguments",
"named": true
},
{
"type": "seperation",
"named": true
}
]
}
},
{
"type": "foreach_lists",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": false,
"types": [
{
"type": "seperation",
"named": true
},
{
"type": "variable",
"named": true
}
]
}
},
{
"type": "foreach_lists_items",
"named": true,
"fields": {
"loop_var": {
"multiple": false,
"required": true,
"types": [
{
"type": "variable",
"named": true
}
]
}
},
"children": {
"multiple": true,
"required": false,
"types": [
{
"type": "foreach_lists",
"named": true
},
{
"type": "seperation",
"named": true
}
]
}
},
{
"type": "foreach_loop",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "command_invocation",
"named": true
},
{
"type": "foreach_iter",
"named": true
},
{
"type": "foreach_lists_items",
"named": true
},
{
"type": "foreach_range",
"named": true
},
{
"type": "seperation",
"named": true
@ -225,121 +134,6 @@
{
"type": "space",
"named": true
},
{
"type": "variable",
"named": true
}
]
}
},
{
"type": "foreach_range",
"named": true,
"fields": {},
"children": {
"multiple": false,
"required": true,
"types": [
{
"type": "foreach_range_full",
"named": true
},
{
"type": "foreach_range_stop",
"named": true
}
]
}
},
{
"type": "foreach_range_full",
"named": true,
"fields": {
"loop_var": {
"multiple": false,
"required": true,
"types": [
{
"type": "variable",
"named": true
}
]
},
"start": {
"multiple": false,
"required": true,
"types": [
{
"type": "integer",
"named": true
}
]
},
"step": {
"multiple": false,
"required": false,
"types": [
{
"type": "integer",
"named": true
}
]
},
"stop": {
"multiple": false,
"required": true,
"types": [
{
"type": "integer",
"named": true
}
]
}
},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "seperation",
"named": true
}
]
}
},
{
"type": "foreach_range_stop",
"named": true,
"fields": {
"loop_var": {
"multiple": false,
"required": true,
"types": [
{
"type": "variable",
"named": true
}
]
},
"stop": {
"multiple": false,
"required": false,
"types": [
{
"type": "integer",
"named": true
}
]
}
},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "seperation",
"named": true
}
]
}
@ -558,18 +352,6 @@
"type": "=",
"named": false
},
{
"type": "IN",
"named": false
},
{
"type": "LISTS",
"named": false
},
{
"type": "RANGE",
"named": false
},
{
"type": "[",
"named": false
@ -594,22 +376,10 @@
"type": "]",
"named": false
},
{
"type": "endforeach",
"named": false
},
{
"type": "foreach",
"named": false
},
{
"type": "identifier",
"named": true
},
{
"type": "integer",
"named": true
},
{
"type": "newline",
"named": true

File diff suppressed because it is too large Load diff