finish TS grammar

This commit is contained in:
2025-09-21 13:19:07 +02:00
parent b4b6edd2f2
commit dcc8500e2c
5 changed files with 35678 additions and 6832 deletions

View File

@@ -22,6 +22,27 @@ module.exports = grammar({
word: $ => $._identifier_tok,
precedences: _ => [
[
"exponent",
"multiplication",
"negate",
"addition",
"concat",
"with",
"equal",
"if",
"let",
"new_match_arm",
"match_arm",
"tag",
],
],
conflicts: $ => [
[$.match_expr, $.match_expr],
],
rules: {
source_file: $ => repeat($._definition),
@@ -184,26 +205,25 @@ module.exports = grammar({
$.field_access,
$.function_call,
$.record_expr,
// TODO
),
let_binding: $ => seq(
let_binding: $ => prec("let", seq(
'let',
$.identifier,
'=',
$.expression,
optional('in'),
$.expression,
),
)),
await_binding: $ => seq(
await_binding: $ => prec("let", seq(
'await',
$.identifier,
'=',
$.expression,
optional('in'),
$.expression,
),
)),
type_downcast: $ => seq(
$._atom,
@@ -218,13 +238,74 @@ module.exports = grammar({
$.expression
)),
with_expr: $ => prec.left("with",
seq($.expression, 'with', $._atom)),
and_expr: $ => prec.left("with",
seq($.expression, 'and', $._atom)),
if_expr: $ => prec("if",
seq('if', $.expression, 'then', $.expression, 'else', $.expression)),
sub_expr: $ => prec.left("addition",
seq($.expression, '-', $.expression)),
add_expr: $ => prec.left("addition",
seq($.expression, '+', $.expression)),
divide_expr: $ => prec.left("multiplication",
seq($.expression, '/', $.expression)),
multiply_expr: $ => prec.left("multiplication",
seq($.expression, '*', $.expression)),
equal_expr: $ => prec.left("equal",
seq($.expression, '=', $.expression)),
concat_expr: $ => prec.left("concat",
seq($.expression, '++', $.expression)),
compose_expr: $ => prec.left("concat",
seq($.expression, '=>', $.expression)),
exponent_expr: $ => prec.left("exponent",
seq($.expression, '^', $._atom)),
match_arm: $ => prec("match_arm",
seq(
field('cases', seq($._atom, repeat(seq('|', $._atom)))),
'->', $.expression)),
match_expr: $ =>
seq('match', $.expression, 'with',
$.match_arm,
prec("new_match_arm", repeat(seq('|', $.match_arm)))),
negate_expr: $ => prec.right("negate",
seq('-', $.expression)),
tag_expr: $ => prec.right("tag",
seq($.tag, $.expression)),
expression: $ => choice(
$._atom,
$.let_binding,
$.await_binding,
$.type_downcast,
$.lambda,
// TODO
$.with_expr,
$.and_expr,
$.if_expr,
$.match_expr,
$.tag_expr,
$.add_expr,
$.sub_expr,
$.divide_expr,
$.multiply_expr,
$.concat_expr,
$.compose_expr,
$.equal_expr,
$.exponent_expr,
$.negate_expr,
),
def: $ => seq(