improvements for proper printing, etc.

This commit is contained in:
ProgramSnail 2023-07-31 22:06:30 +03:00
parent b71b732797
commit 8e0cea277e
4 changed files with 231 additions and 119 deletions

View file

@ -62,17 +62,21 @@ test_k 'n 'k : Int Int -> Bool = {
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
(source_file (source_file
(empty_lines)
(import (import
(simple_name_identifier)) (simple_name_identifier))
(empty_lines)
(import (import
(simple_name_identifier) (simple_name_identifier)
(simple_type_identifier)) (simple_type_identifier))
(empty_lines)
(import (import
(simple_name_identifier)) (simple_name_identifier))
(empty_lines) (empty_lines)
(function_definition (function_definition
(simple_name_identifier) (simple_name_identifier)
(block (block
(empty_lines)
(match (match
(name_definition (name_definition
(simple_name_identifier)) (simple_name_identifier))
@ -90,6 +94,7 @@ test_k 'n 'k : Int Int -> Bool = {
(number_literal))) (number_literal)))
(simple_name_identifier)) (simple_name_identifier))
(number_literal)))) (number_literal))))
(empty_lines)
(match (match
(name_definition (name_definition
(simple_name_identifier)) (simple_name_identifier))
@ -97,6 +102,7 @@ test_k 'n 'k : Int Int -> Bool = {
(name_expression (name_expression
(simple_name_identifier) (simple_name_identifier)
(number_literal)))) (number_literal))))
(empty_lines)
(match (match
(operator_expression (operator_expression
(name_definition (name_definition
@ -113,12 +119,14 @@ test_k 'n 'k : Int Int -> Bool = {
(simple_name_identifier)) (simple_name_identifier))
(operator) (operator)
(number_literal))))) (number_literal)))))
(empty_lines)
(operator_expression (operator_expression
(name_expression (name_expression
(simple_name_identifier)) (simple_name_identifier))
(operator) (operator)
(name_expression (name_expression
(simple_name_identifier))) (simple_name_identifier)))
(empty_lines)
(match (match
(name_definition (name_definition
(simple_name_identifier)) (simple_name_identifier))
@ -135,6 +143,7 @@ test_k 'n 'k : Int Int -> Bool = {
(simple_name_identifier)) (simple_name_identifier))
(operator) (operator)
(number_literal))))) (number_literal)))))
(empty_lines)
(match (match
(name_definition (name_definition
(simple_name_identifier)) (simple_name_identifier))
@ -149,12 +158,14 @@ test_k 'n 'k : Int Int -> Bool = {
(operator_tail1) (operator_tail1)
(name_expression (name_expression
(simple_name_identifier))))) (simple_name_identifier)))))
(empty_lines)
(match (match
(name_definition (name_definition
(simple_name_identifier)) (simple_name_identifier))
(case (case
(name_expression (name_expression
(simple_name_identifier)))) (simple_name_identifier))))
(empty_lines)
(loop (loop
(name_definition (name_definition
(simple_name_identifier)) (simple_name_identifier))
@ -178,6 +189,7 @@ test_k 'n 'k : Int Int -> Bool = {
(operator) (operator)
(number_literal))) (number_literal)))
(block (block
(empty_lines)
(condition (condition
(operator_expression (operator_expression
(operator_expression (operator_expression
@ -237,7 +249,9 @@ test_k 'n 'k : Int Int -> Bool = {
(string_literal)) (string_literal))
(operator) (operator)
(name_expression (name_expression
(simple_name_identifier))))))))) (simple_name_identifier)))))
(empty_lines)))
(empty_lines)))
(empty_lines) (empty_lines)
(function_definition (function_definition
(simple_name_identifier) (simple_name_identifier)
@ -252,6 +266,7 @@ test_k 'n 'k : Int Int -> Bool = {
(type (type
(simple_type_identifier)) (simple_type_identifier))
(block (block
(empty_lines)
(condition (condition
(operator_expression (operator_expression
(name_expression (name_expression
@ -289,6 +304,7 @@ test_k 'n 'k : Int Int -> Bool = {
(argument_name_identifier))) (argument_name_identifier)))
(operator_tail1) (operator_tail1)
(number_literal)))) (number_literal))))
(empty_lines)
(match (match
(operator_expression (operator_expression
(name_definition (name_definition
@ -301,6 +317,7 @@ test_k 'n 'k : Int Int -> Bool = {
(simple_name_identifier) (simple_name_identifier)
(argument_name_identifier) (argument_name_identifier)
(simple_name_identifier)))) (simple_name_identifier))))
(empty_lines)
(match (match
(operator_expression (operator_expression
(name_definition (name_definition
@ -332,7 +349,8 @@ test_k 'n 'k : Int Int -> Bool = {
(simple_name_identifier)) (simple_name_identifier))
(operator) (operator)
(name_expression (name_expression
(simple_name_identifier))))))) (simple_name_identifier)))))
(empty_lines)))
(empty_lines) (empty_lines)
(function_definition (function_definition
(simple_name_identifier) (simple_name_identifier)
@ -342,16 +360,19 @@ test_k 'n 'k : Int Int -> Bool = {
(type (type
(simple_type_identifier)) (simple_type_identifier))
(block (block
(empty_lines)
(match (match
(name_definition (name_definition
(simple_name_identifier)) (simple_name_identifier))
(case (case
(number_literal))) (number_literal)))
(empty_lines)
(match (match
(name_definition (name_definition
(simple_name_identifier)) (simple_name_identifier))
(case (case
(number_literal))) (number_literal)))
(empty_lines)
(loop (loop
(name_expression (name_expression
(simple_name_identifier) (simple_name_identifier)
@ -360,17 +381,21 @@ test_k 'n 'k : Int Int -> Bool = {
(argument_name_identifier) (argument_name_identifier)
(simple_name_identifier))) (simple_name_identifier)))
(block (block
(empty_lines)
(operator_expression (operator_expression
(name_expression (name_expression
(simple_name_identifier)) (simple_name_identifier))
(operator) (operator)
(name_expression (name_expression
(simple_name_identifier))) (simple_name_identifier)))
(empty_lines)
(operator_expression (operator_expression
(name_expression (name_expression
(simple_name_identifier)) (simple_name_identifier))
(operator) (operator)
(number_literal)))) (number_literal))
(empty_lines)))
(empty_lines)
(loop (loop
(operator_expression (operator_expression
(operator_expression (operator_expression
@ -382,6 +407,7 @@ test_k 'n 'k : Int Int -> Bool = {
(operator_tail1) (operator_tail1)
(number_literal)) (number_literal))
(block (block
(empty_lines)
(match (match
(name_definition (name_definition
(simple_name_identifier)) (simple_name_identifier))
@ -395,6 +421,7 @@ test_k 'n 'k : Int Int -> Bool = {
(simple_name_identifier))) (simple_name_identifier)))
(operator_tail1) (operator_tail1)
(number_literal)))) (number_literal))))
(empty_lines)
(condition (condition
(name_expression (name_expression
(simple_name_identifier) (simple_name_identifier)
@ -411,10 +438,13 @@ test_k 'n 'k : Int Int -> Bool = {
(simple_name_identifier)) (simple_name_identifier))
(operator) (operator)
(name_expression (name_expression
(simple_name_identifier)))))) (simple_name_identifier))))
(empty_lines)))
(empty_lines)
(return (return
(name_expression (name_expression
(simple_name_identifier))))) (simple_name_identifier)))
(empty_lines)))
(empty_lines) (empty_lines)
(function_definition (function_definition
(simple_name_identifier) (simple_name_identifier)
@ -427,6 +457,7 @@ test_k 'n 'k : Int Int -> Bool = {
(type (type
(simple_type_identifier)) (simple_type_identifier))
(block (block
(empty_lines)
(condition (condition
(operator_expression (operator_expression
(name_expression (name_expression
@ -458,6 +489,7 @@ test_k 'n 'k : Int Int -> Bool = {
(name_expression (name_expression
(simple_name_identifier) (simple_name_identifier)
(simple_name_identifier)))))) (simple_name_identifier))))))
(empty_lines)
(match (match
(name_definition (name_definition
(simple_name_identifier)) (simple_name_identifier))
@ -478,4 +510,6 @@ test_k 'n 'k : Int Int -> Bool = {
(name_expression (name_expression
(simple_name_identifier)) (simple_name_identifier))
(operator) (operator)
(number_literal))))))) (number_literal))))
(empty_lines)))
(empty_lines))

