Add if-then-else expressions
This commit is contained in:
parent
5004b7fc38
commit
170c3be571
@ -70,6 +70,23 @@ mult_args = my_fn(2, "test");
|
||||
(assignment_item (identifier) (call (identifier) (integer_literal)))
|
||||
(assignment_item (identifier) (call (identifier) (integer_literal) (string_literal))))
|
||||
|
||||
================
|
||||
If-Then-Else
|
||||
================
|
||||
|
||||
if_only = if b then i < j endif;
|
||||
value_select = if b then i else j endif;
|
||||
elseif = if b then i elseif c then j else k endif;
|
||||
elseif_no_else = if b then i < j elseif c then j > i endif;
|
||||
|
||||
---
|
||||
|
||||
(source_file
|
||||
(assignment_item (identifier) (if_then_else (identifier) (binary_operation (identifier) (identifier))))
|
||||
(assignment_item (identifier) (if_then_else (identifier) (identifier) (identifier)))
|
||||
(assignment_item (identifier) (if_then_else (identifier) (identifier) (identifier) (identifier) (identifier)))
|
||||
(assignment_item (identifier) (if_then_else (identifier) (binary_operation (identifier) (identifier)) (identifier) (binary_operation (identifier) (identifier)))))
|
||||
|
||||
================
|
||||
Index Expression
|
||||
================
|
||||
|
@ -45,6 +45,7 @@ module.exports = grammar({
|
||||
|
||||
$.binary_operation,
|
||||
$.call,
|
||||
$.if_then_else,
|
||||
$.index_expression,
|
||||
$.unary_operation,
|
||||
// TODO: Other expression types
|
||||
@ -85,6 +86,14 @@ module.exports = grammar({
|
||||
')',
|
||||
)),
|
||||
|
||||
if_then_else: $ => seq(
|
||||
"if", $._expression,
|
||||
"then", $._expression,
|
||||
repeat(seq("elseif", $._expression, "then", $._expression)),
|
||||
optional(seq("else", $._expression)),
|
||||
"endif",
|
||||
),
|
||||
|
||||
index_expression: $ => prec(PREC.call, seq(
|
||||
field('collection', $._expression),
|
||||
'[',
|
||||
|
74
src/grammar.json
vendored
74
src/grammar.json
vendored
@ -93,6 +93,10 @@
|
||||
"type": "SYMBOL",
|
||||
"name": "call"
|
||||
},
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "if_then_else"
|
||||
},
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "index_expression"
|
||||
@ -745,6 +749,76 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
"if_then_else": {
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
{
|
||||
"type": "STRING",
|
||||
"value": "if"
|
||||
},
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "_expression"
|
||||
},
|
||||
{
|
||||
"type": "STRING",
|
||||
"value": "then"
|
||||
},
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "_expression"
|
||||
},
|
||||
{
|
||||
"type": "REPEAT",
|
||||
"content": {
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
{
|
||||
"type": "STRING",
|
||||
"value": "elseif"
|
||||
},
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "_expression"
|
||||
},
|
||||
{
|
||||
"type": "STRING",
|
||||
"value": "then"
|
||||
},
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "_expression"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "CHOICE",
|
||||
"members": [
|
||||
{
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
{
|
||||
"type": "STRING",
|
||||
"value": "else"
|
||||
},
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "_expression"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "BLANK"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "STRING",
|
||||
"value": "endif"
|
||||
}
|
||||
]
|
||||
},
|
||||
"index_expression": {
|
||||
"type": "PREC",
|
||||
"value": 15,
|
||||
|
119
src/node-types.json
vendored
119
src/node-types.json
vendored
@ -35,6 +35,10 @@
|
||||
"type": "identifier",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "if_then_else",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "index_expression",
|
||||
"named": true
|
||||
@ -94,6 +98,10 @@
|
||||
"type": "identifier",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "if_then_else",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "index_expression",
|
||||
"named": true
|
||||
@ -164,6 +172,10 @@
|
||||
"type": "identifier",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "if_then_else",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "index_expression",
|
||||
"named": true
|
||||
@ -344,6 +356,10 @@
|
||||
"type": "identifier",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "if_then_else",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "index_expression",
|
||||
"named": true
|
||||
@ -413,6 +429,10 @@
|
||||
"type": "identifier",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "if_then_else",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "index_expression",
|
||||
"named": true
|
||||
@ -447,6 +467,69 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "if_then_else",
|
||||
"named": true,
|
||||
"fields": {},
|
||||
"children": {
|
||||
"multiple": true,
|
||||
"required": true,
|
||||
"types": [
|
||||
{
|
||||
"type": "absent",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "array_literal",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "binary_operation",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "boolean_literal",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "call",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "float_literal",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "identifier",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "if_then_else",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "index_expression",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "integer_literal",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "set_literal",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "string_literal",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "unary_operation",
|
||||
"named": true
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "index_expression",
|
||||
"named": true,
|
||||
@ -483,6 +566,10 @@
|
||||
"type": "identifier",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "if_then_else",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "index_expression",
|
||||
"named": true
|
||||
@ -541,6 +628,10 @@
|
||||
"type": "identifier",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "if_then_else",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "index_expression",
|
||||
"named": true
|
||||
@ -601,6 +692,10 @@
|
||||
"type": "identifier",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "if_then_else",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "index_expression",
|
||||
"named": true
|
||||
@ -709,6 +804,10 @@
|
||||
"type": "identifier",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "if_then_else",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "index_expression",
|
||||
"named": true
|
||||
@ -852,6 +951,18 @@
|
||||
"type": "div",
|
||||
"named": false
|
||||
},
|
||||
{
|
||||
"type": "else",
|
||||
"named": false
|
||||
},
|
||||
{
|
||||
"type": "elseif",
|
||||
"named": false
|
||||
},
|
||||
{
|
||||
"type": "endif",
|
||||
"named": false
|
||||
},
|
||||
{
|
||||
"type": "escape_sequence",
|
||||
"named": true
|
||||
@ -868,6 +979,10 @@
|
||||
"type": "identifier",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "if",
|
||||
"named": false
|
||||
},
|
||||
{
|
||||
"type": "in",
|
||||
"named": false
|
||||
@ -900,6 +1015,10 @@
|
||||
"type": "symdiff",
|
||||
"named": false
|
||||
},
|
||||
{
|
||||
"type": "then",
|
||||
"named": false
|
||||
},
|
||||
{
|
||||
"type": "true",
|
||||
"named": false
|
||||
|
4611
src/parser.c
vendored
4611
src/parser.c
vendored
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user