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(
|
|
|
|
$.comment,
|
|
|
|
$.identifier,
|
|
|
|
$.value,
|
|
|
|
$.tool,
|
|
|
|
$.operator,
|
2023-08-24 14:12:08 +00:00
|
|
|
)),
|
2023-08-22 21:02:40 +00:00
|
|
|
|
2023-09-22 10:38:25 +00:00
|
|
|
comment: $ => seq('#', /.*/),
|
|
|
|
|
|
|
|
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-09-22 10:38:25 +00:00
|
|
|
tool: $ => choice(
|
|
|
|
"random",
|
|
|
|
"random_boolean",
|
|
|
|
"random_integer",
|
|
|
|
"random_string",
|
|
|
|
"random_float",
|
|
|
|
),
|
2023-08-22 21:02:40 +00:00
|
|
|
|
|
|
|
operator: $ => choice(
|
|
|
|
'=',
|
2023-08-22 21:28:19 +00:00
|
|
|
'-',
|
|
|
|
'+',
|
|
|
|
'/',
|
|
|
|
'|',
|
2023-09-22 10:38:25 +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-22 10:38:25 +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-08-24 13:31:26 +00:00
|
|
|
empty: $ => "()",
|
|
|
|
|
2023-08-24 16:53:42 +00:00
|
|
|
boolean: $ => choice(
|
|
|
|
"true",
|
|
|
|
"false"
|
|
|
|
),
|
|
|
|
|
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-08-22 21:02:40 +00:00
|
|
|
}
|
|
|
|
});
|