c
This commit is contained in:
@@ -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(
|
||||
|
Reference in New Issue
Block a user