minor fixes

This commit is contained in:
ProgramSnail 2023-07-17 23:14:39 +03:00
parent d218e02a78
commit befa2f0395
4 changed files with 1069 additions and 1064 deletions

View file

@ -62,17 +62,13 @@ test_k 'n 'k : Int Int -> Bool = {
--------------------------------------------------------------------------------
(source_file
(statement
(import
(simple_name_identifier)))
(statement
(simple_name_identifier))
(import
(simple_name_identifier)
(simple_type_identifier)))
(statement
(simple_type_identifier))
(import
(simple_name_identifier)))
(statement
(simple_name_identifier))
(function_definition
(simple_name_identifier)
(block
@ -240,8 +236,7 @@ test_k 'n 'k : Int Int -> Bool = {
(string_literal))
(operator)
(name_expression
(simple_name_identifier))))))))))
(statement
(simple_name_identifier)))))))))
(function_definition
(simple_name_identifier)
(argument_name_identifier)
@ -333,8 +328,7 @@ test_k 'n 'k : Int Int -> Bool = {
(simple_name_identifier))
(operator)
(name_expression
(simple_name_identifier))))))))
(statement
(simple_name_identifier)))))))
(function_definition
(simple_name_identifier)
(argument_name_identifier)
@ -415,8 +409,7 @@ test_k 'n 'k : Int Int -> Bool = {
(simple_name_identifier))))))
(return
(name_expression
(simple_name_identifier))))))
(statement
(simple_name_identifier)))))
(function_definition
(simple_name_identifier)
(argument_name_identifier)
@ -477,4 +470,4 @@ test_k 'n 'k : Int Int -> Bool = {
(name_expression
(simple_name_identifier))
(operator)
(number_literal))))))))
(number_literal)))))))

View file