View file

@ -155,15 +155,16 @@ bubble_sort_2 'arr : ref Array['A] = {
& @key Key & @key Key
& @value Value & @value Value
& @left ^TreeNode['Key 'Value] & @left ^TreeNode['Key 'Value]
& @right ^TreeNode['Key 'Value] { & @right ^TreeNode['Key 'Value];
new = do_something; // static methods
$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 = { generic_type_name_expressions = {
$x := TreeNode[Int Int].new; $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; arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name 'duration;
: ord is fundamental typeclass : ord is fundamental typeclass
#Ord : #Eq { #Ord[#Eq];
$is_less_then : Ord -> Bool; .is_less_then : Ord -> Bool;
}
: function, that takes result argument : function, that takes result argument
result_example 'a! = 'a =: _? => print "value inside" 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 (source_file
(empty_lines)
(extra)
(empty_lines) (empty_lines)
(import (import
(simple_name_identifier)) (simple_name_identifier))
(extra)
(empty_lines) (empty_lines)
(import (import
(placeholder) (placeholder)
(simple_name_identifier)) (simple_name_identifier))
(extra)
(empty_lines) (empty_lines)
(import (import
(simple_name_identifier) (simple_name_identifier)
(simple_name_identifier) (simple_name_identifier)
(simple_name_identifier) (simple_name_identifier)
(simple_name_identifier)) (simple_name_identifier))
(empty_lines)
(import (import
(simple_name_identifier) (simple_name_identifier)
(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) (empty_lines)
(loop (loop
(block (block
(empty_lines)
(match (match
(name_definition (name_definition
(simple_name_identifier)) (simple_name_identifier))
(case (case
(name_expression (name_expression
(simple_name_identifier)))) (simple_name_identifier))))
(empty_lines)
(condition (condition
(operator_expression (operator_expression
(name_expression (name_expression
(simple_name_identifier)) (simple_name_identifier))
(operator) (operator)
(char_literal)) (char_literal))
(loop_control)))) (loop_control))
(empty_lines)))
(empty_lines) (empty_lines)
(loop (loop
(operator_expression (operator_expression
@ -273,9 +281,11 @@ result_func! 'a 'b -> 'c -> 'd = ?? 'a == 0 => error "some error" !!=> ('c := 'a
(operator) (operator)
(number_literal)) (number_literal))
(block (block
(empty_lines)
(name_expression (name_expression
(simple_name_identifier) (simple_name_identifier)
(simple_name_identifier)))) (simple_name_identifier))
(empty_lines)))
(empty_lines) (empty_lines)
(loop (loop
(name_definition (name_definition
@ -285,9 +295,11 @@ result_func! 'a 'b -> 'c -> 'd = ?? 'a == 0 => error "some error" !!=> ('c := 'a
(operator) (operator)
(number_literal)) (number_literal))
(block (block
(empty_lines)
(name_expression (name_expression
(simple_name_identifier) (simple_name_identifier)
(string_literal)))) (string_literal))
(empty_lines)))
(empty_lines) (empty_lines)
(condition (condition
(operator_expression (operator_expression
@ -325,16 +337,20 @@ result_func! 'a 'b -> 'c -> 'd = ?? 'a == 0 => error "some error" !!=> ('c := 'a
(operator) (operator)
(number_literal)) (number_literal))
(block (block
(empty_lines)
(operator_expression (operator_expression
(name_expression (name_expression
(simple_name_identifier)) (simple_name_identifier))
(operator) (operator)
(number_literal)) (number_literal))
(empty_lines)
(name_expression (name_expression
(simple_name_identifier) (simple_name_identifier)
(simple_name_identifier))) (simple_name_identifier))
(empty_lines))
(return (return
(unit_literal))))) (unit_literal)))
(empty_lines)))
(empty_lines) (empty_lines)
(function_definition (function_definition
(definition_info (definition_info
@ -436,6 +452,7 @@ result_func! 'a 'b -> 'c -> 'd = ?? 'a == 0 => error "some error" !!=> ('c := 'a
(function_definition (function_definition
(simple_name_identifier) (simple_name_identifier)
(block (block
(empty_lines)
(match (match
(name_definition (name_definition
(simple_name_identifier)) (simple_name_identifier))
@ -510,6 +527,8 @@ result_func! 'a 'b -> 'c -> 'd = ?? 'a == 0 => error "some error" !!=> ('c := 'a
(placeholder) (placeholder)
(string_literal))) (string_literal)))
(empty_lines) (empty_lines)
(extra)
(empty_lines)
(match (match
(name_definition (name_definition
(simple_name_identifier)) (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) (simple_name_identifier)
(simple_name_identifier)))) (simple_name_identifier))))
(empty_lines)
(name_expression (name_expression
(simple_name_identifier) (simple_name_identifier)
(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) (annotation_identifier)
(float_number_literal)))) (float_number_literal))))
(empty_lines) (empty_lines)
(extra)
(empty_lines)
(match (match
(suffix_expression (suffix_expression
(name_definition (name_definition
@ -557,13 +579,7 @@ result_func! 'a 'b -> 'c -> 'd = ?? 'a == 0 => error "some error" !!=> ('c := 'a
(name_expression (name_expression
(simple_name_identifier)))) (simple_name_identifier))))
(empty_lines) (empty_lines)
(match (extra)
(suffix_expression
(name_definition
(simple_name_identifier)))
(case
(name_expression
(simple_name_identifier))))
(empty_lines) (empty_lines)
(match (match
(suffix_expression (suffix_expression
@ -573,12 +589,28 @@ result_func! 'a 'b -> 'c -> 'd = ?? 'a == 0 => error "some error" !!=> ('c := 'a
(name_expression (name_expression
(simple_name_identifier)))) (simple_name_identifier))))
(empty_lines) (empty_lines)
(suffix_expression (extra)
(simple_name_identifier)) (empty_lines)
(match
(suffix_expression
(name_definition
(simple_name_identifier)))
(case
(name_expression
(simple_name_identifier))))
(empty_lines)
(extra)
(empty_lines) (empty_lines)
(suffix_expression (suffix_expression
(simple_name_identifier)) (simple_name_identifier))
(empty_lines) (empty_lines)
(extra)
(empty_lines)
(suffix_expression
(simple_name_identifier))
(empty_lines)
(extra)
(empty_lines)
(match (match
(name_definition (name_definition
(simple_name_identifier)) (simple_name_identifier))
@ -634,6 +666,8 @@ result_func! 'a 'b -> 'c -> 'd = ?? 'a == 0 => error "some error" !!=> ('c := 'a
(number_literal) (number_literal)
(number_literal)))) (number_literal))))
(empty_lines) (empty_lines)
(extra)
(empty_lines)
(match (match
(name_definition (name_definition
(simple_name_identifier)) (simple_name_identifier))
@ -645,11 +679,13 @@ result_func! 'a 'b -> 'c -> 'd = ?? 'a == 0 => error "some error" !!=> ('c := 'a
(number_literal)) (number_literal))
(operator) (operator)
(number_literal)))) (number_literal))))
(empty_lines)
(name_expression (name_expression
(simple_name_identifier) (simple_name_identifier)
(tuple_access (tuple_access
(simple_name_identifier) (simple_name_identifier)
(number_literal))))) (number_literal)))
(empty_lines)))
(empty_lines) (empty_lines)
(function_definition (function_definition
(definition_info (definition_info
@ -668,29 +704,35 @@ result_func! 'a 'b -> 'c -> 'd = ?? 'a == 0 => error "some error" !!=> ('c := 'a
(function_definition (function_definition
(simple_name_identifier) (simple_name_identifier)
(block (block
(empty_lines)
(name_expression (name_expression
(simple_name_identifier) (simple_name_identifier)
(simple_name_identifier) (simple_name_identifier)
(simple_name_identifier) (simple_name_identifier)
(simple_name_identifier)))) (simple_name_identifier))
(empty_lines)))
(empty_lines) (empty_lines)
(function_definition (function_definition
(simple_name_identifier) (simple_name_identifier)
(block (block
(empty_lines)
(name_expression (name_expression
(simple_name_identifier) (simple_name_identifier)
(simple_name_identifier) (simple_name_identifier)
(simple_name_identifier) (simple_name_identifier)
(simple_name_identifier)))) (simple_name_identifier))
(empty_lines)))
(empty_lines) (empty_lines)
(function_definition (function_definition
(simple_name_identifier) (simple_name_identifier)
(block (block
(empty_lines)
(name_expression (name_expression
(simple_name_identifier) (simple_name_identifier)
(simple_name_identifier) (simple_name_identifier)
(simple_name_identifier) (simple_name_identifier)
(simple_name_identifier)))) (simple_name_identifier))
(empty_lines)))
(empty_lines) (empty_lines)
(type_definition (type_definition
(simple_type_identifier) (simple_type_identifier)
@ -729,20 +771,24 @@ result_func! 'a 'b -> 'c -> 'd = ?? 'a == 0 => error "some error" !!=> ('c := 'a
(type (type
(argument_type_identifier))) (argument_type_identifier)))
(block (block
(empty_lines)
(match (match
(name_expression (name_expression
(simple_name_identifier)) (simple_name_identifier))
(case (case
(bool_literal))) (bool_literal)))
(empty_lines)
(loop (loop
(name_expression (name_expression
(simple_name_identifier)) (simple_name_identifier))
(block (block
(empty_lines)
(operator_expression (operator_expression
(name_expression (name_expression
(simple_name_identifier)) (simple_name_identifier))
(operator) (operator)
(bool_literal)) (bool_literal))
(empty_lines)
(loop (loop
(name_definition (name_definition
(simple_name_identifier)) (simple_name_identifier))
@ -784,7 +830,9 @@ result_func! 'a 'b -> 'c -> 'd = ?? 'a == 0 => error "some error" !!=> ('c := 'a
(name_expression (name_expression
(simple_name_identifier)) (simple_name_identifier))
(operator) (operator)
(bool_literal)))))))) (bool_literal))))
(empty_lines)))
(empty_lines)))
(empty_lines) (empty_lines)
(function_definition (function_definition
(definition_info (definition_info
@ -796,20 +844,24 @@ result_func! 'a 'b -> 'c -> 'd = ?? 'a == 0 => error "some error" !!=> ('c := 'a
(type (type
(argument_type_identifier))) (argument_type_identifier)))
(block (block
(empty_lines)
(match (match
(name_definition (name_definition
(simple_name_identifier)) (simple_name_identifier))
(case (case
(bool_literal))) (bool_literal)))
(empty_lines)
(loop (loop
(name_expression (name_expression
(simple_name_identifier)) (simple_name_identifier))
(block (block
(empty_lines)
(operator_expression (operator_expression
(name_expression (name_expression
(simple_name_identifier)) (simple_name_identifier))
(operator) (operator)
(bool_literal)) (bool_literal))
(empty_lines)
(loop (loop
(name_definition (name_definition
(simple_name_identifier)) (simple_name_identifier))
@ -851,7 +903,9 @@ result_func! 'a 'b -> 'c -> 'd = ?? 'a == 0 => error "some error" !!=> ('c := 'a
(name_expression (name_expression
(simple_name_identifier)) (simple_name_identifier))
(operator) (operator)
(bool_literal)))))))) (bool_literal))))
(empty_lines)))
(empty_lines)))
(empty_lines) (empty_lines)
(type_definition (type_definition
(definition_info (definition_info
@ -881,30 +935,41 @@ result_func! 'a 'b -> 'c -> 'd = ?? 'a == 0 => error "some error" !!=> ('c := 'a
(type (type
(argument_type_identifier)) (argument_type_identifier))
(type (type
(argument_type_identifier))))) (argument_type_identifier))))))
(function_definition (empty_lines)
(simple_name_identifier) (function_definition
(name_expression (simple_name_identifier)
(simple_name_identifier))) (name_expression
(function_definition (simple_name_identifier)))
(simple_name_identifier) (extra)
(argument_name_identifier) (empty_lines)
(name_expression (function_definition
(simple_name_identifier))) (simple_name_identifier)
(function_definition (argument_name_identifier)
(simple_name_identifier) (argument_name_identifier)
(argument_name_identifier) (name_expression
(name_expression (simple_name_identifier)))
(simple_name_identifier))) (extra)
(function_definition (empty_lines)
(simple_name_identifier) (function_definition
(argument_name_identifier) (simple_name_identifier)
(name_expression (argument_name_identifier)
(simple_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) (empty_lines)
(function_definition (function_definition
(simple_name_identifier) (simple_name_identifier)
(block (block
(empty_lines)
(match (match
(name_definition (name_definition
(simple_name_identifier)) (simple_name_identifier))
@ -917,6 +982,7 @@ result_func! 'a 'b -> 'c -> 'd = ?? 'a == 0 => error "some error" !!=> ('c := 'a
(type (type
(simple_type_identifier))) (simple_type_identifier)))
(simple_name_identifier)))) (simple_name_identifier))))
(empty_lines)
(match (match
(name_definition (name_definition
(simple_name_identifier)) (simple_name_identifier))
@ -926,11 +992,13 @@ result_func! 'a 'b -> 'c -> 'd = ?? 'a == 0 => error "some error" !!=> ('c := 'a
(simple_type_identifier) (simple_type_identifier)
(type (type
(simple_type_identifier))) (simple_type_identifier)))
(simple_name_identifier)))))) (simple_name_identifier))))
(empty_lines)))
(empty_lines) (empty_lines)
(function_definition (function_definition
(simple_name_identifier) (simple_name_identifier)
(block (block
(empty_lines)
(operator_expression (operator_expression
(operator_expression (operator_expression
(operator_expression (operator_expression
@ -949,6 +1017,8 @@ result_func! 'a 'b -> 'c -> 'd = ?? 'a == 0 => error "some error" !!=> ('c := 'a
(operator) (operator)
(name_expression (name_expression
(simple_name_identifier))) (simple_name_identifier)))
(extra)
(empty_lines)
(operator_expression (operator_expression
(operator_expression (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))) (simple_name_identifier)))
(operator) (operator)
(name_expression (name_expression
(simple_name_identifier))))) (simple_name_identifier)))
(extra)
(empty_lines)))
(empty_lines) (empty_lines)
(function_definition (function_definition
(simple_name_identifier) (simple_name_identifier)
(block (block
(empty_lines)
(match (match
(name_definition (name_definition
(simple_name_identifier)) (simple_name_identifier))
@ -978,8 +1051,10 @@ result_func! 'a 'b -> 'c -> 'd = ?? 'a == 0 => error "some error" !!=> ('c := 'a
(reference_expression (reference_expression
(array_access (array_access
(simple_name_identifier) (simple_name_identifier)
(number_literal))))))) (number_literal)))))
(empty_lines)))
(empty_lines) (empty_lines)
(extra)
(empty_lines) (empty_lines)
(function_definition (function_definition
(definition_info (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)
(argument_name_identifier))) (argument_name_identifier)))
(empty_lines) (empty_lines)
(typeclass_definition (type_definition
(definition_info (definition_info
(info)) (info))
(typeclass_identifier) (typeclass_identifier)
(typeclass_identifier) (typeclass_identifier))
(function_definition (empty_lines)
(simple_name_identifier) (function_definition
(type (simple_name_identifier)
(simple_type_identifier)) (type
(type (simple_type_identifier))
(simple_type_identifier)))) (type
(simple_type_identifier)))
(empty_lines) (empty_lines)
(function_definition (function_definition
(definition_info (definition_info
@ -1165,6 +1241,7 @@ result_func! 'a 'b -> 'c -> 'd = ?? 'a == 0 => error "some error" !!=> ('c := 'a
(type (type
(simple_type_identifier)) (simple_type_identifier))
(block (block
(empty_lines)
(match (match
(name_definition (name_definition
(simple_name_identifier)) (simple_name_identifier))
@ -1173,6 +1250,7 @@ result_func! 'a 'b -> 'c -> 'd = ?? 'a == 0 => error "some error" !!=> ('c := 'a
(type (type
(simple_type_identifier)) (simple_type_identifier))
(simple_name_identifier)))) (simple_name_identifier))))
(empty_lines)
(match (match
(suffix_expression (suffix_expression
(name_definition (name_definition
@ -1183,10 +1261,13 @@ result_func! 'a 'b -> 'c -> 'd = ?? 'a == 0 => error "some error" !!=> ('c := 'a
(simple_type_identifier)) (simple_type_identifier))
(simple_name_identifier) (simple_name_identifier)
(simple_name_identifier)))) (simple_name_identifier))))
(empty_lines)
(name_expression (name_expression
(simple_name_identifier)) (simple_name_identifier))
(empty_lines)
(return (return
(unit_literal)))) (unit_literal))
(empty_lines)))
(empty_lines) (empty_lines)
(function_definition (function_definition
(definition_info (definition_info
@ -1243,4 +1324,5 @@ result_func! 'a 'b -> 'c -> 'd = ?? 'a == 0 => error "some error" !!=> ('c := 'a
(case (case
(name_expression (name_expression
(argument_name_identifier))))) (argument_name_identifier)))))
(unit_literal))))) (unit_literal))))
(empty_lines))

