tree-sitter-dust/grammar.js

69 lines
1.0 KiB
JavaScript
Raw Normal View History

2023-08-22 21:02:40 +00:00
module.exports = grammar({
2023-08-24 17:01:12 +00:00
name: 'dust',
2023-08-22 21:02:40 +00:00
rules: {
2023-09-22 10:38:25 +00:00
source: $ => repeat(choice(
2023-09-27 21:41:39 +00:00
$.statement,
2023-08-24 14:12:08 +00:00
)),
2023-08-22 21:02:40 +00:00
2023-09-27 23:10:21 +00:00
statement: $ => seq($.expression, $.close),
expression: $ => choice(
$.identifier,
prec(1, $.value),
prec(2, seq(
choice(
$.value,
$.identifier,
),
$.operator,
choice(
$.value,
$.identifier,
$.expression,
))),
2023-09-27 21:41:39 +00:00
),
close: $ => ";",
2023-09-22 10:38:25 +00:00
identifier: $ => /[a-zA-Z|_|.]+(_[a-zA-Z]+)*/,
2023-08-24 14:12:08 +00:00
value: $ => choice(
2023-08-22 22:28:34 +00:00
$.integer,
2023-08-24 13:31:26 +00:00
$.float,
2023-08-22 22:28:34 +00:00
$.string,
$.list,
2023-08-24 13:31:26 +00:00
$.empty,
2023-08-24 16:53:42 +00:00
$.boolean,
2023-09-22 10:38:25 +00:00
$.function,
),
2023-08-24 14:12:08 +00:00
2023-08-24 13:31:26 +00:00
float: $ => /\d+\.\d*/,
integer: $ => /\d+/,
2023-08-22 22:28:34 +00:00
2023-09-27 21:41:39 +00:00
string: $ => /("|'|`)(.*?)("|'|`)/,
2023-08-22 22:28:34 +00:00
2023-09-22 10:38:25 +00:00
function: $ => /{(.*?)}/,
2023-08-22 22:28:34 +00:00
2023-09-27 21:41:39 +00:00
empty: $ => '()',
2023-08-24 13:31:26 +00:00
2023-08-24 16:53:42 +00:00
boolean: $ => choice(
2023-09-27 21:41:39 +00:00
'true',
'false',
2023-08-24 16:53:42 +00:00
),
2023-08-22 22:28:34 +00:00
list: $ => seq(
'(',
2023-09-22 10:38:25 +00:00
repeat1(seq($.value, optional(','))),
2023-08-22 22:28:34 +00:00
')'
),
2023-09-27 21:41:39 +00:00
operator: $ => choice(
'+',
'-',
'=',
),
2023-08-22 21:02:40 +00:00
}
});