This commit is contained in:
2025-09-21 22:14:29 +02:00
parent 13d459f594
commit c70e53905a
7 changed files with 23920 additions and 23402 deletions

View File

@@ -35,7 +35,7 @@ module.exports = grammar({
"negate",
"addition",
"concat",
"with",
"binary_boolean",
"equal",
"if",
"let",
@@ -50,7 +50,10 @@ module.exports = grammar({
source_file: $ => repeat($.definition),
_identifier_tok: $ => token(/[a-zA-Z_]+[a-zA-Z0-9_]*/),
identifier: $ => reserved('toplevel_kw', $._identifier_tok),
identifier: $ => choice(
reserved('toplevel_kw', $._identifier_tok),
token(/`[^\n\`]+`/)
),
path: $ => prec.left(seq($.identifier, repeat(seq('.', $.identifier)))),
comment: $ =>
@@ -112,7 +115,7 @@ module.exports = grammar({
type_atom: $ => choice(
$.just_type,
$.partial_type,
$.partial_type,
seq('(', $.type, ')'),
$.record_type,
),
@@ -289,12 +292,6 @@ module.exports = grammar({
field('body', $.expression)
)),
and_expr: $ => prec.left("with",
seq(
field('left', $.expression),
'and',
field('right', $.atom))),
if_expr: $ => prec("if",
seq(
'if',
@@ -304,27 +301,57 @@ module.exports = grammar({
'else',
field('else', $.expression))),
sub_expr: $ => prec.left("addition",
seq(field('left', $.expression), '-', field('right', $.expression))),
add_expr: $ => prec.left("addition",
seq(field('left', $.expression), '+', field('right', $.expression))),
_add_expr: $ => prec.left("addition",
seq(
field('left', $.expression),
choice('+', '-'),
field('right', $.expression)
)),
divide_expr: $ => prec.left("multiplication",
seq(field('left', $.expression), '/', field('right', $.expression))),
multiply_expr: $ => prec.left("multiplication",
seq(field('left', $.expression), '*', field('right', $.expression))),
_multiply_expr: $ => prec.left("multiplication",
seq(
field('left', $.expression),
choice('*', '/'),
field('right', $.expression)
)),
equal_expr: $ => prec.left("equal",
seq(field('left', $.expression), '=', field('right', $.expression))),
_equal_expr: $ => prec.left("equal",
seq(
field('left', $.expression),
'=',
field('right', $.expression)
)),
concat_expr: $ => prec.left("concat",
seq(field('left', $.expression), '++', field('right', $.expression))),
_concat_expr: $ => prec.left("concat",
seq(
field('left', $.expression),
choice('++', '=>'),
field('right', $.expression)
)),
compose_expr: $ => prec.left("concat",
seq(field('left', $.expression), '=>', field('right', $.expression))),
_exponent_expr: $ => prec.left("exponent",
seq(
field('left', $.expression),
'^',
field('right', $.atom)
)),
exponent_expr: $ => prec.left("exponent",
seq(field('left', $.expression), '^', field('right', $.atom))),
_bin_bool_expr: $ => prec.left("binary_boolean",
seq(
field('left', $.expression),
choice('and', 'or'),
field('right', $.atom)
)),
binary_expr: $ => choice(
$._exponent_expr,
$._concat_expr,
$._equal_expr,
$._multiply_expr,
$._add_expr,
$._bin_bool_expr,
),
match_arm: $ => prec("match_arm",
seq(
@@ -336,8 +363,10 @@ module.exports = grammar({
field('arm', $.match_arm),
prec("new_match_arm", repeat(seq('|', field('arm', $.match_arm))))),
negate_expr: $ => prec.right("negate",
seq('-', field('expr', $.expression))),
unary_expr: $ => prec.right("negate",
seq(
'-',
field('expr', $.expression))),
tag_expr: $ => prec.right("tag",
seq(
@@ -354,20 +383,12 @@ module.exports = grammar({
$.await_expr,
$.type_downcast,
$.lambda,
$.and_expr,
$.if_expr,
$.tag_expr,
$.match_expr,
$.add_expr,
$.sub_expr,
$.divide_expr,
$.multiply_expr,
$.concat_expr,
$.compose_expr,
$.equal_expr,
$.exponent_expr,
$.negate_expr,
$.binary_expr,
$.unary_expr,
),
def: $ => seq(