@ -31,6 +31,13 @@ func = {
} !!-> return ();
}
: example of function with optional arguments (without type annotation)
: real type is 'A? 'A? -> 'A?
sum 'a? 'b? =
'a & 'b =: %a? & %b? -> a + b
=: _ -> null;
: example that shows that default annotations are argument names (without ')
@a is integer
@b also integer
@ -194,23 +201,18 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
--------------------------------------------------------------------------------
(source_file
(statement
(import
(simple_name_identifier)))
(statement
(simple_name_identifier))
(import
(simple_name_identifier)))
(statement
(simple_name_identifier))
(import
(simple_name_identifier)
(simple_name_identifier)
(simple_name_identifier)
(simple_name_identifier)))
(statement
(simple_name_identifier))
(import
(simple_name_identifier)
(simple_name_identifier)))
(statement
(simple_name_identifier))
(function_definition
(simple_name_identifier)
(block
@ -295,8 +297,37 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
(simple_name_identifier)
(simple_name_identifier)))
(return
(unit_literal))))))
(statement
(unit_literal)))))
(function_definition
(definition_info)
(simple_name_identifier)
(argument_name_identifier)
(argument_name_identifier)
(match
(operator_expression
(name_expression
(argument_name_identifier))
(operator)
(name_expression
(argument_name_identifier)))
(case
(operator_expression
(suffix_expression
(name_definition
(simple_name_identifier)))
(operator)
(suffix_expression
(name_definition
(simple_name_identifier))))
(operator_expression
(name_expression
(simple_name_identifier))
(operator)
(name_expression
(simple_name_identifier))))
(case
(placeholder)
(null_literal))))
(function_definition
(definition_info)
(annotation_info
@ -311,8 +342,7 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
(argument_name_identifier))
(operator)
(name_expression
(argument_name_identifier)))))
(statement
(argument_name_identifier))))
(function_definition
(definition_info)
(annotation_info
@ -352,8 +382,7 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
(operator)
(name_expression
(simple_name_identifier)
(argument_name_identifier)))))))
(statement
(argument_name_identifier))))))
(function_definition
(simple_name_identifier)
(block
@ -530,8 +559,7 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
(name_expression
(operator)
(number_literal)
(number_literal)))))))
(statement
(number_literal))))))
(function_definition
(simple_name_identifier)
(block
@ -539,8 +567,7 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
(simple_name_identifier)
(simple_name_identifier)
(simple_name_identifier)
(simple_name_identifier)))))
(statement
(simple_name_identifier))))
(function_definition
(simple_name_identifier)
(block
@ -548,8 +575,7 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
(simple_name_identifier)
(simple_name_identifier)
(simple_name_identifier)
(simple_name_identifier)))))
(statement
(simple_name_identifier))))
(function_definition
(simple_name_identifier)
(block
@ -557,8 +583,7 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
(simple_name_identifier)
(simple_name_identifier)
(simple_name_identifier)
(simple_name_identifier)))))
(statement
(simple_name_identifier))))
(type_definition
(simple_type_identifier)
(tuple_type
@ -567,8 +592,7 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
(simple_type_identifier))
(annotation_identifier)
(type
(simple_type_identifier)))))
(statement
(simple_type_identifier))))
(type_definition
(simple_type_identifier)
(variant_type
@ -583,8 +607,7 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
(tuple_type
(annotation_identifier)
(type
(simple_type_identifier))))))
(statement
(simple_type_identifier)))))
(function_definition
(definition_info)
(simple_name_identifier)
@ -649,8 +672,7 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
(name_expression
(simple_name_identifier))
(operator)
(bool_literal)))))))))
(statement
(bool_literal))))))))
(function_definition
(definition_info)
(simple_name_identifier)
@ -715,8 +737,7 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
(name_expression
(simple_name_identifier))
(operator)
(bool_literal)))))))))
(statement
(bool_literal))))))))
(function_definition
(simple_name_identifier)
(argument_name_identifier)
@ -724,8 +745,7 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
(simple_type_identifier)
(type
(argument_type_identifier)))
(block)))
(statement
(block))
(type_definition
(definition_info)
(simple_type_identifier)
@ -751,8 +771,7 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
(type
(argument_type_identifier))
(type
(argument_type_identifier))))))
(statement
(argument_type_identifier)))))
(type_definition
(simple_type_identifier)
(function_definition
@ -773,8 +792,7 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
(simple_name_identifier)
(argument_name_identifier)
(name_expression
(simple_name_identifier)))))
(statement
(simple_name_identifier))))
(function_definition
(simple_name_identifier)
(block
@ -799,8 +817,7 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
(simple_type_identifier)
(type
(simple_type_identifier)))
(simple_name_identifier)))))))
(statement
(simple_name_identifier))))))
(function_definition
(simple_name_identifier)
(block
@ -839,8 +856,7 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
(simple_name_identifier)))
(operator)
(name_expression
(simple_name_identifier))))))
(statement
(simple_name_identifier)))))
(function_definition
(simple_name_identifier)
(block
@ -851,8 +867,7 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
(reference
(access
(simple_name_identifier)
(number_literal))))))))
(statement
(number_literal)))))))
(function_definition
(definition_info)
(simple_name_identifier)
@ -864,8 +879,7 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
(argument_name_identifier))
(name_expression
(simple_name_identifier)
(argument_name_identifier)))))
(statement
(argument_name_identifier))))
(function_definition
(definition_info)
(simple_name_identifier)
@ -894,8 +908,7 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
(argument_name_identifier))
(case
(reference
(simple_name_identifier)))))))
(statement
(simple_name_identifier))))))
(function_definition
(definition_info)
(simple_name_identifier)
@ -914,8 +927,7 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
(simple_name_identifier)))
(operator)
(name_expression
(simple_name_identifier)))))
(statement
(simple_name_identifier))))
(function_definition
(definition_info)
(simple_name_identifier)
@ -927,8 +939,7 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
(argument_name_identifier))
(case
(name_expression
(simple_name_identifier))))))
(statement
(simple_name_identifier)))))
(function_definition
(definition_info)
(simple_name_identifier)
@ -946,8 +957,7 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
(annotation_identifier)
(argument_name_identifier)
(annotation_identifier)
(argument_name_identifier))))
(statement
(argument_name_identifier)))
(function_definition
(definition_info)
(simple_name_identifier)
@ -963,8 +973,7 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
(type
(simple_type_identifier))
(argument_name_identifier)
(argument_name_identifier))))
(statement
(argument_name_identifier)))
(typeclass_definition
(definition_info)
(typeclass_identifier)
@ -974,4 +983,4 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
(type
(simple_type_identifier))
(type
(simple_type_identifier))))))
(simple_type_identifier)))))

View file

@ -24,7 +24,7 @@ type_definition: (DEFINITION_INFO)? (ANNOTATION_INFO)* ('^')?
function_definition: (definietion_info)? (ANNOTATION_INFO)* (constraint ';')*
(('%' | 'let') | ('$' | 'var'))? SIMPLE_NAME_IDENTIFIER
((ANNOTATION_IDENTIFIER)? ARGUMENT_NAME_IDENTIFIER)*
((ANNOTATION_IDENTIFIER)? ARGUMENT_NAME_IDENTIFIER ('?')?)*
(':' ((ANNOTATION_IDENTIFIER)? ('->' | 'in') | ('<-' | 'out') | ('<>' | 'ref'))? type)+)?
(('=' ((super_expression ';') | block)) | ';')
;
@ -66,6 +66,8 @@ access: scoped_expression '[' super_expression ']' ;
reference: /* prec -1 ?? */ (('<>' | 'ref') | ('<-' | 'in')) scoped_expression ;
suffix_expression: scoped_expression ('?' | '!')
return: ('return' | 'bring') expression ;
loop_control: 'break'

View file

@ -13,9 +13,9 @@ module.exports = grammar({
// --- sources
source_file: $ => repeat1($.statement),
source_file: $ => repeat1($._statement),
statement: $ => choice(
_statement: $ => choice(
$.import,
$.type_definition,
$.function_definition,
@ -57,6 +57,7 @@ module.exports = grammar({
repeat(seq(
optional($.annotation_identifier),
$.argument_name_identifier,
optional('?'),
)),
optional(seq(':', repeat1(seq(
optional($.annotation_identifier),