View file

@ -9,7 +9,7 @@ statement: import
| type_definition | type_definition
| function_definition | function_definition
| typeclass_definition | typeclass_definition
| EMPTY_LINES | EXTRA
; ;
import: ('::' | 'import') (SIMPLE_NAME_IDENTIFIER | '_') ('=' SIMPLE_NAME_IDENTIFIER)? import: ('::' | 'import') (SIMPLE_NAME_IDENTIFIER | '_') ('=' SIMPLE_NAME_IDENTIFIER)?
@ -18,22 +18,20 @@ import: ('::' | 'import') (SIMPLE_NAME_IDENTIFIER | '_') ('=' SIMPLE_NAME_IDENTI
constraint: '?' expression ; 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 ';')* function_definition: (definietion_info)? (ANNOTATION_INFO)* (constraint ';')*
(('%' | 'let') | ('$' | 'var'))? (SIMPLE_NAME_IDENTIFIER | ('(' OPERATOR ')')) ('.')? (SIMPLE_NAME_IDENTIFIER | ('(' OPERATOR ')')) ('?' | '!')
((ANNOTATION_IDENTIFIER)? (REFERENCE)? ARGUMENT_NAME_IDENTIFIER ('?')?)* (((ANNOTATION_IDENTIFIER)? (REFERENCE)? ARGUMENT_NAME_IDENTIFIER ('?' | '!')?)*)
(':' ((ANNOTATION_IDENTIFIER)? (REFERENCE)? type)+)? (':' ((ANNOTATION_IDENTIFIER)? (REFERENCE)? type)+)?
(('=' ( /*prec 2*/ block | (super_expression ';'))) | ';') (('=' ( /*prec 2*/ block | (super_expression ';'))) | ';')
; ;
typeclass_definition: (DEFINITION_INFO)? (ANNOTATION_INFO)* type_definition: (DEFINITION_INFO)? (ANNOTATION_INFO)* ('^')?
TYPECLASS_IDENTIFIER (seq(':', (TYPECLASS_IDENTIFIER)+))? (SIMPLE_TYPE_IDENTIFIER | TYPECLASS_IDENTIFIER)
(('{' (function_definition)* '}') | ';') ('[' (TYPECLASS_IDENTIFIER)+ ']')?
; (ARGUMENT_TYPE_IDENTIFIER)*
('=' variant_type)?
';'
;
case: (':=' | '=:') expression (('??' | 'if') expression)? (('=>' | 'do') expression)? ; case: (':=' | '=:') expression (('??' | 'if') expression)? (('=>' | 'do') expression)? ;
@ -57,7 +55,7 @@ operator_expression: /* prec left ?? */
| /* prec 1 */ expression OPERATOR_TAIL3 expression | /* prec 1 */ expression OPERATOR_TAIL3 expression
; ;
block: '{' ((super_expression ';') | EMPTY_LINES)* '}' ; block: '{' ((super_expression ';') | EXTRA)* '}' ;
array: '[[' (scoped_expression)+ ']]' ; array: '[[' (scoped_expression)+ ']]' ;
@ -146,7 +144,13 @@ literal: FLOAT_NUMBER_LITERAL
DEFINITION_INFO : : ': ' ([^\n]*)+ ; DEFINITION_INFO : : ': ' ([^\n]*)+ ;
ANNOTATION_INFO : ANNOTATION_IDENTIFIER [^\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 ;
LINE_COMMENT : '//' [^\n]* -> skip ; LINE_COMMENT : '//' [^\n]* -> skip ;

View file

@ -4,10 +4,7 @@ module.exports = grammar({
word: $ => $.identifier, word: $ => $.identifier,
extras: $ => [ extras: $ => [
$._exec_comment, /\s/,
$._line_comment,
$._block_comment,
/\s/
], ],
rules: { rules: {
@ -20,7 +17,7 @@ module.exports = grammar({
$.import, $.import,
$.function_definition, $.function_definition,
$.type_definition, $.type_definition,
$.typeclass_definition, $.extra,
$.empty_lines, $.empty_lines,
), ),
@ -29,10 +26,10 @@ module.exports = grammar({
field('name', choice($.simple_name_identifier, $.placeholder)), field('name', choice($.simple_name_identifier, $.placeholder)),
optional(seq('=', field('module', $.simple_name_identifier))), optional(seq('=', field('module', $.simple_name_identifier))),
optional(seq(':', repeat1(choice( optional(seq(':', repeat1(choice(
$.simple_type_identifier,
$.simple_name_identifier, $.simple_name_identifier,
$.typeclass_identifier,
seq('(',$.operator, ')'), seq('(',$.operator, ')'),
$.simple_type_identifier,
$.typeclass_identifier,
)))), )))),
';', ';',
), ),
@ -45,38 +42,36 @@ module.exports = grammar({
optional($.definition_info), optional($.definition_info),
repeat($.annotation_info), repeat($.annotation_info),
repeat(seq($.constraint, ';')), repeat(seq($.constraint, ';')),
optional($._var_let), optional('.'), // for methods
choice(field('name', $.simple_name_identifier), seq('(', field('name', $.operator), ')')), choice(field('name', $.simple_name_identifier), seq('(', field('name', $.operator), ')')),
optional($._optional_result), optional($._optional_or_result),
repeat(seq( repeat(seq(
optional($.annotation_identifier), optional($.annotation_identifier),
optional($._reference), optional($._reference),
$.argument_name_identifier, $.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, ';'))), ';'), choice(seq('=', choice(prec(2, choice($.block, $.array)), seq($._super_expression, ';'))), ';'),
), ),
// datatype or typeclass definition
type_definition: $ => seq( type_definition: $ => seq(
optional($.definition_info), optional($.definition_info),
repeat($.annotation_info), repeat($.annotation_info), // for datatypes only
optional('^'), optional('^'),
field('name', $.simple_type_identifier), field('name', choice($.simple_type_identifier, $.typeclass_identifier)),
optional(seq(repeat($.argument_type_identifier), '=', $.variant_type)), optional(seq('[', repeat($.typeclass_identifier), ']')), // parametric typeclasses ??
choice(seq('{', repeat($.function_definition), '}'), ';') repeat($.argument_type_identifier), // for datatypes only
), optional(seq('=', $.variant_type)), // for datatypes only
';',
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), '}'), ';'),
), ),
// --- flow control // --- flow control
@ -130,7 +125,7 @@ module.exports = grammar({
// --- continers // --- 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), ']]'), array: $ => seq('[[', repeat1($._scoped_expression), ']]'),
@ -139,7 +134,7 @@ module.exports = grammar({
return: $ => seq(choice('return', 'bring'), $._expression), return: $ => seq(choice('return', 'bring'), $._expression),
name_definition: $ => seq( name_definition: $ => seq(
$._var_let, choice(choice('%', 'let'), choice('$', 'var')),
choice($.simple_name_identifier, $.placeholder), choice($.simple_name_identifier, $.placeholder),
), ),
@ -151,7 +146,7 @@ module.exports = grammar({
reference_expression: $ => prec(-1, seq($._reference, $._scoped_expression)), reference_expression: $ => prec(-1, seq($._reference, $._scoped_expression)),
suffix_expression: $ => seq($._scoped_expression, $._optional_result), suffix_expression: $ => seq($._scoped_expression, $._optional_or_result),
// --- other // --- other
@ -234,7 +229,7 @@ module.exports = grammar({
type: $ => seq( type: $ => seq(
optional('^'), optional('^'),
field('name', $._type_identifier), field('name', $._type_identifier),
optional($._optional_result), optional($._optional_or_result),
optional(seq('[', repeat1($.type), ']')) optional(seq('[', repeat1($.type), ']'))
), ),
@ -245,7 +240,8 @@ module.exports = grammar({
info: $ => /[^\n]*/, 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]*/)), _exec_comment: $ => token(seq('#!', /[^\n]*/)),
_line_comment: $ => token(seq('//', /[^\n]*/)), _line_comment: $ => token(seq('//', /[^\n]*/)),
@ -254,11 +250,7 @@ module.exports = grammar({
// --- tokens // --- tokens
_do: $ => choice('=>', 'do'), _do: $ => choice('=>', 'do'),
_var_let: $ => choice(choice('%', 'let'), choice('$', 'var')), _optional_or_result: $ => choice('?', '!'),
_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'))),
_reference: $ => choice(choice('<-', '<>', '--', '->', _reference: $ => choice(choice('<-', '<>', '--', '->',
'<-|<>', '<-|--', '<>|->', '--|->', '<>|--', '<-|->', '<-|<>', '<-|--', '<>|->', '--|->', '<>|--', '<-|->',