mirror of
https://codeberg.org/ProgramSnail/tree-sitter-lang.git
synced 2025-12-05 22:28:43 +00:00
fixes for easier parsing, result modifier added
This commit is contained in:
parent
b26c0544bf
commit
18d84f5f28
2 changed files with 110 additions and 37 deletions
|
|
@ -51,7 +51,7 @@ sum 'a 'b = 'a + 'b;
|
|||
: also this is example of function constraint
|
||||
@n is position in Fibonacci sequence
|
||||
? 'n >= 0;
|
||||
fib @n 'n : Int -> Int =
|
||||
fib 'n : @n Int -> Int =
|
||||
'n =: 0 | 1 => 1
|
||||
=: _ => fib ('n - 1) + fib 'n;
|
||||
|
||||
|
|
@ -149,10 +149,6 @@ bubble_sort 'arr : ref Array['A] = {
|
|||
};
|
||||
}
|
||||
|
||||
merge_sort 'arr : <> Array['A] = {
|
||||
|
||||
}
|
||||
|
||||
: example of ^ and generics. ^ used to denote that this object allocated on heap
|
||||
: object allocated by unique reference by default
|
||||
^TreeNode 'Key 'Value =
|
||||
|
|
@ -213,6 +209,18 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
|
|||
$is_less_then : Ord -> Bool;
|
||||
}
|
||||
|
||||
: function, that takes result argument
|
||||
result_example 'a! = 'a =: _? => print "value inside"
|
||||
=: _ => print "error inside";
|
||||
|
||||
: function, that returns result
|
||||
parse_number : Unit! = {
|
||||
%number_str := String.scan;
|
||||
%number! := Int.parse number_str;
|
||||
number.print;
|
||||
bring ();
|
||||
}
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
(source_file
|
||||
|
|
@ -315,7 +323,9 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
|
|||
(return
|
||||
(unit_literal)))))
|
||||
(function_definition
|
||||
(definition_info)
|
||||
(definition_info
|
||||
(info)
|
||||
(info))
|
||||
(simple_name_identifier)
|
||||
(argument_name_identifier)
|
||||
(argument_name_identifier)
|
||||
|
|
@ -345,11 +355,14 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
|
|||
(placeholder)
|
||||
(null_literal))))
|
||||
(function_definition
|
||||
(definition_info)
|
||||
(definition_info
|
||||
(info))
|
||||
(annotation_info
|
||||
(annotation_identifier))
|
||||
(annotation_identifier)
|
||||
(info))
|
||||
(annotation_info
|
||||
(annotation_identifier))
|
||||
(annotation_identifier)
|
||||
(info))
|
||||
(simple_name_identifier)
|
||||
(argument_name_identifier)
|
||||
(argument_name_identifier)
|
||||
|
|
@ -360,9 +373,13 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
|
|||
(name_expression
|
||||
(argument_name_identifier))))
|
||||
(function_definition
|
||||
(definition_info)
|
||||
(definition_info
|
||||
(info)
|
||||
(info)
|
||||
(info))
|
||||
(annotation_info
|
||||
(annotation_identifier))
|
||||
(annotation_identifier)
|
||||
(info))
|
||||
(constraint
|
||||
(operator_expression
|
||||
(name_expression
|
||||
|
|
@ -599,7 +616,8 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
|
|||
(simple_name_identifier)
|
||||
(number_literal)))))
|
||||
(function_definition
|
||||
(definition_info)
|
||||
(definition_info
|
||||
(info))
|
||||
(operator)
|
||||
(argument_name_identifier)
|
||||
(argument_name_identifier)
|
||||
|
|
@ -660,7 +678,8 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
|
|||
(type
|
||||
(simple_type_identifier)))))
|
||||
(function_definition
|
||||
(definition_info)
|
||||
(definition_info
|
||||
(info))
|
||||
(simple_name_identifier)
|
||||
(argument_name_identifier)
|
||||
(type
|
||||
|
|
@ -725,7 +744,8 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
|
|||
(operator)
|
||||
(bool_literal))))))))
|
||||
(function_definition
|
||||
(definition_info)
|
||||
(definition_info
|
||||
(info))
|
||||
(simple_name_identifier)
|
||||
(argument_name_identifier)
|
||||
(type
|
||||
|
|
@ -789,16 +809,10 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
|
|||
(simple_name_identifier))
|
||||
(operator)
|
||||
(bool_literal))))))))
|
||||
(function_definition
|
||||
(simple_name_identifier)
|
||||
(argument_name_identifier)
|
||||
(type
|
||||
(simple_type_identifier)
|
||||
(type
|
||||
(argument_type_identifier)))
|
||||
(block))
|
||||
(type_definition
|
||||
(definition_info)
|
||||
(definition_info
|
||||
(info)
|
||||
(info))
|
||||
(simple_type_identifier)
|
||||
(argument_type_identifier)
|
||||
(argument_type_identifier)
|
||||
|
|
@ -921,7 +935,8 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
|
|||
(simple_name_identifier)
|
||||
(number_literal)))))))
|
||||
(function_definition
|
||||
(definition_info)
|
||||
(definition_info
|
||||
(info))
|
||||
(simple_name_identifier)
|
||||
(argument_name_identifier)
|
||||
(argument_name_identifier)
|
||||
|
|
@ -933,7 +948,8 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
|
|||
(simple_name_identifier)
|
||||
(argument_name_identifier))))
|
||||
(function_definition
|
||||
(definition_info)
|
||||
(definition_info
|
||||
(info))
|
||||
(simple_name_identifier)
|
||||
(argument_name_identifier)
|
||||
(argument_name_identifier)
|
||||
|
|
@ -962,7 +978,8 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
|
|||
(reference_expression
|
||||
(simple_name_identifier))))))
|
||||
(function_definition
|
||||
(definition_info)
|
||||
(definition_info
|
||||
(info))
|
||||
(simple_name_identifier)
|
||||
(argument_name_identifier)
|
||||
(argument_name_identifier)
|
||||
|
|
@ -987,7 +1004,8 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
|
|||
(reference_expression
|
||||
(simple_name_identifier))))))
|
||||
(function_definition
|
||||
(definition_info)
|
||||
(definition_info
|
||||
(info))
|
||||
(simple_name_identifier)
|
||||
(type
|
||||
(simple_type_identifier))
|
||||
|
|
@ -1006,7 +1024,8 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
|
|||
(name_expression
|
||||
(simple_name_identifier))))
|
||||
(function_definition
|
||||
(definition_info)
|
||||
(definition_info
|
||||
(info))
|
||||
(simple_name_identifier)
|
||||
(argument_name_identifier)
|
||||
(type
|
||||
|
|
@ -1018,7 +1037,8 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
|
|||
(name_expression
|
||||
(simple_name_identifier)))))
|
||||
(function_definition
|
||||
(definition_info)
|
||||
(definition_info
|
||||
(info))
|
||||
(simple_name_identifier)
|
||||
(argument_name_identifier)
|
||||
(argument_name_identifier)
|
||||
|
|
@ -1036,7 +1056,8 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
|
|||
(annotation_identifier)
|
||||
(argument_name_identifier)))
|
||||
(function_definition
|
||||
(definition_info)
|
||||
(definition_info
|
||||
(info))
|
||||
(simple_name_identifier)
|
||||
(argument_name_identifier)
|
||||
(argument_name_identifier)
|
||||
|
|
@ -1052,7 +1073,8 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
|
|||
(argument_name_identifier)
|
||||
(argument_name_identifier)))
|
||||
(typeclass_definition
|
||||
(definition_info)
|
||||
(definition_info
|
||||
(info))
|
||||
(typeclass_identifier)
|
||||
(typeclass_identifier)
|
||||
(function_definition
|
||||
|
|
@ -1060,4 +1082,52 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
|
|||
(type
|
||||
(simple_type_identifier))
|
||||
(type
|
||||
(simple_type_identifier)))))
|
||||
(simple_type_identifier))))
|
||||
(function_definition
|
||||
(definition_info
|
||||
(info))
|
||||
(simple_name_identifier)
|
||||
(argument_name_identifier)
|
||||
(match
|
||||
(name_expression
|
||||
(argument_name_identifier))
|
||||
(case
|
||||
(suffix_expression
|
||||
(placeholder))
|
||||
(name_expression
|
||||
(simple_name_identifier)
|
||||
(string_literal)))
|
||||
(case
|
||||
(placeholder)
|
||||
(name_expression
|
||||
(simple_name_identifier)
|
||||
(string_literal)))))
|
||||
(function_definition
|
||||
(definition_info
|
||||
(info))
|
||||
(simple_name_identifier)
|
||||
(type
|
||||
(simple_type_identifier))
|
||||
(block
|
||||
(match
|
||||
(name_definition
|
||||
(simple_name_identifier))
|
||||
(case
|
||||
(name_expression
|
||||
(type
|
||||
(simple_type_identifier))
|
||||
(simple_name_identifier))))
|
||||
(match
|
||||
(suffix_expression
|
||||
(name_definition
|
||||
(simple_name_identifier)))
|
||||
(case
|
||||
(name_expression
|
||||
(type
|
||||
(simple_type_identifier))
|
||||
(simple_name_identifier)
|
||||
(simple_name_identifier))))
|
||||
(name_expression
|
||||
(simple_name_identifier))
|
||||
(return
|
||||
(unit_literal)))))
|
||||
|
|
|
|||
13
grammar.js
13
grammar.js
|
|
@ -59,7 +59,7 @@ module.exports = grammar({
|
|||
optional($.annotation_identifier),
|
||||
optional($._reference),
|
||||
$.argument_name_identifier,
|
||||
optional('?'),
|
||||
optional($._optional_result),
|
||||
)),
|
||||
optional(seq(':', repeat1(seq(
|
||||
optional($.annotation_identifier),
|
||||
|
|
@ -149,7 +149,7 @@ module.exports = grammar({
|
|||
|
||||
reference_expression: $ => prec(-1, seq($._reference, $._scoped_expression)),
|
||||
|
||||
suffix_expression: $ => seq($._scoped_expression, choice('?', '!')),
|
||||
suffix_expression: $ => seq($._scoped_expression, $._optional_result),
|
||||
|
||||
// --- other
|
||||
|
||||
|
|
@ -232,14 +232,16 @@ module.exports = grammar({
|
|||
type: $ => seq(
|
||||
optional('^'),
|
||||
field('name', $._type_identifier),
|
||||
optional('?'),
|
||||
optional($._optional_result),
|
||||
optional(seq('[', repeat1($.type), ']'))
|
||||
),
|
||||
|
||||
// --- comments
|
||||
|
||||
definition_info: $ => repeat1(seq(': ', /[^\n]*/)),
|
||||
annotation_info: $ => seq($.annotation_identifier, /[^\n]*/),
|
||||
definition_info: $ => repeat1(seq(': ', $.info)),
|
||||
annotation_info: $ => seq($.annotation_identifier, $.info),
|
||||
|
||||
info: $ => /[^\n]*/,
|
||||
|
||||
_exec_comment: $ => token(seq('#!', /[^\n]*/)),
|
||||
_line_comment: $ => token(seq('//', /[^\n]*/)),
|
||||
|
|
@ -249,6 +251,7 @@ module.exports = grammar({
|
|||
|
||||
_do: $ => choice('=>', 'do'),
|
||||
_var_let: $ => choice(choice('%', 'let'), choice('$', 'var')),
|
||||
_optional_result: $ => choice('?', '!'),
|
||||
_reference: $ => choice(choice('->', 'out'), choice('<-', 'in'), choice('<>', 'ref')),
|
||||
|
||||
_name_identifier: $ => choice($.argument_name_identifier, $.simple_name_identifier),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue