Start fresh with foreach
This commit is contained in:
parent
bdc2d6e321
commit
265b10cf72
45
grammar.js
45
grammar.js
|
@ -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),
|
||||
|
|
309
src/grammar.json
309
src/grammar.json
|
@ -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": [
|
||||
|
|
|
@ -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
|
||||
|
|
6839
src/parser.c
6839
src/parser.c
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue