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

View file

@ -31,6 +31,13 @@ func = {
} !!-> return (); } !!-> 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 ') : example that shows that default annotations are argument names (without ')
@a is integer @a is integer
@b also integer @b also integer
@ -194,23 +201,18 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
(source_file (source_file
(statement
(import (import
(simple_name_identifier))) (simple_name_identifier))
(statement
(import (import
(simple_name_identifier))) (simple_name_identifier))
(statement
(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))
(statement
(import (import
(simple_name_identifier) (simple_name_identifier)
(simple_name_identifier))) (simple_name_identifier))
(statement
(function_definition (function_definition
(simple_name_identifier) (simple_name_identifier)
(block (block
@ -295,8 +297,37 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
(simple_name_identifier) (simple_name_identifier)
(simple_name_identifier))) (simple_name_identifier)))
(return (return
(unit_literal)))))) (unit_literal)))))
(statement (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 (function_definition
(definition_info) (definition_info)
(annotation_info (annotation_info
@ -311,8 +342,7 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
(argument_name_identifier)) (argument_name_identifier))
(operator) (operator)
(name_expression (name_expression
(argument_name_identifier))))) (argument_name_identifier))))
(statement
(function_definition (function_definition
(definition_info) (definition_info)
(annotation_info (annotation_info
@ -352,8 +382,7 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
(operator) (operator)
(name_expression (name_expression
(simple_name_identifier) (simple_name_identifier)
(argument_name_identifier))))))) (argument_name_identifier))))))
(statement
(function_definition (function_definition
(simple_name_identifier) (simple_name_identifier)
(block (block
@ -530,8 +559,7 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
(name_expression (name_expression
(operator) (operator)
(number_literal) (number_literal)
(number_literal))))))) (number_literal))))))
(statement
(function_definition (function_definition
(simple_name_identifier) (simple_name_identifier)
(block (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)
(simple_name_identifier) (simple_name_identifier)
(simple_name_identifier))))) (simple_name_identifier))))
(statement
(function_definition (function_definition
(simple_name_identifier) (simple_name_identifier)
(block (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)
(simple_name_identifier) (simple_name_identifier)
(simple_name_identifier))))) (simple_name_identifier))))
(statement
(function_definition (function_definition
(simple_name_identifier) (simple_name_identifier)
(block (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)
(simple_name_identifier) (simple_name_identifier)
(simple_name_identifier))))) (simple_name_identifier))))
(statement
(type_definition (type_definition
(simple_type_identifier) (simple_type_identifier)
(tuple_type (tuple_type
@ -567,8 +592,7 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
(simple_type_identifier)) (simple_type_identifier))
(annotation_identifier) (annotation_identifier)
(type (type
(simple_type_identifier))))) (simple_type_identifier))))
(statement
(type_definition (type_definition
(simple_type_identifier) (simple_type_identifier)
(variant_type (variant_type
@ -583,8 +607,7 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
(tuple_type (tuple_type
(annotation_identifier) (annotation_identifier)
(type (type
(simple_type_identifier)))))) (simple_type_identifier)))))
(statement
(function_definition (function_definition
(definition_info) (definition_info)
(simple_name_identifier) (simple_name_identifier)
@ -649,8 +672,7 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
(name_expression (name_expression
(simple_name_identifier)) (simple_name_identifier))
(operator) (operator)
(bool_literal))))))))) (bool_literal))))))))
(statement
(function_definition (function_definition
(definition_info) (definition_info)
(simple_name_identifier) (simple_name_identifier)
@ -715,8 +737,7 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
(name_expression (name_expression
(simple_name_identifier)) (simple_name_identifier))
(operator) (operator)
(bool_literal))))))))) (bool_literal))))))))
(statement
(function_definition (function_definition
(simple_name_identifier) (simple_name_identifier)
(argument_name_identifier) (argument_name_identifier)
@ -724,8 +745,7 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
(simple_type_identifier) (simple_type_identifier)
(type (type
(argument_type_identifier))) (argument_type_identifier)))
(block))) (block))
(statement
(type_definition (type_definition
(definition_info) (definition_info)
(simple_type_identifier) (simple_type_identifier)
@ -751,8 +771,7 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
(type (type
(argument_type_identifier)) (argument_type_identifier))
(type (type
(argument_type_identifier)))))) (argument_type_identifier)))))
(statement
(type_definition (type_definition
(simple_type_identifier) (simple_type_identifier)
(function_definition (function_definition
@ -773,8 +792,7 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
(simple_name_identifier) (simple_name_identifier)
(argument_name_identifier) (argument_name_identifier)
(name_expression (name_expression
(simple_name_identifier))))) (simple_name_identifier))))
(statement
(function_definition (function_definition
(simple_name_identifier) (simple_name_identifier)
(block (block
@ -799,8 +817,7 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
(simple_type_identifier) (simple_type_identifier)
(type (type
(simple_type_identifier))) (simple_type_identifier)))
(simple_name_identifier))))))) (simple_name_identifier))))))
(statement
(function_definition (function_definition
(simple_name_identifier) (simple_name_identifier)
(block (block
@ -839,8 +856,7 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
(simple_name_identifier))) (simple_name_identifier)))
(operator) (operator)
(name_expression (name_expression
(simple_name_identifier)))))) (simple_name_identifier)))))
(statement
(function_definition (function_definition
(simple_name_identifier) (simple_name_identifier)
(block (block
@ -851,8 +867,7 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
(reference (reference
(access (access
(simple_name_identifier) (simple_name_identifier)
(number_literal)))))))) (number_literal)))))))
(statement
(function_definition (function_definition
(definition_info) (definition_info)
(simple_name_identifier) (simple_name_identifier)
@ -864,8 +879,7 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
(argument_name_identifier)) (argument_name_identifier))
(name_expression (name_expression
(simple_name_identifier) (simple_name_identifier)
(argument_name_identifier))))) (argument_name_identifier))))
(statement
(function_definition (function_definition
(definition_info) (definition_info)
(simple_name_identifier) (simple_name_identifier)
@ -894,8 +908,7 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
(argument_name_identifier)) (argument_name_identifier))
(case (case
(reference (reference
(simple_name_identifier))))))) (simple_name_identifier))))))
(statement
(function_definition (function_definition
(definition_info) (definition_info)
(simple_name_identifier) (simple_name_identifier)
@ -914,8 +927,7 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
(simple_name_identifier))) (simple_name_identifier)))
(operator) (operator)
(name_expression (name_expression
(simple_name_identifier))))) (simple_name_identifier))))
(statement
(function_definition (function_definition
(definition_info) (definition_info)
(simple_name_identifier) (simple_name_identifier)
@ -927,8 +939,7 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
(argument_name_identifier)) (argument_name_identifier))
(case (case
(name_expression (name_expression
(simple_name_identifier)))))) (simple_name_identifier)))))
(statement
(function_definition (function_definition
(definition_info) (definition_info)
(simple_name_identifier) (simple_name_identifier)
@ -946,8 +957,7 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
(annotation_identifier) (annotation_identifier)
(argument_name_identifier) (argument_name_identifier)
(annotation_identifier) (annotation_identifier)
(argument_name_identifier)))) (argument_name_identifier)))
(statement
(function_definition (function_definition
(definition_info) (definition_info)
(simple_name_identifier) (simple_name_identifier)
@ -963,8 +973,7 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
(type (type
(simple_type_identifier)) (simple_type_identifier))
(argument_name_identifier) (argument_name_identifier)
(argument_name_identifier)))) (argument_name_identifier)))
(statement
(typeclass_definition (typeclass_definition
(definition_info) (definition_info)
(typeclass_identifier) (typeclass_identifier)
@ -974,4 +983,4 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
(type (type
(simple_type_identifier)) (simple_type_identifier))
(type (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 ';')* function_definition: (definietion_info)? (ANNOTATION_INFO)* (constraint ';')*
(('%' | 'let') | ('$' | 'var'))? SIMPLE_NAME_IDENTIFIER (('%' | 'let') | ('$' | 'var'))? SIMPLE_NAME_IDENTIFIER
((ANNOTATION_IDENTIFIER)? ARGUMENT_NAME_IDENTIFIER)* ((ANNOTATION_IDENTIFIER)? ARGUMENT_NAME_IDENTIFIER ('?')?)*
(':' ((ANNOTATION_IDENTIFIER)? ('->' | 'in') | ('<-' | 'out') | ('<>' | 'ref'))? type)+)? (':' ((ANNOTATION_IDENTIFIER)? ('->' | 'in') | ('<-' | 'out') | ('<>' | 'ref'))? type)+)?
(('=' ((super_expression ';') | block)) | ';') (('=' ((super_expression ';') | block)) | ';')
; ;
@ -66,6 +66,8 @@ access: scoped_expression '[' super_expression ']' ;
reference: /* prec -1 ?? */ (('<>' | 'ref') | ('<-' | 'in')) scoped_expression ; reference: /* prec -1 ?? */ (('<>' | 'ref') | ('<-' | 'in')) scoped_expression ;
suffix_expression: scoped_expression ('?' | '!')
return: ('return' | 'bring') expression ; return: ('return' | 'bring') expression ;
loop_control: 'break' loop_control: 'break'

View file

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