mirror of
https://codeberg.org/ProgramSnail/tree-sitter-lang.git
synced 2025-12-06 06:38:51 +00:00
improvements for proper printing, etc.
This commit is contained in:
parent
b71b732797
commit
8e0cea277e
4 changed files with 231 additions and 119 deletions
|
|
@ -62,17 +62,21 @@ test_k 'n 'k : Int Int -> Bool = {
|
|||
--------------------------------------------------------------------------------
|
||||
|
||||
(source_file
|
||||
(empty_lines)
|
||||
(import
|
||||
(simple_name_identifier))
|
||||
(empty_lines)
|
||||
(import
|
||||
(simple_name_identifier)
|
||||
(simple_type_identifier))
|
||||
(empty_lines)
|
||||
(import
|
||||
(simple_name_identifier))
|
||||
(empty_lines)
|
||||
(function_definition
|
||||
(simple_name_identifier)
|
||||
(block
|
||||
(empty_lines)
|
||||
(match
|
||||
(name_definition
|
||||
(simple_name_identifier))
|
||||
|
|
@ -90,6 +94,7 @@ test_k 'n 'k : Int Int -> Bool = {
|
|||
(number_literal)))
|
||||
(simple_name_identifier))
|
||||
(number_literal))))
|
||||
(empty_lines)
|
||||
(match
|
||||
(name_definition
|
||||
(simple_name_identifier))
|
||||
|
|
@ -97,6 +102,7 @@ test_k 'n 'k : Int Int -> Bool = {
|
|||
(name_expression
|
||||
(simple_name_identifier)
|
||||
(number_literal))))
|
||||
(empty_lines)
|
||||
(match
|
||||
(operator_expression
|
||||
(name_definition
|
||||
|
|
@ -113,12 +119,14 @@ test_k 'n 'k : Int Int -> Bool = {
|
|||
(simple_name_identifier))
|
||||
(operator)
|
||||
(number_literal)))))
|
||||
(empty_lines)
|
||||
(operator_expression
|
||||
(name_expression
|
||||
(simple_name_identifier))
|
||||
(operator)
|
||||
(name_expression
|
||||
(simple_name_identifier)))
|
||||
(empty_lines)
|
||||
(match
|
||||
(name_definition
|
||||
(simple_name_identifier))
|
||||
|
|
@ -135,6 +143,7 @@ test_k 'n 'k : Int Int -> Bool = {
|
|||
(simple_name_identifier))
|
||||
(operator)
|
||||
(number_literal)))))
|
||||
(empty_lines)
|
||||
(match
|
||||
(name_definition
|
||||
(simple_name_identifier))
|
||||
|
|
@ -149,12 +158,14 @@ test_k 'n 'k : Int Int -> Bool = {
|
|||
(operator_tail1)
|
||||
(name_expression
|
||||
(simple_name_identifier)))))
|
||||
(empty_lines)
|
||||
(match
|
||||
(name_definition
|
||||
(simple_name_identifier))
|
||||
(case
|
||||
(name_expression
|
||||
(simple_name_identifier))))
|
||||
(empty_lines)
|
||||
(loop
|
||||
(name_definition
|
||||
(simple_name_identifier))
|
||||
|
|
@ -178,6 +189,7 @@ test_k 'n 'k : Int Int -> Bool = {
|
|||
(operator)
|
||||
(number_literal)))
|
||||
(block
|
||||
(empty_lines)
|
||||
(condition
|
||||
(operator_expression
|
||||
(operator_expression
|
||||
|
|
@ -237,7 +249,9 @@ test_k 'n 'k : Int Int -> Bool = {
|
|||
(string_literal))
|
||||
(operator)
|
||||
(name_expression
|
||||
(simple_name_identifier)))))))))
|
||||
(simple_name_identifier)))))
|
||||
(empty_lines)))
|
||||
(empty_lines)))
|
||||
(empty_lines)
|
||||
(function_definition
|
||||
(simple_name_identifier)
|
||||
|
|
@ -252,6 +266,7 @@ test_k 'n 'k : Int Int -> Bool = {
|
|||
(type
|
||||
(simple_type_identifier))
|
||||
(block
|
||||
(empty_lines)
|
||||
(condition
|
||||
(operator_expression
|
||||
(name_expression
|
||||
|
|
@ -289,6 +304,7 @@ test_k 'n 'k : Int Int -> Bool = {
|
|||
(argument_name_identifier)))
|
||||
(operator_tail1)
|
||||
(number_literal))))
|
||||
(empty_lines)
|
||||
(match
|
||||
(operator_expression
|
||||
(name_definition
|
||||
|
|
@ -301,6 +317,7 @@ test_k 'n 'k : Int Int -> Bool = {
|
|||
(simple_name_identifier)
|
||||
(argument_name_identifier)
|
||||
(simple_name_identifier))))
|
||||
(empty_lines)
|
||||
(match
|
||||
(operator_expression
|
||||
(name_definition
|
||||
|
|
@ -332,7 +349,8 @@ test_k 'n 'k : Int Int -> Bool = {
|
|||
(simple_name_identifier))
|
||||
(operator)
|
||||
(name_expression
|
||||
(simple_name_identifier)))))))
|
||||
(simple_name_identifier)))))
|
||||
(empty_lines)))
|
||||
(empty_lines)
|
||||
(function_definition
|
||||
(simple_name_identifier)
|
||||
|
|
@ -342,16 +360,19 @@ test_k 'n 'k : Int Int -> Bool = {
|
|||
(type
|
||||
(simple_type_identifier))
|
||||
(block
|
||||
(empty_lines)
|
||||
(match
|
||||
(name_definition
|
||||
(simple_name_identifier))
|
||||
(case
|
||||
(number_literal)))
|
||||
(empty_lines)
|
||||
(match
|
||||
(name_definition
|
||||
(simple_name_identifier))
|
||||
(case
|
||||
(number_literal)))
|
||||
(empty_lines)
|
||||
(loop
|
||||
(name_expression
|
||||
(simple_name_identifier)
|
||||
|
|
@ -360,17 +381,21 @@ test_k 'n 'k : Int Int -> Bool = {
|
|||
(argument_name_identifier)
|
||||
(simple_name_identifier)))
|
||||
(block
|
||||
(empty_lines)
|
||||
(operator_expression
|
||||
(name_expression
|
||||
(simple_name_identifier))
|
||||
(operator)
|
||||
(name_expression
|
||||
(simple_name_identifier)))
|
||||
(empty_lines)
|
||||
(operator_expression
|
||||
(name_expression
|
||||
(simple_name_identifier))
|
||||
(operator)
|
||||
(number_literal))))
|
||||
(number_literal))
|
||||
(empty_lines)))
|
||||
(empty_lines)
|
||||
(loop
|
||||
(operator_expression
|
||||
(operator_expression
|
||||
|
|
@ -382,6 +407,7 @@ test_k 'n 'k : Int Int -> Bool = {
|
|||
(operator_tail1)
|
||||
(number_literal))
|
||||
(block
|
||||
(empty_lines)
|
||||
(match
|
||||
(name_definition
|
||||
(simple_name_identifier))
|
||||
|
|
@ -395,6 +421,7 @@ test_k 'n 'k : Int Int -> Bool = {
|
|||
(simple_name_identifier)))
|
||||
(operator_tail1)
|
||||
(number_literal))))
|
||||
(empty_lines)
|
||||
(condition
|
||||
(name_expression
|
||||
(simple_name_identifier)
|
||||
|
|
@ -411,10 +438,13 @@ test_k 'n 'k : Int Int -> Bool = {
|
|||
(simple_name_identifier))
|
||||
(operator)
|
||||
(name_expression
|
||||
(simple_name_identifier))))))
|
||||
(simple_name_identifier))))
|
||||
(empty_lines)))
|
||||
(empty_lines)
|
||||
(return
|
||||
(name_expression
|
||||
(simple_name_identifier)))))
|
||||
(simple_name_identifier)))
|
||||
(empty_lines)))
|
||||
(empty_lines)
|
||||
(function_definition
|
||||
(simple_name_identifier)
|
||||
|
|
@ -427,6 +457,7 @@ test_k 'n 'k : Int Int -> Bool = {
|
|||
(type
|
||||
(simple_type_identifier))
|
||||
(block
|
||||
(empty_lines)
|
||||
(condition
|
||||
(operator_expression
|
||||
(name_expression
|
||||
|
|
@ -458,6 +489,7 @@ test_k 'n 'k : Int Int -> Bool = {
|
|||
(name_expression
|
||||
(simple_name_identifier)
|
||||
(simple_name_identifier))))))
|
||||
(empty_lines)
|
||||
(match
|
||||
(name_definition
|
||||
(simple_name_identifier))
|
||||
|
|
@ -478,4 +510,6 @@ test_k 'n 'k : Int Int -> Bool = {
|
|||
(name_expression
|
||||
(simple_name_identifier))
|
||||
(operator)
|
||||
(number_literal)))))))
|
||||
(number_literal))))
|
||||
(empty_lines)))
|
||||
(empty_lines))
|
||||
|
|
|
|||
|
|
@ -155,15 +155,16 @@ bubble_sort_2 'arr : ref Array['A] = {
|
|||
& @key Key
|
||||
& @value Value
|
||||
& @left ^TreeNode['Key 'Value]
|
||||
& @right ^TreeNode['Key 'Value] {
|
||||
new = do_something; // static methods
|
||||
& @right ^TreeNode['Key 'Value];
|
||||
|
||||
$insert 'key = do_something; // const methods
|
||||
.new = do_something; // static methods
|
||||
|
||||
%find 'key = do_something;
|
||||
.insert <> 'this 'key = do_something; // const methods
|
||||
|
||||
.find 'this 'key = do_something;
|
||||
|
||||
.delete <> 'this 'key = do_something; // var methods
|
||||
|
||||
$delete 'key = do_something; // var methods
|
||||
}
|
||||
|
||||
generic_type_name_expressions = {
|
||||
$x := TreeNode[Int Int].new;
|
||||
|
|
@ -203,9 +204,8 @@ move_construct_task 'name 'duration : <- String <- Float -> Task = Task @name 'n
|
|||
arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name 'duration;
|
||||
|
||||
: ord is fundamental typeclass
|
||||
#Ord : #Eq {
|
||||
$is_less_then : Ord -> Bool;
|
||||
}
|
||||
#Ord[#Eq];
|
||||
.is_less_then : Ord -> Bool;
|
||||
|
||||
: function, that takes result argument
|
||||
result_example 'a! = 'a =: _? => print "value inside"
|
||||
|
|
@ -229,19 +229,24 @@ result_func! 'a 'b -> 'c -> 'd = ?? 'a == 0 => error "some error" !!=> ('c := 'a
|
|||
--------------------------------------------------------------------------------
|
||||
|
||||
(source_file
|
||||
(empty_lines)
|
||||
(extra)
|
||||
(empty_lines)
|
||||
(import
|
||||
(simple_name_identifier))
|
||||
(extra)
|
||||
(empty_lines)
|
||||
(import
|
||||
(placeholder)
|
||||
(simple_name_identifier))
|
||||
(extra)
|
||||
(empty_lines)
|
||||
(import
|
||||
(simple_name_identifier)
|
||||
(simple_name_identifier)
|
||||
(simple_name_identifier)
|
||||
(simple_name_identifier))
|
||||
(empty_lines)
|
||||
(import
|
||||
(simple_name_identifier)
|
||||
(simple_name_identifier))
|
||||
|
|
@ -252,19 +257,22 @@ result_func! 'a 'b -> 'c -> 'd = ?? 'a == 0 => error "some error" !!=> ('c := 'a
|
|||
(empty_lines)
|
||||
(loop
|
||||
(block
|
||||
(empty_lines)
|
||||
(match
|
||||
(name_definition
|
||||
(simple_name_identifier))
|
||||
(case
|
||||
(name_expression
|
||||
(simple_name_identifier))))
|
||||
(empty_lines)
|
||||
(condition
|
||||
(operator_expression
|
||||
(name_expression
|
||||
(simple_name_identifier))
|
||||
(operator)
|
||||
(char_literal))
|
||||
(loop_control))))
|
||||
(loop_control))
|
||||
(empty_lines)))
|
||||
(empty_lines)
|
||||
(loop
|
||||
(operator_expression
|
||||
|
|
@ -273,9 +281,11 @@ result_func! 'a 'b -> 'c -> 'd = ?? 'a == 0 => error "some error" !!=> ('c := 'a
|
|||
(operator)
|
||||
(number_literal))
|
||||
(block
|
||||
(empty_lines)
|
||||
(name_expression
|
||||
(simple_name_identifier)
|
||||
(simple_name_identifier))))
|
||||
(simple_name_identifier))
|
||||
(empty_lines)))
|
||||
(empty_lines)
|
||||
(loop
|
||||
(name_definition
|
||||
|
|
@ -285,9 +295,11 @@ result_func! 'a 'b -> 'c -> 'd = ?? 'a == 0 => error "some error" !!=> ('c := 'a
|
|||
(operator)
|
||||
(number_literal))
|
||||
(block
|
||||
(empty_lines)
|
||||
(name_expression
|
||||
(simple_name_identifier)
|
||||
(string_literal))))
|
||||
(string_literal))
|
||||
(empty_lines)))
|
||||
(empty_lines)
|
||||
(condition
|
||||
(operator_expression
|
||||
|
|
@ -325,16 +337,20 @@ result_func! 'a 'b -> 'c -> 'd = ?? 'a == 0 => error "some error" !!=> ('c := 'a
|
|||
(operator)
|
||||
(number_literal))
|
||||
(block
|
||||
(empty_lines)
|
||||
(operator_expression
|
||||
(name_expression
|
||||
(simple_name_identifier))
|
||||
(operator)
|
||||
(number_literal))
|
||||
(empty_lines)
|
||||
(name_expression
|
||||
(simple_name_identifier)
|
||||
(simple_name_identifier)))
|
||||
(simple_name_identifier))
|
||||
(empty_lines))
|
||||
(return
|
||||
(unit_literal)))))
|
||||
(unit_literal)))
|
||||
(empty_lines)))
|
||||
(empty_lines)
|
||||
(function_definition
|
||||
(definition_info
|
||||
|
|
@ -436,6 +452,7 @@ result_func! 'a 'b -> 'c -> 'd = ?? 'a == 0 => error "some error" !!=> ('c := 'a
|
|||
(function_definition
|
||||
(simple_name_identifier)
|
||||
(block
|
||||
(empty_lines)
|
||||
(match
|
||||
(name_definition
|
||||
(simple_name_identifier))
|
||||
|
|
@ -510,6 +527,8 @@ result_func! 'a 'b -> 'c -> 'd = ?? 'a == 0 => error "some error" !!=> ('c := 'a
|
|||
(placeholder)
|
||||
(string_literal)))
|
||||
(empty_lines)
|
||||
(extra)
|
||||
(empty_lines)
|
||||
(match
|
||||
(name_definition
|
||||
(simple_name_identifier))
|
||||
|
|
@ -518,6 +537,7 @@ result_func! 'a 'b -> 'c -> 'd = ?? 'a == 0 => error "some error" !!=> ('c := 'a
|
|||
(simple_name_identifier)
|
||||
(simple_name_identifier)
|
||||
(simple_name_identifier))))
|
||||
(empty_lines)
|
||||
(name_expression
|
||||
(simple_name_identifier)
|
||||
(simple_name_identifier))
|
||||
|
|
@ -547,6 +567,8 @@ result_func! 'a 'b -> 'c -> 'd = ?? 'a == 0 => error "some error" !!=> ('c := 'a
|
|||
(annotation_identifier)
|
||||
(float_number_literal))))
|
||||
(empty_lines)
|
||||
(extra)
|
||||
(empty_lines)
|
||||
(match
|
||||
(suffix_expression
|
||||
(name_definition
|
||||
|
|
@ -557,13 +579,7 @@ result_func! 'a 'b -> 'c -> 'd = ?? 'a == 0 => error "some error" !!=> ('c := 'a
|
|||
(name_expression
|
||||
(simple_name_identifier))))
|
||||
(empty_lines)
|
||||
(match
|
||||
(suffix_expression
|
||||
(name_definition
|
||||
(simple_name_identifier)))
|
||||
(case
|
||||
(name_expression
|
||||
(simple_name_identifier))))
|
||||
(extra)
|
||||
(empty_lines)
|
||||
(match
|
||||
(suffix_expression
|
||||
|
|
@ -573,12 +589,28 @@ result_func! 'a 'b -> 'c -> 'd = ?? 'a == 0 => error "some error" !!=> ('c := 'a
|
|||
(name_expression
|
||||
(simple_name_identifier))))
|
||||
(empty_lines)
|
||||
(suffix_expression
|
||||
(simple_name_identifier))
|
||||
(extra)
|
||||
(empty_lines)
|
||||
(match
|
||||
(suffix_expression
|
||||
(name_definition
|
||||
(simple_name_identifier)))
|
||||
(case
|
||||
(name_expression
|
||||
(simple_name_identifier))))
|
||||
(empty_lines)
|
||||
(extra)
|
||||
(empty_lines)
|
||||
(suffix_expression
|
||||
(simple_name_identifier))
|
||||
(empty_lines)
|
||||
(extra)
|
||||
(empty_lines)
|
||||
(suffix_expression
|
||||
(simple_name_identifier))
|
||||
(empty_lines)
|
||||
(extra)
|
||||
(empty_lines)
|
||||
(match
|
||||
(name_definition
|
||||
(simple_name_identifier))
|
||||
|
|
@ -634,6 +666,8 @@ result_func! 'a 'b -> 'c -> 'd = ?? 'a == 0 => error "some error" !!=> ('c := 'a
|
|||
(number_literal)
|
||||
(number_literal))))
|
||||
(empty_lines)
|
||||
(extra)
|
||||
(empty_lines)
|
||||
(match
|
||||
(name_definition
|
||||
(simple_name_identifier))
|
||||
|
|
@ -645,11 +679,13 @@ result_func! 'a 'b -> 'c -> 'd = ?? 'a == 0 => error "some error" !!=> ('c := 'a
|
|||
(number_literal))
|
||||
(operator)
|
||||
(number_literal))))
|
||||
(empty_lines)
|
||||
(name_expression
|
||||
(simple_name_identifier)
|
||||
(tuple_access
|
||||
(simple_name_identifier)
|
||||
(number_literal)))))
|
||||
(number_literal)))
|
||||
(empty_lines)))
|
||||
(empty_lines)
|
||||
(function_definition
|
||||
(definition_info
|
||||
|
|
@ -668,29 +704,35 @@ result_func! 'a 'b -> 'c -> 'd = ?? 'a == 0 => error "some error" !!=> ('c := 'a
|
|||
(function_definition
|
||||
(simple_name_identifier)
|
||||
(block
|
||||
(empty_lines)
|
||||
(name_expression
|
||||
(simple_name_identifier)
|
||||
(simple_name_identifier)
|
||||
(simple_name_identifier)
|
||||
(simple_name_identifier))))
|
||||
(simple_name_identifier))
|
||||
(empty_lines)))
|
||||
(empty_lines)
|
||||
(function_definition
|
||||
(simple_name_identifier)
|
||||
(block
|
||||
(empty_lines)
|
||||
(name_expression
|
||||
(simple_name_identifier)
|
||||
(simple_name_identifier)
|
||||
(simple_name_identifier)
|
||||
(simple_name_identifier))))
|
||||
(simple_name_identifier))
|
||||
(empty_lines)))
|
||||
(empty_lines)
|
||||
(function_definition
|
||||
(simple_name_identifier)
|
||||
(block
|
||||
(empty_lines)
|
||||
(name_expression
|
||||
(simple_name_identifier)
|
||||
(simple_name_identifier)
|
||||
(simple_name_identifier)
|
||||
(simple_name_identifier))))
|
||||
(simple_name_identifier))
|
||||
(empty_lines)))
|
||||
(empty_lines)
|
||||
(type_definition
|
||||
(simple_type_identifier)
|
||||
|
|
@ -729,20 +771,24 @@ result_func! 'a 'b -> 'c -> 'd = ?? 'a == 0 => error "some error" !!=> ('c := 'a
|
|||
(type
|
||||
(argument_type_identifier)))
|
||||
(block
|
||||
(empty_lines)
|
||||
(match
|
||||
(name_expression
|
||||
(simple_name_identifier))
|
||||
(case
|
||||
(bool_literal)))
|
||||
(empty_lines)
|
||||
(loop
|
||||
(name_expression
|
||||
(simple_name_identifier))
|
||||
(block
|
||||
(empty_lines)
|
||||
(operator_expression
|
||||
(name_expression
|
||||
(simple_name_identifier))
|
||||
(operator)
|
||||
(bool_literal))
|
||||
(empty_lines)
|
||||
(loop
|
||||
(name_definition
|
||||
(simple_name_identifier))
|
||||
|
|
@ -784,7 +830,9 @@ result_func! 'a 'b -> 'c -> 'd = ?? 'a == 0 => error "some error" !!=> ('c := 'a
|
|||
(name_expression
|
||||
(simple_name_identifier))
|
||||
(operator)
|
||||
(bool_literal))))))))
|
||||
(bool_literal))))
|
||||
(empty_lines)))
|
||||
(empty_lines)))
|
||||
(empty_lines)
|
||||
(function_definition
|
||||
(definition_info
|
||||
|
|
@ -796,20 +844,24 @@ result_func! 'a 'b -> 'c -> 'd = ?? 'a == 0 => error "some error" !!=> ('c := 'a
|
|||
(type
|
||||
(argument_type_identifier)))
|
||||
(block
|
||||
(empty_lines)
|
||||
(match
|
||||
(name_definition
|
||||
(simple_name_identifier))
|
||||
(case
|
||||
(bool_literal)))
|
||||
(empty_lines)
|
||||
(loop
|
||||
(name_expression
|
||||
(simple_name_identifier))
|
||||
(block
|
||||
(empty_lines)
|
||||
(operator_expression
|
||||
(name_expression
|
||||
(simple_name_identifier))
|
||||
(operator)
|
||||
(bool_literal))
|
||||
(empty_lines)
|
||||
(loop
|
||||
(name_definition
|
||||
(simple_name_identifier))
|
||||
|
|
@ -851,7 +903,9 @@ result_func! 'a 'b -> 'c -> 'd = ?? 'a == 0 => error "some error" !!=> ('c := 'a
|
|||
(name_expression
|
||||
(simple_name_identifier))
|
||||
(operator)
|
||||
(bool_literal))))))))
|
||||
(bool_literal))))
|
||||
(empty_lines)))
|
||||
(empty_lines)))
|
||||
(empty_lines)
|
||||
(type_definition
|
||||
(definition_info
|
||||
|
|
@ -881,30 +935,41 @@ result_func! 'a 'b -> 'c -> 'd = ?? 'a == 0 => error "some error" !!=> ('c := 'a
|
|||
(type
|
||||
(argument_type_identifier))
|
||||
(type
|
||||
(argument_type_identifier)))))
|
||||
(function_definition
|
||||
(simple_name_identifier)
|
||||
(name_expression
|
||||
(simple_name_identifier)))
|
||||
(function_definition
|
||||
(simple_name_identifier)
|
||||
(argument_name_identifier)
|
||||
(name_expression
|
||||
(simple_name_identifier)))
|
||||
(function_definition
|
||||
(simple_name_identifier)
|
||||
(argument_name_identifier)
|
||||
(name_expression
|
||||
(simple_name_identifier)))
|
||||
(function_definition
|
||||
(simple_name_identifier)
|
||||
(argument_name_identifier)
|
||||
(name_expression
|
||||
(simple_name_identifier))))
|
||||
(argument_type_identifier))))))
|
||||
(empty_lines)
|
||||
(function_definition
|
||||
(simple_name_identifier)
|
||||
(name_expression
|
||||
(simple_name_identifier)))
|
||||
(extra)
|
||||
(empty_lines)
|
||||
(function_definition
|
||||
(simple_name_identifier)
|
||||
(argument_name_identifier)
|
||||
(argument_name_identifier)
|
||||
(name_expression
|
||||
(simple_name_identifier)))
|
||||
(extra)
|
||||
(empty_lines)
|
||||
(function_definition
|
||||
(simple_name_identifier)
|
||||
(argument_name_identifier)
|
||||
(argument_name_identifier)
|
||||
(name_expression
|
||||
(simple_name_identifier)))
|
||||
(empty_lines)
|
||||
(function_definition
|
||||
(simple_name_identifier)
|
||||
(argument_name_identifier)
|
||||
(argument_name_identifier)
|
||||
(name_expression
|
||||
(simple_name_identifier)))
|
||||
(extra)
|
||||
(empty_lines)
|
||||
(function_definition
|
||||
(simple_name_identifier)
|
||||
(block
|
||||
(empty_lines)
|
||||
(match
|
||||
(name_definition
|
||||
(simple_name_identifier))
|
||||
|
|
@ -917,6 +982,7 @@ result_func! 'a 'b -> 'c -> 'd = ?? 'a == 0 => error "some error" !!=> ('c := 'a
|
|||
(type
|
||||
(simple_type_identifier)))
|
||||
(simple_name_identifier))))
|
||||
(empty_lines)
|
||||
(match
|
||||
(name_definition
|
||||
(simple_name_identifier))
|
||||
|
|
@ -926,11 +992,13 @@ result_func! 'a 'b -> 'c -> 'd = ?? 'a == 0 => error "some error" !!=> ('c := 'a
|
|||
(simple_type_identifier)
|
||||
(type
|
||||
(simple_type_identifier)))
|
||||
(simple_name_identifier))))))
|
||||
(simple_name_identifier))))
|
||||
(empty_lines)))
|
||||
(empty_lines)
|
||||
(function_definition
|
||||
(simple_name_identifier)
|
||||
(block
|
||||
(empty_lines)
|
||||
(operator_expression
|
||||
(operator_expression
|
||||
(operator_expression
|
||||
|
|
@ -949,6 +1017,8 @@ result_func! 'a 'b -> 'c -> 'd = ?? 'a == 0 => error "some error" !!=> ('c := 'a
|
|||
(operator)
|
||||
(name_expression
|
||||
(simple_name_identifier)))
|
||||
(extra)
|
||||
(empty_lines)
|
||||
(operator_expression
|
||||
(operator_expression
|
||||
(operator_expression
|
||||
|
|
@ -966,11 +1036,14 @@ result_func! 'a 'b -> 'c -> 'd = ?? 'a == 0 => error "some error" !!=> ('c := 'a
|
|||
(simple_name_identifier)))
|
||||
(operator)
|
||||
(name_expression
|
||||
(simple_name_identifier)))))
|
||||
(simple_name_identifier)))
|
||||
(extra)
|
||||
(empty_lines)))
|
||||
(empty_lines)
|
||||
(function_definition
|
||||
(simple_name_identifier)
|
||||
(block
|
||||
(empty_lines)
|
||||
(match
|
||||
(name_definition
|
||||
(simple_name_identifier))
|
||||
|
|
@ -978,8 +1051,10 @@ result_func! 'a 'b -> 'c -> 'd = ?? 'a == 0 => error "some error" !!=> ('c := 'a
|
|||
(reference_expression
|
||||
(array_access
|
||||
(simple_name_identifier)
|
||||
(number_literal)))))))
|
||||
(number_literal)))))
|
||||
(empty_lines)))
|
||||
(empty_lines)
|
||||
(extra)
|
||||
(empty_lines)
|
||||
(function_definition
|
||||
(definition_info
|
||||
|
|
@ -1126,17 +1201,18 @@ result_func! 'a 'b -> 'c -> 'd = ?? 'a == 0 => error "some error" !!=> ('c := 'a
|
|||
(argument_name_identifier)
|
||||
(argument_name_identifier)))
|
||||
(empty_lines)
|
||||
(typeclass_definition
|
||||
(type_definition
|
||||
(definition_info
|
||||
(info))
|
||||
(typeclass_identifier)
|
||||
(typeclass_identifier)
|
||||
(function_definition
|
||||
(simple_name_identifier)
|
||||
(type
|
||||
(simple_type_identifier))
|
||||
(type
|
||||
(simple_type_identifier))))
|
||||
(typeclass_identifier))
|
||||
(empty_lines)
|
||||
(function_definition
|
||||
(simple_name_identifier)
|
||||
(type
|
||||
(simple_type_identifier))
|
||||
(type
|
||||
(simple_type_identifier)))
|
||||
(empty_lines)
|
||||
(function_definition
|
||||
(definition_info
|
||||
|
|
@ -1165,6 +1241,7 @@ result_func! 'a 'b -> 'c -> 'd = ?? 'a == 0 => error "some error" !!=> ('c := 'a
|
|||
(type
|
||||
(simple_type_identifier))
|
||||
(block
|
||||
(empty_lines)
|
||||
(match
|
||||
(name_definition
|
||||
(simple_name_identifier))
|
||||
|
|
@ -1173,6 +1250,7 @@ result_func! 'a 'b -> 'c -> 'd = ?? 'a == 0 => error "some error" !!=> ('c := 'a
|
|||
(type
|
||||
(simple_type_identifier))
|
||||
(simple_name_identifier))))
|
||||
(empty_lines)
|
||||
(match
|
||||
(suffix_expression
|
||||
(name_definition
|
||||
|
|
@ -1183,10 +1261,13 @@ result_func! 'a 'b -> 'c -> 'd = ?? 'a == 0 => error "some error" !!=> ('c := 'a
|
|||
(simple_type_identifier))
|
||||
(simple_name_identifier)
|
||||
(simple_name_identifier))))
|
||||
(empty_lines)
|
||||
(name_expression
|
||||
(simple_name_identifier))
|
||||
(empty_lines)
|
||||
(return
|
||||
(unit_literal))))
|
||||
(unit_literal))
|
||||
(empty_lines)))
|
||||
(empty_lines)
|
||||
(function_definition
|
||||
(definition_info
|
||||
|
|
@ -1243,4 +1324,5 @@ result_func! 'a 'b -> 'c -> 'd = ?? 'a == 0 => error "some error" !!=> ('c := 'a
|
|||
(case
|
||||
(name_expression
|
||||
(argument_name_identifier)))))
|
||||
(unit_literal)))))
|
||||
(unit_literal))))
|
||||
(empty_lines))
|
||||
|
|
|
|||
32
grammar.g4
32
grammar.g4
|
|
@ -9,7 +9,7 @@ statement: import
|
|||
| type_definition
|
||||
| function_definition
|
||||
| typeclass_definition
|
||||
| EMPTY_LINES
|
||||
| EXTRA
|
||||
;
|
||||
|
||||
import: ('::' | 'import') (SIMPLE_NAME_IDENTIFIER | '_') ('=' SIMPLE_NAME_IDENTIFIER)?
|
||||
|
|
@ -18,22 +18,20 @@ import: ('::' | 'import') (SIMPLE_NAME_IDENTIFIER | '_') ('=' SIMPLE_NAME_IDENTI
|
|||
|
||||
constraint: '?' expression ;
|
||||
|
||||
type_definition: (DEFINITION_INFO)? (ANNOTATION_INFO)* ('^')?
|
||||
SIMPLE_TYPE_IDENTIFIER ((ARGUMENT_TYPE_IDENTIFIER)* '=' variant_type)?
|
||||
(('{' function_definietion '}')|';')
|
||||
;
|
||||
|
||||
function_definition: (definietion_info)? (ANNOTATION_INFO)* (constraint ';')*
|
||||
(('%' | 'let') | ('$' | 'var'))? (SIMPLE_NAME_IDENTIFIER | ('(' OPERATOR ')'))
|
||||
((ANNOTATION_IDENTIFIER)? (REFERENCE)? ARGUMENT_NAME_IDENTIFIER ('?')?)*
|
||||
('.')? (SIMPLE_NAME_IDENTIFIER | ('(' OPERATOR ')')) ('?' | '!')
|
||||
(((ANNOTATION_IDENTIFIER)? (REFERENCE)? ARGUMENT_NAME_IDENTIFIER ('?' | '!')?)*)
|
||||
(':' ((ANNOTATION_IDENTIFIER)? (REFERENCE)? type)+)?
|
||||
(('=' ( /*prec 2*/ block | (super_expression ';'))) | ';')
|
||||
;
|
||||
|
||||
typeclass_definition: (DEFINITION_INFO)? (ANNOTATION_INFO)*
|
||||
TYPECLASS_IDENTIFIER (seq(':', (TYPECLASS_IDENTIFIER)+))?
|
||||
(('{' (function_definition)* '}') | ';')
|
||||
;
|
||||
type_definition: (DEFINITION_INFO)? (ANNOTATION_INFO)* ('^')?
|
||||
(SIMPLE_TYPE_IDENTIFIER | TYPECLASS_IDENTIFIER)
|
||||
('[' (TYPECLASS_IDENTIFIER)+ ']')?
|
||||
(ARGUMENT_TYPE_IDENTIFIER)*
|
||||
('=' variant_type)?
|
||||
';'
|
||||
;
|
||||
|
||||
case: (':=' | '=:') expression (('??' | 'if') expression)? (('=>' | 'do') expression)? ;
|
||||
|
||||
|
|
@ -57,7 +55,7 @@ operator_expression: /* prec left ?? */
|
|||
| /* prec 1 */ expression OPERATOR_TAIL3 expression
|
||||
;
|
||||
|
||||
block: '{' ((super_expression ';') | EMPTY_LINES)* '}' ;
|
||||
block: '{' ((super_expression ';') | EXTRA)* '}' ;
|
||||
|
||||
array: '[[' (scoped_expression)+ ']]' ;
|
||||
|
||||
|
|
@ -146,7 +144,13 @@ literal: FLOAT_NUMBER_LITERAL
|
|||
DEFINITION_INFO : : ': ' ([^\n]*)+ ;
|
||||
ANNOTATION_INFO : ANNOTATION_IDENTIFIER [^\n]* ;
|
||||
|
||||
EMPTY_LINES '\n' ('\n')+ ;
|
||||
EXTRA: EMPTY_LINES
|
||||
| LINE_COMMENT
|
||||
| LINE_COMMENT
|
||||
| BLOCK_COMMENT
|
||||
;
|
||||
|
||||
EMPTY_LINES : ('\n')+ ;
|
||||
|
||||
LINE_COMMENT : '#!' [^\n]* -> skip ;
|
||||
LINE_COMMENT : '//' [^\n]* -> skip ;
|
||||
|
|
|
|||
66
grammar.js
66
grammar.js
|
|
@ -4,10 +4,7 @@ module.exports = grammar({
|
|||
word: $ => $.identifier,
|
||||
|
||||
extras: $ => [
|
||||
$._exec_comment,
|
||||
$._line_comment,
|
||||
$._block_comment,
|
||||
/\s/
|
||||
/\s/,
|
||||
],
|
||||
|
||||
rules: {
|
||||
|
|
@ -20,7 +17,7 @@ module.exports = grammar({
|
|||
$.import,
|
||||
$.function_definition,
|
||||
$.type_definition,
|
||||
$.typeclass_definition,
|
||||
$.extra,
|
||||
$.empty_lines,
|
||||
),
|
||||
|
||||
|
|
@ -29,10 +26,10 @@ module.exports = grammar({
|
|||
field('name', choice($.simple_name_identifier, $.placeholder)),
|
||||
optional(seq('=', field('module', $.simple_name_identifier))),
|
||||
optional(seq(':', repeat1(choice(
|
||||
$.simple_type_identifier,
|
||||
$.simple_name_identifier,
|
||||
$.typeclass_identifier,
|
||||
seq('(',$.operator, ')'),
|
||||
$.simple_type_identifier,
|
||||
$.typeclass_identifier,
|
||||
)))),
|
||||
';',
|
||||
),
|
||||
|
|
@ -45,38 +42,36 @@ module.exports = grammar({
|
|||
optional($.definition_info),
|
||||
repeat($.annotation_info),
|
||||
repeat(seq($.constraint, ';')),
|
||||
optional($._var_let),
|
||||
optional('.'), // for methods
|
||||
choice(field('name', $.simple_name_identifier), seq('(', field('name', $.operator), ')')),
|
||||
optional($._optional_result),
|
||||
optional($._optional_or_result),
|
||||
repeat(seq(
|
||||
optional($.annotation_identifier),
|
||||
optional($._reference),
|
||||
$.argument_name_identifier,
|
||||
optional($._optional_result),
|
||||
optional($._optional_or_result),
|
||||
)),
|
||||
optional(seq(
|
||||
':',
|
||||
repeat1(seq(
|
||||
optional($.annotation_identifier),
|
||||
optional($._reference),
|
||||
$.type,
|
||||
)),
|
||||
)),
|
||||
optional(seq(':', repeat1(seq(
|
||||
optional($.annotation_identifier),
|
||||
optional($._reference),
|
||||
$.type,
|
||||
)))),
|
||||
choice(seq('=', choice(prec(2, choice($.block, $.array)), seq($._super_expression, ';'))), ';'),
|
||||
),
|
||||
|
||||
// datatype or typeclass definition
|
||||
type_definition: $ => seq(
|
||||
optional($.definition_info),
|
||||
repeat($.annotation_info),
|
||||
repeat($.annotation_info), // for datatypes only
|
||||
optional('^'),
|
||||
field('name', $.simple_type_identifier),
|
||||
optional(seq(repeat($.argument_type_identifier), '=', $.variant_type)),
|
||||
choice(seq('{', repeat($.function_definition), '}'), ';')
|
||||
),
|
||||
|
||||
typeclass_definition: $ => seq(
|
||||
optional($.definition_info),
|
||||
// no argumenmts => no annotation info
|
||||
field('name', $.typeclass_identifier),
|
||||
optional(seq(':', repeat1($.typeclass_identifier))),
|
||||
choice(seq('{', repeat($.function_definition), '}'), ';'),
|
||||
field('name', choice($.simple_type_identifier, $.typeclass_identifier)),
|
||||
optional(seq('[', repeat($.typeclass_identifier), ']')), // parametric typeclasses ??
|
||||
repeat($.argument_type_identifier), // for datatypes only
|
||||
optional(seq('=', $.variant_type)), // for datatypes only
|
||||
';',
|
||||
),
|
||||
|
||||
// --- flow control
|
||||
|
|
@ -130,7 +125,7 @@ module.exports = grammar({
|
|||
|
||||
// --- continers
|
||||
|
||||
block: $ => seq('{', repeat(choice(seq($._super_expression, ';'), $.empty_lines)), '}'),
|
||||
block: $ => seq('{', repeat(choice(seq($._super_expression, ';'), $.extra, $.empty_lines)), '}'),
|
||||
|
||||
array: $ => seq('[[', repeat1($._scoped_expression), ']]'),
|
||||
|
||||
|
|
@ -139,7 +134,7 @@ module.exports = grammar({
|
|||
return: $ => seq(choice('return', 'bring'), $._expression),
|
||||
|
||||
name_definition: $ => seq(
|
||||
$._var_let,
|
||||
choice(choice('%', 'let'), choice('$', 'var')),
|
||||
choice($.simple_name_identifier, $.placeholder),
|
||||
),
|
||||
|
||||
|
|
@ -151,7 +146,7 @@ module.exports = grammar({
|
|||
|
||||
reference_expression: $ => prec(-1, seq($._reference, $._scoped_expression)),
|
||||
|
||||
suffix_expression: $ => seq($._scoped_expression, $._optional_result),
|
||||
suffix_expression: $ => seq($._scoped_expression, $._optional_or_result),
|
||||
|
||||
// --- other
|
||||
|
||||
|
|
@ -234,7 +229,7 @@ module.exports = grammar({
|
|||
type: $ => seq(
|
||||
optional('^'),
|
||||
field('name', $._type_identifier),
|
||||
optional($._optional_result),
|
||||
optional($._optional_or_result),
|
||||
optional(seq('[', repeat1($.type), ']'))
|
||||
),
|
||||
|
||||
|
|
@ -245,7 +240,8 @@ module.exports = grammar({
|
|||
|
||||
info: $ => /[^\n]*/,
|
||||
|
||||
empty_lines: $ => /\n\n+/,
|
||||
extra: $ => choice($._exec_comment, $._line_comment, $._block_comment),
|
||||
empty_lines: $ => prec.left(repeat1('\n')),
|
||||
|
||||
_exec_comment: $ => token(seq('#!', /[^\n]*/)),
|
||||
_line_comment: $ => token(seq('//', /[^\n]*/)),
|
||||
|
|
@ -254,11 +250,7 @@ module.exports = grammar({
|
|||
// --- tokens
|
||||
|
||||
_do: $ => choice('=>', 'do'),
|
||||
_var_let: $ => choice(choice('%', 'let'), choice('$', 'var')),
|
||||
_optional_result: $ => choice('?', '!'),
|
||||
//_reference: $ => choice(choice('->', 'out'), choice('<-', 'in'), choice('<>', 'ref'), choice('|->', 'or_out'), choice('<-|', 'or_in')),
|
||||
|
||||
// _reference: $ => seq(optional(choice('->', 'out')), optional(choice('<>', 'ref')), optional(choice('--', 'const')), optional(choice('<-', 'in'))),
|
||||
_optional_or_result: $ => choice('?', '!'),
|
||||
|
||||
_reference: $ => choice(choice('<-', '<>', '--', '->',
|
||||
'<-|<>', '<-|--', '<>|->', '--|->', '<>|--', '<-|->',
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue