Skip to content

Commit

Permalink
wip
Browse files Browse the repository at this point in the history
  • Loading branch information
divarvel committed May 24, 2024
1 parent e3857fa commit 51c1abe
Show file tree
Hide file tree
Showing 7 changed files with 3,553 additions and 4,723 deletions.
22 changes: 15 additions & 7 deletions grammar.js
Original file line number Diff line number Diff line change
Expand Up @@ -60,14 +60,20 @@ module.exports = grammar({
repeat(seq(",", $.fact_term)),
")"
),
method_argument: $ =>
choice(
$.closure,
$.expression,
),
closure: $ =>
prec(11, seq($.variable, "->", $.expression)),
expression: $ =>
choice(
$.parens,
$.methods,
$.unary_op_expression,
$.binary_op_expression,
$.term
// todo methods
),
parens: $ =>
prec(10, seq("(", $.expression, ")")),
Expand All @@ -77,7 +83,7 @@ module.exports = grammar({
".",
$.nname,
"(",
repeat($.expression),
optional($.method_argument),
")"
)),
unary_op_expression: $ =>
Expand All @@ -92,15 +98,17 @@ module.exports = grammar({
prec.left(3, seq($.expression, "^", $.expression)),
// todo comparison operators are NOT associative, but not marking them as such
// generates an ambiguity
prec.left(2, seq($.expression, choice(">", "<", ">=", "<=", "==", "!="), $.expression)),
// declaring -> as an operator instead of declaring a proper closure item
// is a hack, but i have not found how to do it properly
prec.left(2, seq($.expression, choice(">", "<", ">=", "<=", "==", "!=", "===", "!=="), $.expression)),
prec.left(1, seq($.expression, "&&", $.expression)),
prec.left(0, seq($.expression, "||", $.expression))
),
term: $ => choice($.null, $.param, $.boolean, $.bytes, $.number, $.date, $.string, $.variable, $.set),
fact_term: $ => choice($.param, $.boolean, $.bytes, $.number, $.date, $.string, $.set),
set_term: $ => choice($.param, $.boolean, $.bytes, $.number, $.date, $.string),
term: $ => choice($.param, $.boolean, $.null, $.bytes, $.number, $.date, $.set, $.variable),
fact_term: $ => choice($.param, $.boolean, $.null, $.bytes, $.number, $.date, $.set),
set_term: $ => choice($.param, $.boolean, $.null, $.bytes, $.number, $.date, $.string),
boolean: $ => choice("true", "false"),
null: $ => token("null"),
null: $ => "null",
bytes$ => token(seq("hex:", optional(repeat1(/[0-9a-f]{2}/)))),
number: $ => token(seq(optional("-"), repeat1(/[0-9]/))),
date: $ => token(
Expand Down
88 changes: 66 additions & 22 deletions src/grammar.json
Original file line number Diff line number Diff line change
Expand Up @@ -319,6 +319,40 @@
}
]
},
"method_argument": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "closure"
},
{
"type": "SYMBOL",
"name": "expression"
}
]
},
"closure": {
"type": "PREC",
"value": 11,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "variable"
},
{
"type": "STRING",
"value": "->"
},
{
"type": "SYMBOL",
"name": "expression"
}
]
}
},
"expression": {
"type": "CHOICE",
"members": [
Expand Down Expand Up @@ -388,11 +422,16 @@
"value": "("
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "expression"
}
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "method_argument"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
Expand Down Expand Up @@ -604,6 +643,14 @@
{
"type": "STRING",
"value": "!="
},
{
"type": "STRING",
"value": "==="
},
{
"type": "STRING",
"value": "!=="
}
]
},
Expand Down Expand Up @@ -663,15 +710,15 @@
"members": [
{
"type": "SYMBOL",
"name": "null"
"name": "param"
},
{
"type": "SYMBOL",
"name": "param"
"name": "boolean"
},
{
"type": "SYMBOL",
"name": "boolean"
"name": "null"
},
{
"type": "SYMBOL",
Expand All @@ -687,15 +734,11 @@
},
{
"type": "SYMBOL",
"name": "string"
"name": "set"
},
{
"type": "SYMBOL",
"name": "variable"
},
{
"type": "SYMBOL",
"name": "set"
}
]
},
Expand All @@ -712,19 +755,19 @@
},
{
"type": "SYMBOL",
"name": "bytes"
"name": "null"
},
{
"type": "SYMBOL",
"name": "number"
"name": "bytes"
},
{
"type": "SYMBOL",
"name": "date"
"name": "number"
},
{
"type": "SYMBOL",
"name": "string"
"name": "date"
},
{
"type": "SYMBOL",
Expand All @@ -743,6 +786,10 @@
"type": "SYMBOL",
"name": "boolean"
},
{
"type": "SYMBOL",
"name": "null"
},
{
"type": "SYMBOL",
"name": "bytes"
Expand Down Expand Up @@ -775,11 +822,8 @@
]
},
"null": {
"type": "TOKEN",
"content": {
"type": "STRING",
"value": "null"
}
"type": "STRING",
"value": "null"
},
"bytes": {
"type": "TOKEN",
Expand Down
70 changes: 62 additions & 8 deletions src/node-types.json
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,25 @@
]
}
},
{
"type": "closure",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "expression",
"named": true
},
{
"type": "variable",
"named": true
}
]
}
},
{
"type": "comment",
"named": true,
Expand Down Expand Up @@ -166,19 +185,19 @@
"named": true
},
{
"type": "number",
"type": "null",
"named": true
},
{
"type": "param",
"type": "number",
"named": true
},
{
"type": "set",
"type": "param",
"named": true
},
{
"type": "string",
"type": "set",
"named": true
}
]
Expand All @@ -189,6 +208,25 @@
"named": true,
"fields": {}
},
{
"type": "method_argument",
"named": true,
"fields": {},
"children": {
"multiple": false,
"required": true,
"types": [
{
"type": "closure",
"named": true
},
{
"type": "expression",
"named": true
}
]
}
},
{
"type": "methods",
"named": true,
Expand All @@ -201,6 +239,10 @@
"type": "expression",
"named": true
},
{
"type": "method_argument",
"named": true
},
{
"type": "nname",
"named": true
Expand Down Expand Up @@ -381,6 +423,10 @@
"type": "date",
"named": true
},
{
"type": "null",
"named": true
},
{
"type": "number",
"named": true
Expand Down Expand Up @@ -455,10 +501,6 @@
"type": "set",
"named": true
},
{
"type": "string",
"named": true
},
{
"type": "variable",
"named": true
Expand Down Expand Up @@ -498,6 +540,10 @@
"type": "!=",
"named": false
},
{
"type": "!==",
"named": false
},
{
"type": "$",
"named": false
Expand Down Expand Up @@ -538,6 +584,10 @@
"type": "-",
"named": false
},
{
"type": "->",
"named": false
},
{
"type": ".",
"named": false
Expand Down Expand Up @@ -574,6 +624,10 @@
"type": "==",
"named": false
},
{
"type": "===",
"named": false
},
{
"type": ">",
"named": false
Expand Down
Loading

0 comments on commit 51c1abe

Please sign in to comment.