diff --git a/corpus/edigits_like.langexp b/corpus/edigits_like.langexp index ddfa447..11ddb7a 100644 --- a/corpus/edigits_like.langexp +++ b/corpus/edigits_like.langexp @@ -62,317 +62,82 @@ test_k 'n 'k : Int Int -> Bool = { -------------------------------------------------------------------------------- (source_file - (statement - (import - (simple_name_identifier))) - (statement - (import - (simple_name_identifier) - (simple_type_identifier))) - (statement - (import - (simple_name_identifier))) - (statement - (function_definition - (simple_name_identifier) - (block - (match - (name_definition - (simple_name_identifier)) - (case - (condition - (operator_expression - (name_expression - (simple_name_identifier)) - (operator) - (number_literal)) - (name_expression - (reference - (access - (simple_name_identifier) - (number_literal))) - (simple_name_identifier)) - (number_literal)))) - (match - (name_definition - (simple_name_identifier)) - (case - (name_expression - (simple_name_identifier) - (number_literal)))) - (match - (operator_expression - (name_definition - (simple_name_identifier)) - (operator) - (name_definition - (simple_name_identifier))) - (case - (name_expression - (simple_name_identifier) - (number_literal) - (operator_expression - (name_expression - (simple_name_identifier)) - (operator) - (number_literal))))) - (operator_expression - (name_expression - (simple_name_identifier)) - (operator) - (name_expression - (simple_name_identifier))) - (match - (name_definition - (simple_name_identifier)) - (case - (name_expression - (name_expression - (type - (simple_type_identifier)) - (simple_name_identifier) - (number_literal)) - (simple_name_identifier) - (operator_expression - (name_expression - (simple_name_identifier)) - (operator) - (number_literal))))) - (match - (name_definition - (simple_name_identifier)) - (case - (operator_expression - (operator_expression - (name_expression - (simple_name_identifier)) - (operator) - (name_expression - (simple_name_identifier))) - (operator_tail1) - (name_expression - (simple_name_identifier))))) - (match - (name_definition - (simple_name_identifier)) - (case - (name_expression - (simple_name_identifier)))) - (loop - (name_definition - (simple_name_identifier)) - (loop - (name_definition - (simple_name_identifier)) - (operator_expression - (number_literal) - (operator) - (operator_expression - (operator_expression - (name_expression - (simple_name_identifier)) - (operator) - (number_literal)) - (operator_tail1) - (number_literal))) + (import + (simple_name_identifier)) + (import + (simple_name_identifier) + (simple_type_identifier)) + (import + (simple_name_identifier)) + (function_definition + (simple_name_identifier) + (block + (match + (name_definition + (simple_name_identifier)) + (case + (condition (operator_expression (name_expression (simple_name_identifier)) (operator) - (number_literal))) - (block - (condition - (operator_expression - (operator_expression - (name_expression - (simple_name_identifier)) - (operator) - (number_literal)) - (operator_tail1) - (name_expression - (simple_name_identifier))) - (name_expression - (simple_name_identifier) - (operator_expression - (operator_expression - (name_expression - (simple_name_identifier) - (simple_name_identifier) - (operator_expression - (name_expression - (simple_name_identifier)) - (operator) - (number_literal))) - (operator) - (string_literal)) - (operator_tail1) - (name_expression - (operator_expression - (name_expression - (simple_name_identifier)) - (operator) - (number_literal)) - (simple_name_identifier)))) - (name_expression - (simple_name_identifier) - (operator_expression - (operator_expression - (operator_expression - (name_expression - (simple_name_identifier) - (simple_name_identifier) - (simple_name_identifier)) - (operator) - (loop - (placeholder) - (operator_expression - (number_literal) - (operator) - (operator_expression - (number_literal) - (operator) - (name_expression - (simple_name_identifier) - (simple_name_identifier) - (number_literal)))) - (char_literal))) - (operator) - (string_literal)) - (operator) - (name_expression - (simple_name_identifier)))))))))) - (statement - (function_definition - (simple_name_identifier) - (argument_name_identifier) - (argument_name_identifier) - (type - (simple_type_identifier)) - (type - (simple_type_identifier)) - (type - (simple_type_identifier)) - (type - (simple_type_identifier)) - (block - (condition - (operator_expression + (number_literal)) (name_expression - (argument_name_identifier)) - (operator_tail1) - (operator_expression - (name_expression - (argument_name_identifier)) - (operator) - (number_literal))) - (return - (operator_expression - (name_expression - (type - (simple_type_identifier)) - (simple_name_identifier) - (number_literal)) - (operator) - (name_expression - (type - (simple_type_identifier)) - (simple_name_identifier) - (argument_name_identifier))))) - (match - (name_definition - (simple_name_identifier)) - (case - (operator_expression - (operator_expression - (name_expression - (argument_name_identifier)) - (operator) - (name_expression - (argument_name_identifier))) - (operator_tail1) - (number_literal)))) - (match - (operator_expression - (name_definition + (reference + (access + (simple_name_identifier) + (number_literal))) (simple_name_identifier)) - (operator) - (name_definition - (simple_name_identifier))) - (case - (name_expression - (simple_name_identifier) - (argument_name_identifier) - (simple_name_identifier)))) - (match - (operator_expression - (name_definition - (simple_name_identifier)) - (operator) - (name_definition - (simple_name_identifier))) - (case - (name_expression - (simple_name_identifier) - (simple_name_identifier) - (argument_name_identifier)))) - (return - (operator_expression - (operator_expression - (operator_expression - (name_expression - (simple_name_identifier)) - (operator) - (name_expression - (simple_name_identifier))) - (operator_tail1) - (name_expression - (simple_name_identifier))) - (operator_tail2) - (operator_expression - (name_expression - (simple_name_identifier)) - (operator) - (name_expression - (simple_name_identifier)))))))) - (statement - (function_definition - (simple_name_identifier) - (argument_name_identifier) - (type - (simple_type_identifier)) - (type - (simple_type_identifier)) - (block - (match - (name_definition - (simple_name_identifier)) - (case - (number_literal))) - (match - (name_definition - (simple_name_identifier)) - (case - (number_literal))) - (loop + (number_literal)))) + (match + (name_definition + (simple_name_identifier)) + (case (name_expression (simple_name_identifier) + (number_literal)))) + (match + (operator_expression + (name_definition + (simple_name_identifier)) + (operator) + (name_definition + (simple_name_identifier))) + (case + (name_expression + (simple_name_identifier) + (number_literal) + (operator_expression + (name_expression + (simple_name_identifier)) + (operator) + (number_literal))))) + (operator_expression + (name_expression + (simple_name_identifier)) + (operator) + (name_expression + (simple_name_identifier))) + (match + (name_definition + (simple_name_identifier)) + (case + (name_expression (name_expression + (type + (simple_type_identifier)) (simple_name_identifier) - (argument_name_identifier) - (simple_name_identifier))) - (block + (number_literal)) + (simple_name_identifier) (operator_expression (name_expression (simple_name_identifier)) (operator) - (name_expression - (simple_name_identifier))) - (operator_expression - (name_expression - (simple_name_identifier)) - (operator) - (number_literal)))) - (loop + (number_literal))))) + (match + (name_definition + (simple_name_identifier)) + (case (operator_expression (operator_expression (name_expression @@ -381,100 +146,328 @@ test_k 'n 'k : Int Int -> Bool = { (name_expression (simple_name_identifier))) (operator_tail1) - (number_literal)) - (block - (match - (name_definition - (simple_name_identifier)) - (case + (name_expression + (simple_name_identifier))))) + (match + (name_definition + (simple_name_identifier)) + (case + (name_expression + (simple_name_identifier)))) + (loop + (name_definition + (simple_name_identifier)) + (loop + (name_definition + (simple_name_identifier)) + (operator_expression + (number_literal) + (operator) + (operator_expression + (operator_expression + (name_expression + (simple_name_identifier)) + (operator) + (number_literal)) + (operator_tail1) + (number_literal))) + (operator_expression + (name_expression + (simple_name_identifier)) + (operator) + (number_literal))) + (block + (condition + (operator_expression + (operator_expression + (name_expression + (simple_name_identifier)) + (operator) + (number_literal)) + (operator_tail1) + (name_expression + (simple_name_identifier))) + (name_expression + (simple_name_identifier) + (operator_expression (operator_expression + (name_expression + (simple_name_identifier) + (simple_name_identifier) + (operator_expression + (name_expression + (simple_name_identifier)) + (operator) + (number_literal))) + (operator) + (string_literal)) + (operator_tail1) + (name_expression (operator_expression (name_expression (simple_name_identifier)) (operator) + (number_literal)) + (simple_name_identifier)))) + (name_expression + (simple_name_identifier) + (operator_expression + (operator_expression + (operator_expression (name_expression - (simple_name_identifier))) - (operator_tail1) - (number_literal)))) - (condition - (name_expression - (simple_name_identifier) - (argument_name_identifier) - (simple_name_identifier)) - (operator_expression - (name_expression - (simple_name_identifier)) + (simple_name_identifier) + (simple_name_identifier) + (simple_name_identifier)) + (operator) + (loop + (placeholder) + (operator_expression + (number_literal) + (operator) + (operator_expression + (number_literal) + (operator) + (name_expression + (simple_name_identifier) + (simple_name_identifier) + (number_literal)))) + (char_literal))) + (operator) + (string_literal)) (operator) (name_expression - (simple_name_identifier))) - (operator_expression - (name_expression - (simple_name_identifier)) - (operator) - (name_expression - (simple_name_identifier)))))) - (return + (simple_name_identifier))))))))) + (function_definition + (simple_name_identifier) + (argument_name_identifier) + (argument_name_identifier) + (type + (simple_type_identifier)) + (type + (simple_type_identifier)) + (type + (simple_type_identifier)) + (type + (simple_type_identifier)) + (block + (condition + (operator_expression (name_expression - (simple_name_identifier)))))) - (statement - (function_definition - (simple_name_identifier) - (argument_name_identifier) - (argument_name_identifier) - (type - (simple_type_identifier)) - (type - (simple_type_identifier)) - (type - (simple_type_identifier)) - (block - (condition + (argument_name_identifier)) + (operator_tail1) + (operator_expression + (name_expression + (argument_name_identifier)) + (operator) + (number_literal))) + (return + (operator_expression + (name_expression + (type + (simple_type_identifier)) + (simple_name_identifier) + (number_literal)) + (operator) + (name_expression + (type + (simple_type_identifier)) + (simple_name_identifier) + (argument_name_identifier))))) + (match + (name_definition + (simple_name_identifier)) + (case + (operator_expression + (operator_expression + (name_expression + (argument_name_identifier)) + (operator) + (name_expression + (argument_name_identifier))) + (operator_tail1) + (number_literal)))) + (match + (operator_expression + (name_definition + (simple_name_identifier)) + (operator) + (name_definition + (simple_name_identifier))) + (case + (name_expression + (simple_name_identifier) + (argument_name_identifier) + (simple_name_identifier)))) + (match + (operator_expression + (name_definition + (simple_name_identifier)) + (operator) + (name_definition + (simple_name_identifier))) + (case + (name_expression + (simple_name_identifier) + (simple_name_identifier) + (argument_name_identifier)))) + (return + (operator_expression + (operator_expression + (operator_expression + (name_expression + (simple_name_identifier)) + (operator) + (name_expression + (simple_name_identifier))) + (operator_tail1) + (name_expression + (simple_name_identifier))) + (operator_tail2) (operator_expression (name_expression (simple_name_identifier)) (operator) - (number_literal)) - (return - (bool_literal))) - (match - (name_definition - (simple_name_identifier)) - (case - (operator_expression - (operator_expression - (name_expression - (simple_name_identifier)) - (operator) - (operator_expression - (name_expression - (simple_name_identifier) - (simple_name_identifier)) - (operator) - (number_literal))) - (operator_tail1) - (operator_expression - (float_number_literal) - (operator) - (name_expression - (simple_name_identifier) - (simple_name_identifier)))))) - (match - (name_definition - (simple_name_identifier)) - (case - (operator_expression - (name_expression - (simple_name_identifier)) - (operator) - (name_expression - (simple_name_identifier))))) - (return + (name_expression + (simple_name_identifier))))))) + (function_definition + (simple_name_identifier) + (argument_name_identifier) + (type + (simple_type_identifier)) + (type + (simple_type_identifier)) + (block + (match + (name_definition + (simple_name_identifier)) + (case + (number_literal))) + (match + (name_definition + (simple_name_identifier)) + (case + (number_literal))) + (loop + (name_expression + (simple_name_identifier) + (name_expression + (simple_name_identifier) + (argument_name_identifier) + (simple_name_identifier))) + (block (operator_expression (name_expression (simple_name_identifier)) - (operator_tail1) + (operator) + (name_expression + (simple_name_identifier))) + (operator_expression + (name_expression + (simple_name_identifier)) + (operator) + (number_literal)))) + (loop + (operator_expression + (operator_expression + (name_expression + (simple_name_identifier)) + (operator) + (name_expression + (simple_name_identifier))) + (operator_tail1) + (number_literal)) + (block + (match + (name_definition + (simple_name_identifier)) + (case + (operator_expression + (operator_expression + (name_expression + (simple_name_identifier)) + (operator) + (name_expression + (simple_name_identifier))) + (operator_tail1) + (number_literal)))) + (condition + (name_expression + (simple_name_identifier) + (argument_name_identifier) + (simple_name_identifier)) (operator_expression (name_expression (simple_name_identifier)) (operator) - (number_literal)))))))) + (name_expression + (simple_name_identifier))) + (operator_expression + (name_expression + (simple_name_identifier)) + (operator) + (name_expression + (simple_name_identifier)))))) + (return + (name_expression + (simple_name_identifier))))) + (function_definition + (simple_name_identifier) + (argument_name_identifier) + (argument_name_identifier) + (type + (simple_type_identifier)) + (type + (simple_type_identifier)) + (type + (simple_type_identifier)) + (block + (condition + (operator_expression + (name_expression + (simple_name_identifier)) + (operator) + (number_literal)) + (return + (bool_literal))) + (match + (name_definition + (simple_name_identifier)) + (case + (operator_expression + (operator_expression + (name_expression + (simple_name_identifier)) + (operator) + (operator_expression + (name_expression + (simple_name_identifier) + (simple_name_identifier)) + (operator) + (number_literal))) + (operator_tail1) + (operator_expression + (float_number_literal) + (operator) + (name_expression + (simple_name_identifier) + (simple_name_identifier)))))) + (match + (name_definition + (simple_name_identifier)) + (case + (operator_expression + (name_expression + (simple_name_identifier)) + (operator) + (name_expression + (simple_name_identifier))))) + (return + (operator_expression + (name_expression + (simple_name_identifier)) + (operator_tail1) + (operator_expression + (name_expression + (simple_name_identifier)) + (operator) + (number_literal))))))) diff --git a/corpus/test.langexp b/corpus/test.langexp index 69139f0..62eb461 100644 --- a/corpus/test.langexp +++ b/corpus/test.langexp @@ -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,784 +201,786 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name -------------------------------------------------------------------------------- (source_file - (statement - (import - (simple_name_identifier))) - (statement - (import - (simple_name_identifier))) - (statement - (import - (simple_name_identifier) - (simple_name_identifier) - (simple_name_identifier) - (simple_name_identifier))) - (statement - (import - (simple_name_identifier) - (simple_name_identifier))) - (statement - (function_definition - (simple_name_identifier) - (block - (loop - (block - (match - (name_definition - (simple_name_identifier)) - (case - (name_expression - (simple_name_identifier)))) - (condition - (operator_expression - (name_expression - (simple_name_identifier)) - (operator) - (char_literal)) - (loop_control)))) - (loop - (operator_expression - (name_expression + (import + (simple_name_identifier)) + (import + (simple_name_identifier)) + (import + (simple_name_identifier) + (simple_name_identifier) + (simple_name_identifier) + (simple_name_identifier)) + (import + (simple_name_identifier) + (simple_name_identifier)) + (function_definition + (simple_name_identifier) + (block + (loop + (block + (match + (name_definition (simple_name_identifier)) - (operator) - (number_literal)) - (block - (name_expression - (simple_name_identifier) - (simple_name_identifier)))) - (loop - (name_definition + (case + (name_expression + (simple_name_identifier)))) + (condition + (operator_expression + (name_expression + (simple_name_identifier)) + (operator) + (char_literal)) + (loop_control)))) + (loop + (operator_expression + (name_expression (simple_name_identifier)) - (operator_expression - (number_literal) - (operator) - (number_literal)) - (block - (name_expression - (simple_name_identifier) - (string_literal)))) - (condition + (operator) + (number_literal)) + (block + (name_expression + (simple_name_identifier) + (simple_name_identifier)))) + (loop + (name_definition + (simple_name_identifier)) + (operator_expression + (number_literal) + (operator) + (number_literal)) + (block + (name_expression + (simple_name_identifier) + (string_literal)))) + (condition + (operator_expression (operator_expression (operator_expression (operator_expression - (operator_expression - (name_expression - (simple_name_identifier)) - (operator) - (name_expression - (simple_name_identifier))) + (name_expression + (simple_name_identifier)) (operator) (name_expression (simple_name_identifier))) (operator) (name_expression (simple_name_identifier))) - (operator_tail1) + (operator) + (name_expression + (simple_name_identifier))) + (operator_tail1) + (operator_expression (operator_expression - (operator_expression - (name_expression - (simple_name_identifier)) - (operator) - (name_expression - (simple_name_identifier))) + (name_expression + (simple_name_identifier)) (operator) (name_expression - (simple_name_identifier)))) + (simple_name_identifier))) + (operator) + (name_expression + (simple_name_identifier)))) + (name_expression + (simple_name_identifier) + (simple_name_identifier)) + (operator_expression (name_expression - (simple_name_identifier) (simple_name_identifier)) + (operator) + (number_literal)) + (block (operator_expression (name_expression (simple_name_identifier)) (operator) (number_literal)) - (block - (operator_expression - (name_expression - (simple_name_identifier)) - (operator) - (number_literal)) - (name_expression - (simple_name_identifier) - (simple_name_identifier))) - (return - (unit_literal)))))) - (statement - (function_definition - (definition_info) - (annotation_info - (annotation_identifier)) - (annotation_info - (annotation_identifier)) - (simple_name_identifier) - (argument_name_identifier) - (argument_name_identifier) + (name_expression + (simple_name_identifier) + (simple_name_identifier))) + (return + (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))))) - (statement - (function_definition - (definition_info) - (annotation_info - (annotation_identifier)) - (constraint + (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 - (argument_name_identifier)) + (simple_name_identifier)) (operator) - (number_literal))) - (simple_name_identifier) - (annotation_identifier) - (argument_name_identifier) - (type - (simple_type_identifier)) - (type - (simple_type_identifier)) - (match + (name_expression + (simple_name_identifier)))) + (case + (placeholder) + (null_literal)))) + (function_definition + (definition_info) + (annotation_info + (annotation_identifier)) + (annotation_info + (annotation_identifier)) + (simple_name_identifier) + (argument_name_identifier) + (argument_name_identifier) + (operator_expression + (name_expression + (argument_name_identifier)) + (operator) + (name_expression + (argument_name_identifier)))) + (function_definition + (definition_info) + (annotation_info + (annotation_identifier)) + (constraint + (operator_expression (name_expression (argument_name_identifier)) + (operator) + (number_literal))) + (simple_name_identifier) + (annotation_identifier) + (argument_name_identifier) + (type + (simple_type_identifier)) + (type + (simple_type_identifier)) + (match + (name_expression + (argument_name_identifier)) + (case + (operator_expression + (number_literal) + (operator) + (number_literal)) + (number_literal)) + (case + (placeholder) + (operator_expression + (name_expression + (simple_name_identifier) + (operator_expression + (name_expression + (argument_name_identifier)) + (operator) + (number_literal))) + (operator) + (name_expression + (simple_name_identifier) + (argument_name_identifier)))))) + (function_definition + (simple_name_identifier) + (block + (match + (name_definition + (simple_name_identifier)) + (case + (name_expression + (simple_name_identifier)))) + (match + (operator_expression + (name_definition + (simple_name_identifier)) + (operator) + (name_definition + (simple_name_identifier))) + (case + (name_expression + (simple_name_identifier) + (simple_name_identifier)))) + (match + (name_definition + (simple_name_identifier)) + (case + (lambda + (argument_name_identifier) + (argument_name_identifier) + (operator_expression + (name_expression + (argument_name_identifier)) + (operator) + (name_expression + (argument_name_identifier)))))) + (match + (name_expression + (simple_name_identifier)) (case (operator_expression (number_literal) (operator) (number_literal)) - (number_literal)) + (string_literal)) + (case + (operator_expression + (number_literal) + (operator) + (number_literal)) + (string_literal)) + (case + (operator_expression + (operator_expression + (number_literal) + (operator) + (number_literal)) + (operator) + (name_expression + (simple_name_identifier))) + (operator_expression + (name_expression + (simple_name_identifier)) + (operator) + (number_literal)) + (string_literal)) (case (placeholder) - (operator_expression - (name_expression - (simple_name_identifier) - (operator_expression - (name_expression - (argument_name_identifier)) - (operator) - (number_literal))) - (operator) - (name_expression - (simple_name_identifier) - (argument_name_identifier))))))) - (statement - (function_definition - (simple_name_identifier) - (block - (match - (name_definition - (simple_name_identifier)) - (case - (name_expression - (simple_name_identifier)))) - (match - (operator_expression - (name_definition - (simple_name_identifier)) - (operator) - (name_definition - (simple_name_identifier))) - (case - (name_expression - (simple_name_identifier) - (simple_name_identifier)))) - (match - (name_definition - (simple_name_identifier)) - (case - (lambda - (argument_name_identifier) - (argument_name_identifier) - (operator_expression - (name_expression - (argument_name_identifier)) - (operator) - (name_expression - (argument_name_identifier)))))) - (match + (string_literal))) + (match + (name_definition + (simple_name_identifier)) + (case + (array + (simple_name_identifier) + (simple_name_identifier) + (simple_name_identifier)))) + (name_expression + (simple_name_identifier) + (simple_name_identifier)) + (match + (name_definition + (simple_name_identifier)) + (case (name_expression (simple_name_identifier)) - (case - (operator_expression - (number_literal) - (operator) - (number_literal)) - (string_literal)) - (case - (operator_expression - (number_literal) - (operator) - (number_literal)) - (string_literal)) - (case - (operator_expression - (operator_expression - (number_literal) - (operator) - (number_literal)) - (operator) - (name_expression - (simple_name_identifier))) - (operator_expression - (name_expression - (simple_name_identifier)) - (operator) - (number_literal)) - (string_literal)) - (case - (placeholder) - (string_literal))) - (match - (name_definition - (simple_name_identifier)) - (case - (array - (simple_name_identifier) - (simple_name_identifier) - (simple_name_identifier)))) - (name_expression - (simple_name_identifier) - (simple_name_identifier)) - (match - (name_definition - (simple_name_identifier)) - (case + (operator_expression (name_expression (simple_name_identifier)) - (operator_expression - (name_expression - (simple_name_identifier)) - (operator) - (name_expression + (operator) + (name_expression + (simple_name_identifier))))) + (match + (name_definition + (simple_name_identifier)) + (case + (constructor + (type + (simple_type_identifier)) + (annotation_identifier) + (string_literal) + (annotation_identifier) + (float_number_literal)))) + (match + (suffix_expression + (name_definition + (simple_name_identifier))) + (case + (name_expression + (simple_name_identifier)) + (name_expression + (simple_name_identifier)))) + (match + (suffix_expression + (name_definition + (simple_name_identifier))) + (case + (name_expression + (simple_name_identifier)))) + (match + (suffix_expression + (name_definition + (simple_name_identifier))) + (case + (name_expression + (simple_name_identifier)))) + (suffix_expression + (simple_name_identifier)) + (suffix_expression + (simple_name_identifier)) + (match + (name_definition + (simple_name_identifier)) + (case + (operator_expression + (name_expression + (simple_name_identifier)) + (operator) + (name_expression + (simple_name_identifier) + (name_definition (simple_name_identifier))))) - (match - (name_definition - (simple_name_identifier)) - (case - (constructor - (type - (simple_type_identifier)) - (annotation_identifier) - (string_literal) - (annotation_identifier) - (float_number_literal)))) - (match - (suffix_expression - (name_definition - (simple_name_identifier))) - (case - (name_expression - (simple_name_identifier)) - (name_expression - (simple_name_identifier)))) - (match - (suffix_expression - (name_definition - (simple_name_identifier))) - (case - (name_expression - (simple_name_identifier)))) - (match - (suffix_expression - (name_definition - (simple_name_identifier))) - (case - (name_expression - (simple_name_identifier)))) - (suffix_expression + (case + (constructor + (type + (simple_type_identifier)) + (annotation_identifier) + (unit_literal)))) + (match + (name_expression (simple_name_identifier)) - (suffix_expression + (case + (constructor + (type + (simple_type_identifier)) + (annotation_identifier) + (unit_literal)) + (string_literal)) + (case + (constructor + (type + (simple_type_identifier)) + (annotation_identifier) + (unit_literal)) + (string_literal)) + (case + (constructor + (type + (simple_type_identifier)) + (annotation_identifier) + (unit_literal)) + (string_literal))) + (match + (name_definition (simple_name_identifier)) - (match - (name_definition - (simple_name_identifier)) - (case - (operator_expression - (name_expression - (simple_name_identifier)) - (operator) - (name_expression - (simple_name_identifier) - (name_definition - (simple_name_identifier))))) - (case - (constructor - (type - (simple_type_identifier)) - (annotation_identifier) - (unit_literal)))) - (match + (case (name_expression - (simple_name_identifier)) - (case - (constructor - (type - (simple_type_identifier)) - (annotation_identifier) - (unit_literal)) - (string_literal)) - (case - (constructor - (type - (simple_type_identifier)) - (annotation_identifier) - (unit_literal)) - (string_literal)) - (case - (constructor - (type - (simple_type_identifier)) - (annotation_identifier) - (unit_literal)) - (string_literal))) - (match - (name_definition - (simple_name_identifier)) - (case - (name_expression - (operator) - (number_literal) - (number_literal))))))) - (statement - (function_definition - (simple_name_identifier) - (block - (name_expression - (simple_name_identifier) - (simple_name_identifier) - (simple_name_identifier) - (simple_name_identifier))))) - (statement - (function_definition - (simple_name_identifier) - (block - (name_expression - (simple_name_identifier) - (simple_name_identifier) - (simple_name_identifier) - (simple_name_identifier))))) - (statement - (function_definition - (simple_name_identifier) - (block - (name_expression - (simple_name_identifier) - (simple_name_identifier) - (simple_name_identifier) - (simple_name_identifier))))) - (statement - (type_definition - (simple_type_identifier) + (operator) + (number_literal) + (number_literal)))))) + (function_definition + (simple_name_identifier) + (block + (name_expression + (simple_name_identifier) + (simple_name_identifier) + (simple_name_identifier) + (simple_name_identifier)))) + (function_definition + (simple_name_identifier) + (block + (name_expression + (simple_name_identifier) + (simple_name_identifier) + (simple_name_identifier) + (simple_name_identifier)))) + (function_definition + (simple_name_identifier) + (block + (name_expression + (simple_name_identifier) + (simple_name_identifier) + (simple_name_identifier) + (simple_name_identifier)))) + (type_definition + (simple_type_identifier) + (tuple_type + (annotation_identifier) + (type + (simple_type_identifier)) + (annotation_identifier) + (type + (simple_type_identifier)))) + (type_definition + (simple_type_identifier) + (variant_type (tuple_type (annotation_identifier) (type - (simple_type_identifier)) + (simple_type_identifier))) + (tuple_type + (annotation_identifier) + (type + (simple_type_identifier))) + (tuple_type (annotation_identifier) (type (simple_type_identifier))))) - (statement - (type_definition + (function_definition + (definition_info) + (simple_name_identifier) + (argument_name_identifier) + (type (simple_type_identifier) - (variant_type - (tuple_type - (annotation_identifier) - (type - (simple_type_identifier))) - (tuple_type - (annotation_identifier) - (type - (simple_type_identifier))) - (tuple_type - (annotation_identifier) - (type - (simple_type_identifier)))))) - (statement - (function_definition - (definition_info) - (simple_name_identifier) - (argument_name_identifier) (type - (simple_type_identifier) - (type - (argument_type_identifier))) - (block - (match - (name_expression - (simple_name_identifier)) - (case - (bool_literal))) - (loop - (name_expression - (simple_name_identifier)) - (block + (argument_type_identifier))) + (block + (match + (name_expression + (simple_name_identifier)) + (case + (bool_literal))) + (loop + (name_expression + (simple_name_identifier)) + (block + (operator_expression + (name_expression + (simple_name_identifier)) + (operator) + (bool_literal)) + (loop + (name_definition + (simple_name_identifier)) (operator_expression - (name_expression - (simple_name_identifier)) + (number_literal) (operator) - (bool_literal)) - (loop - (name_definition - (simple_name_identifier)) - (operator_expression - (number_literal) - (operator) - (name_expression - (argument_name_identifier) - (simple_name_identifier))) - (comma_expression - (condition - (operator_expression - (access - (argument_name_identifier) - (name_expression - (simple_name_identifier))) - (operator) - (access - (argument_name_identifier) - (operator_expression - (name_expression - (simple_name_identifier)) - (operator) - (number_literal)))) - (name_expression - (simple_name_identifier) - (access - (argument_name_identifier) - (name_expression - (simple_name_identifier))) - (access - (argument_name_identifier) - (operator_expression - (name_expression - (simple_name_identifier)) - (operator) - (number_literal))))) + (name_expression + (argument_name_identifier) + (simple_name_identifier))) + (comma_expression + (condition (operator_expression - (name_expression - (simple_name_identifier)) + (access + (argument_name_identifier) + (name_expression + (simple_name_identifier))) (operator) - (bool_literal))))))))) - (statement - (function_definition - (definition_info) - (simple_name_identifier) - (argument_name_identifier) + (access + (argument_name_identifier) + (operator_expression + (name_expression + (simple_name_identifier)) + (operator) + (number_literal)))) + (name_expression + (simple_name_identifier) + (access + (argument_name_identifier) + (name_expression + (simple_name_identifier))) + (access + (argument_name_identifier) + (operator_expression + (name_expression + (simple_name_identifier)) + (operator) + (number_literal))))) + (operator_expression + (name_expression + (simple_name_identifier)) + (operator) + (bool_literal)))))))) + (function_definition + (definition_info) + (simple_name_identifier) + (argument_name_identifier) + (type + (simple_type_identifier) (type - (simple_type_identifier) - (type - (argument_type_identifier))) - (block - (match - (name_definition - (simple_name_identifier)) - (case - (bool_literal))) - (loop - (name_expression - (simple_name_identifier)) - (block + (argument_type_identifier))) + (block + (match + (name_definition + (simple_name_identifier)) + (case + (bool_literal))) + (loop + (name_expression + (simple_name_identifier)) + (block + (operator_expression + (name_expression + (simple_name_identifier)) + (operator) + (bool_literal)) + (loop + (name_definition + (simple_name_identifier)) (operator_expression - (name_expression - (simple_name_identifier)) + (number_literal) (operator) - (bool_literal)) - (loop - (name_definition - (simple_name_identifier)) - (operator_expression - (number_literal) - (operator) - (name_expression - (argument_name_identifier) - (simple_name_identifier))) - (comma_expression - (condition - (operator_expression - (access - (argument_name_identifier) - (name_expression - (simple_name_identifier))) - (operator) - (access - (argument_name_identifier) - (operator_expression - (name_expression - (simple_name_identifier)) - (operator) - (number_literal)))) - (name_expression - (simple_name_identifier) - (access - (argument_name_identifier) - (name_expression - (simple_name_identifier))) - (access - (argument_name_identifier) - (operator_expression - (name_expression - (simple_name_identifier)) - (operator) - (number_literal))))) + (name_expression + (argument_name_identifier) + (simple_name_identifier))) + (comma_expression + (condition (operator_expression - (name_expression - (simple_name_identifier)) + (access + (argument_name_identifier) + (name_expression + (simple_name_identifier))) (operator) - (bool_literal))))))))) - (statement - (function_definition - (simple_name_identifier) - (argument_name_identifier) + (access + (argument_name_identifier) + (operator_expression + (name_expression + (simple_name_identifier)) + (operator) + (number_literal)))) + (name_expression + (simple_name_identifier) + (access + (argument_name_identifier) + (name_expression + (simple_name_identifier))) + (access + (argument_name_identifier) + (operator_expression + (name_expression + (simple_name_identifier)) + (operator) + (number_literal))))) + (operator_expression + (name_expression + (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) + (simple_type_identifier) + (argument_type_identifier) + (argument_type_identifier) + (tuple_type + (annotation_identifier) + (type + (simple_type_identifier)) + (annotation_identifier) + (type + (simple_type_identifier)) + (annotation_identifier) (type (simple_type_identifier) + (type + (argument_type_identifier)) (type (argument_type_identifier))) - (block))) - (statement - (type_definition - (definition_info) - (simple_type_identifier) - (argument_type_identifier) - (argument_type_identifier) - (tuple_type - (annotation_identifier) + (annotation_identifier) + (type + (simple_type_identifier) (type - (simple_type_identifier)) - (annotation_identifier) + (argument_type_identifier)) (type - (simple_type_identifier)) - (annotation_identifier) - (type - (simple_type_identifier) - (type - (argument_type_identifier)) - (type - (argument_type_identifier))) - (annotation_identifier) - (type - (simple_type_identifier) - (type - (argument_type_identifier)) - (type - (argument_type_identifier)))))) - (statement - (type_definition - (simple_type_identifier) - (function_definition - (simple_name_identifier) + (argument_type_identifier))))) + (type_definition + (simple_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)))) + (function_definition + (simple_name_identifier) + (block + (match + (name_definition + (simple_name_identifier)) + (case + (name_expression + (type + (simple_type_identifier) + (type + (simple_type_identifier)) + (type + (simple_type_identifier))) + (simple_name_identifier)))) + (match + (name_definition + (simple_name_identifier)) + (case + (name_expression + (type + (simple_type_identifier) + (type + (simple_type_identifier))) + (simple_name_identifier)))))) + (function_definition + (simple_name_identifier) + (block + (operator_expression + (operator_expression + (operator_expression + (name_expression + (simple_name_identifier)) + (operator) + (name_expression + (simple_name_identifier) + (simple_name_identifier) + (simple_name_identifier))) + (operator) + (name_expression + (simple_name_identifier) + (simple_name_identifier) + (simple_name_identifier))) + (operator) (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) + (operator_expression + (operator_expression + (operator_expression + (name_expression + (simple_name_identifier)) + (operator) + (name_expression + (simple_name_identifier) + (simple_name_identifier) + (simple_name_identifier))) + (operator) + (name_expression + (simple_name_identifier) + (simple_name_identifier) + (simple_name_identifier))) + (operator) (name_expression (simple_name_identifier))))) - (statement - (function_definition - (simple_name_identifier) - (block - (match - (name_definition - (simple_name_identifier)) - (case - (name_expression - (type - (simple_type_identifier) - (type - (simple_type_identifier)) - (type - (simple_type_identifier))) - (simple_name_identifier)))) - (match - (name_definition - (simple_name_identifier)) - (case - (name_expression - (type - (simple_type_identifier) - (type - (simple_type_identifier))) - (simple_name_identifier))))))) - (statement - (function_definition - (simple_name_identifier) - (block - (operator_expression - (operator_expression - (operator_expression - (name_expression - (simple_name_identifier)) - (operator) - (name_expression - (simple_name_identifier) - (simple_name_identifier) - (simple_name_identifier))) - (operator) - (name_expression + (function_definition + (simple_name_identifier) + (block + (match + (name_definition + (simple_name_identifier)) + (case + (reference + (access (simple_name_identifier) - (simple_name_identifier) - (simple_name_identifier))) - (operator) - (name_expression - (simple_name_identifier))) - (operator_expression - (operator_expression - (operator_expression - (name_expression - (simple_name_identifier)) - (operator) - (name_expression - (simple_name_identifier) - (simple_name_identifier) - (simple_name_identifier))) - (operator) - (name_expression - (simple_name_identifier) - (simple_name_identifier) - (simple_name_identifier))) - (operator) - (name_expression - (simple_name_identifier)))))) - (statement - (function_definition - (simple_name_identifier) - (block + (number_literal))))))) + (function_definition + (definition_info) + (simple_name_identifier) + (argument_name_identifier) + (argument_name_identifier) + (comma_expression + (name_expression + (simple_name_identifier) + (argument_name_identifier)) + (name_expression + (simple_name_identifier) + (argument_name_identifier)))) + (function_definition + (definition_info) + (simple_name_identifier) + (argument_name_identifier) + (argument_name_identifier) + (type + (argument_type_identifier)) + (type + (argument_type_identifier)) + (comma_expression + (comma_expression (match (name_definition (simple_name_identifier)) (case (reference - (access - (simple_name_identifier) - (number_literal)))))))) - (statement - (function_definition - (definition_info) - (simple_name_identifier) - (argument_name_identifier) - (argument_name_identifier) - (comma_expression - (name_expression - (simple_name_identifier) - (argument_name_identifier)) - (name_expression - (simple_name_identifier) - (argument_name_identifier))))) - (statement - (function_definition - (definition_info) - (simple_name_identifier) - (argument_name_identifier) - (argument_name_identifier) - (type - (argument_type_identifier)) - (type - (argument_type_identifier)) - (comma_expression - (comma_expression - (match - (name_definition - (simple_name_identifier)) - (case - (reference - (argument_name_identifier)))) - (match - (name_expression - (argument_name_identifier)) - (case - (reference - (argument_name_identifier))))) + (argument_name_identifier)))) (match (name_expression (argument_name_identifier)) (case (reference - (simple_name_identifier))))))) - (statement - (function_definition - (definition_info) - (simple_name_identifier) - (type - (simple_type_identifier)) - (type - (simple_type_identifier)) - (type - (simple_type_identifier)) - (operator_expression - (operator_expression - (name_expression - (simple_name_identifier)) - (operator) - (name_expression - (simple_name_identifier))) - (operator) - (name_expression - (simple_name_identifier))))) - (statement - (function_definition - (definition_info) - (simple_name_identifier) - (argument_name_identifier) - (type - (simple_type_identifier)) + (argument_name_identifier))))) (match (name_expression (argument_name_identifier)) (case - (name_expression + (reference (simple_name_identifier)))))) - (statement + (function_definition + (definition_info) + (simple_name_identifier) + (type + (simple_type_identifier)) + (type + (simple_type_identifier)) + (type + (simple_type_identifier)) + (operator_expression + (operator_expression + (name_expression + (simple_name_identifier)) + (operator) + (name_expression + (simple_name_identifier))) + (operator) + (name_expression + (simple_name_identifier)))) + (function_definition + (definition_info) + (simple_name_identifier) + (argument_name_identifier) + (type + (simple_type_identifier)) + (match + (name_expression + (argument_name_identifier)) + (case + (name_expression + (simple_name_identifier))))) + (function_definition + (definition_info) + (simple_name_identifier) + (argument_name_identifier) + (argument_name_identifier) + (type + (simple_type_identifier)) + (type + (simple_type_identifier)) + (type + (simple_type_identifier)) + (constructor + (type + (simple_type_identifier)) + (annotation_identifier) + (argument_name_identifier) + (annotation_identifier) + (argument_name_identifier))) + (function_definition + (definition_info) + (simple_name_identifier) + (argument_name_identifier) + (argument_name_identifier) + (type + (simple_type_identifier)) + (type + (simple_type_identifier)) + (type + (simple_type_identifier)) + (constructor + (type + (simple_type_identifier)) + (argument_name_identifier) + (argument_name_identifier))) + (typeclass_definition + (definition_info) + (typeclass_identifier) + (typeclass_identifier) (function_definition - (definition_info) (simple_name_identifier) - (argument_name_identifier) - (argument_name_identifier) (type (simple_type_identifier)) (type - (simple_type_identifier)) - (type - (simple_type_identifier)) - (constructor - (type - (simple_type_identifier)) - (annotation_identifier) - (argument_name_identifier) - (annotation_identifier) - (argument_name_identifier)))) - (statement - (function_definition - (definition_info) - (simple_name_identifier) - (argument_name_identifier) - (argument_name_identifier) - (type - (simple_type_identifier)) - (type - (simple_type_identifier)) - (type - (simple_type_identifier)) - (constructor - (type - (simple_type_identifier)) - (argument_name_identifier) - (argument_name_identifier)))) - (statement - (typeclass_definition - (definition_info) - (typeclass_identifier) - (typeclass_identifier) - (function_definition - (simple_name_identifier) - (type - (simple_type_identifier)) - (type - (simple_type_identifier)))))) + (simple_type_identifier))))) diff --git a/grammar.g4 b/grammar.g4 index c6735ca..7c90d81 100644 --- a/grammar.g4 +++ b/grammar.g4 @@ -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' diff --git a/grammar.js b/grammar.js index 49c4d1e..f8c3f40 100644 --- a/grammar.js +++ b/grammar.js @@ -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),