Clean up
This commit is contained in:
parent
0ee26dcf0d
commit
e90a4d7353
@ -1,407 +0,0 @@
|
||||
module.exports = grammar({
|
||||
name: "dust",
|
||||
|
||||
word: $ => $.identifier,
|
||||
|
||||
extras: $ => [/\s/, $._comment],
|
||||
|
||||
rules: {
|
||||
root: $ =>
|
||||
prec(1, repeat1($.statement)),
|
||||
|
||||
_comment: $ => /[#][^#\n]*[#|\n]/,
|
||||
|
||||
block: $ =>
|
||||
seq(
|
||||
optional("async"),
|
||||
"{",
|
||||
repeat1($.statement),
|
||||
"}",
|
||||
),
|
||||
|
||||
statement: $ =>
|
||||
prec.left(
|
||||
seq(
|
||||
choice(
|
||||
$.assignment,
|
||||
$.block,
|
||||
$.expression,
|
||||
$.for,
|
||||
$.if_else,
|
||||
$.index_assignment,
|
||||
$.match,
|
||||
$.return,
|
||||
$.use,
|
||||
$.while,
|
||||
),
|
||||
optional(";"),
|
||||
),
|
||||
),
|
||||
|
||||
expression: $ =>
|
||||
prec.right(
|
||||
choice(
|
||||
$._expression_kind,
|
||||
seq(
|
||||
"(",
|
||||
$._expression_kind,
|
||||
")",
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
_expression_kind: $ =>
|
||||
prec.right(
|
||||
choice(
|
||||
$.function_call,
|
||||
$.identifier,
|
||||
$.index,
|
||||
$.logic,
|
||||
$.math,
|
||||
$.value,
|
||||
$.yield,
|
||||
),
|
||||
),
|
||||
|
||||
_expression_list: $ =>
|
||||
repeat1(
|
||||
prec.right(
|
||||
seq(
|
||||
$.expression,
|
||||
optional(","),
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
identifier: $ =>
|
||||
/[_a-zA-Z]+[_a-zA-Z0-9]?/,
|
||||
|
||||
value: $ =>
|
||||
choice(
|
||||
$.integer,
|
||||
$.float,
|
||||
$.string,
|
||||
$.boolean,
|
||||
$.list,
|
||||
$.function,
|
||||
$.table,
|
||||
$.map,
|
||||
),
|
||||
|
||||
integer: $ =>
|
||||
token(
|
||||
prec.left(
|
||||
seq(
|
||||
optional("-"),
|
||||
repeat1(
|
||||
choice(
|
||||
"1",
|
||||
"2",
|
||||
"3",
|
||||
"4",
|
||||
"5",
|
||||
"6",
|
||||
"7",
|
||||
"8",
|
||||
"9",
|
||||
"0",
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
float: $ =>
|
||||
token(
|
||||
prec.left(
|
||||
seq(
|
||||
optional("-"),
|
||||
repeat1(
|
||||
choice(
|
||||
"1",
|
||||
"2",
|
||||
"3",
|
||||
"4",
|
||||
"5",
|
||||
"6",
|
||||
"7",
|
||||
"8",
|
||||
"9",
|
||||
"0",
|
||||
),
|
||||
),
|
||||
".",
|
||||
repeat1(
|
||||
choice(
|
||||
"1",
|
||||
"2",
|
||||
"3",
|
||||
"4",
|
||||
"5",
|
||||
"6",
|
||||
"7",
|
||||
"8",
|
||||
"9",
|
||||
"0",
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
string: $ =>
|
||||
/("[^"]*?")|('[^']*?')|(`[^`]*?`)/,
|
||||
|
||||
boolean: $ =>
|
||||
choice("true", "false"),
|
||||
|
||||
list: $ =>
|
||||
seq(
|
||||
"[",
|
||||
repeat(
|
||||
prec.left(
|
||||
seq(
|
||||
$.expression,
|
||||
optional(","),
|
||||
),
|
||||
),
|
||||
),
|
||||
"]",
|
||||
),
|
||||
|
||||
map: $ =>
|
||||
seq(
|
||||
"{",
|
||||
repeat(
|
||||
seq(
|
||||
$.identifier,
|
||||
"=",
|
||||
$.statement,
|
||||
optional(","),
|
||||
),
|
||||
),
|
||||
"}",
|
||||
),
|
||||
|
||||
index: $ =>
|
||||
prec.left(
|
||||
1,
|
||||
seq(
|
||||
$.expression,
|
||||
":",
|
||||
$.expression,
|
||||
optional(
|
||||
seq("..", $.expression),
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
math: $ =>
|
||||
prec.left(
|
||||
seq(
|
||||
$.expression,
|
||||
$.math_operator,
|
||||
$.expression,
|
||||
),
|
||||
),
|
||||
|
||||
math_operator: $ =>
|
||||
choice("+", "-", "*", "/", "%"),
|
||||
|
||||
logic: $ =>
|
||||
prec.right(
|
||||
seq(
|
||||
$.expression,
|
||||
$.logic_operator,
|
||||
$.expression,
|
||||
),
|
||||
),
|
||||
|
||||
logic_operator: $ =>
|
||||
choice(
|
||||
"==",
|
||||
"!=",
|
||||
"&&",
|
||||
"||",
|
||||
">",
|
||||
"<",
|
||||
">=",
|
||||
"<=",
|
||||
),
|
||||
|
||||
assignment: $ =>
|
||||
seq(
|
||||
field(
|
||||
"identifier",
|
||||
$.identifier,
|
||||
),
|
||||
optional(
|
||||
field(
|
||||
"type",
|
||||
$.type_definition,
|
||||
),
|
||||
),
|
||||
field(
|
||||
"assignment_operator",
|
||||
$.assignment_operator,
|
||||
),
|
||||
field("statement", $.statement),
|
||||
),
|
||||
|
||||
index_assignment: $ =>
|
||||
seq(
|
||||
$.index,
|
||||
$.assignment_operator,
|
||||
$.statement,
|
||||
),
|
||||
|
||||
assignment_operator: $ =>
|
||||
prec.right(
|
||||
choice("=", "+=", "-="),
|
||||
),
|
||||
|
||||
if_else: $ =>
|
||||
prec.right(
|
||||
seq(
|
||||
$.if,
|
||||
repeat($.else_if),
|
||||
optional($.else),
|
||||
),
|
||||
),
|
||||
|
||||
if: $ =>
|
||||
seq("if", $.expression, $.block),
|
||||
|
||||
else_if: $ =>
|
||||
seq(
|
||||
"else if",
|
||||
$.expression,
|
||||
$.block,
|
||||
),
|
||||
|
||||
else: $ => seq("else", $.block),
|
||||
|
||||
match: $ =>
|
||||
prec.right(
|
||||
seq(
|
||||
"match",
|
||||
$.expression,
|
||||
repeat1(
|
||||
seq(
|
||||
$.expression,
|
||||
"=>",
|
||||
$.block,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
while: $ =>
|
||||
seq(
|
||||
"while",
|
||||
$.expression,
|
||||
$.block,
|
||||
),
|
||||
|
||||
for: $ =>
|
||||
seq(
|
||||
choice("for", "async for"),
|
||||
$.identifier,
|
||||
"in",
|
||||
$.expression,
|
||||
$.block,
|
||||
),
|
||||
|
||||
identifier_list: $ =>
|
||||
prec.right(
|
||||
choice(
|
||||
seq(
|
||||
"|",
|
||||
repeat(
|
||||
seq(
|
||||
$.identifier,
|
||||
optional(","),
|
||||
),
|
||||
),
|
||||
"|",
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
table: $ =>
|
||||
prec.right(
|
||||
seq(
|
||||
"table",
|
||||
$.identifier_list,
|
||||
$.expression,
|
||||
),
|
||||
),
|
||||
|
||||
return: $ =>
|
||||
seq("return", $.expression),
|
||||
|
||||
use: $ => seq("use", $.string),
|
||||
|
||||
type_definition: $ =>
|
||||
seq("<", $.type, ">"),
|
||||
|
||||
type: $ =>
|
||||
prec.right(
|
||||
choice(
|
||||
"any",
|
||||
"bool",
|
||||
seq(
|
||||
"fn",
|
||||
repeat(
|
||||
seq(
|
||||
$.type,
|
||||
optional(","),
|
||||
),
|
||||
),
|
||||
optional(seq("->", $.type)),
|
||||
),
|
||||
"int",
|
||||
seq("list", $.type),
|
||||
"map",
|
||||
"num",
|
||||
"str",
|
||||
),
|
||||
),
|
||||
|
||||
function: $ =>
|
||||
seq(
|
||||
"|",
|
||||
repeat(
|
||||
seq(
|
||||
$.identifier,
|
||||
optional(","),
|
||||
),
|
||||
),
|
||||
"|",
|
||||
$.block,
|
||||
),
|
||||
|
||||
function_call: $ =>
|
||||
prec.right(
|
||||
1,
|
||||
seq(
|
||||
"(",
|
||||
$.expression,
|
||||
optional($._expression_list),
|
||||
")",
|
||||
),
|
||||
),
|
||||
|
||||
yield: $ =>
|
||||
prec.left(
|
||||
seq(
|
||||
$.expression,
|
||||
"->",
|
||||
"(",
|
||||
$.expression,
|
||||
optional($._expression_list),
|
||||
")",
|
||||
),
|
||||
),
|
||||
},
|
||||
});
|
Loading…
Reference in New Issue
Block a user