schala/experiments/tree-sitter-test/grammar.js

42 lines
1.1 KiB
JavaScript
Raw Normal View History

2024-04-21 02:25:56 -07:00
module.exports = grammar({
name: "TestLang",
rules: {
2024-04-21 03:01:13 -07:00
source_file: $ => repeat($._definition),
_definition: $ => choice(
$.function_definition
//TODO others
2024-04-21 03:08:05 -07:00
),
2024-04-21 03:01:13 -07:00
2024-04-21 03:08:05 -07:00
function_definition: $ => seq(
"fn",
$.identifier,
$.parameter_list,
optional($._type),
2024-04-21 03:08:05 -07:00
$.block,
),
parameter_list: $ => seq("(", /* TODO */ ")"),
2024-04-21 03:01:13 -07:00
2024-04-21 03:08:05 -07:00
block: $ => seq(
"{",
repeat(optional($._statement)),
2024-04-21 03:08:05 -07:00
"}"
),
2024-04-21 03:01:13 -07:00
2024-04-21 03:08:05 -07:00
_statement: $ => choice(
$._return_statement
),
_return_statement: $ => seq("return", $._expression, ";"),
_expression: $ => choice($.identifier, $.unary, $.binary),
unary: $ => prec(4, choice(seq("-", $._expression), seq("!", $._expression))),
binary: $ => choice(prec.left(2, seq($._expression, "*", $._expression)), prec.left(1, seq($._expression, "+", $._expression))),
2024-04-21 03:08:05 -07:00
_type: $ => "bool",
identifier: $ => /[a-z]+/,
2024-04-21 02:25:56 -07:00
}
});