mirror of
https://codeberg.org/ProgramSnail/lang_2023.git
synced 2025-12-05 22:48:42 +00:00
266 lines
11 KiB
Text
266 lines
11 KiB
Text
================================================================================
|
|
Match
|
|
================================================================================
|
|
|
|
decl fruit_cost : Fruit -> Int
|
|
def fruit_cost : fruit = {
|
|
return (match fruit with
|
|
| $Banana -> 11
|
|
| $Apple | $Orange -> 7)
|
|
}
|
|
|
|
decl amount_to_string : Int -> Bool -> String
|
|
def amount_to_string : x is_zero_separated = {
|
|
const ans = match x with
|
|
| 0 ? is_zero_separated -> "Zero"
|
|
| 0 | 1 | 2 | 3 | 4 -> "Few"
|
|
| x ? (5--9).contains: x -> "Several"
|
|
| x ? (10--19).contains: x -> "Pack"
|
|
| _ -> "Lots"
|
|
return ans
|
|
}
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(source_file
|
|
(source_statement
|
|
(namespace_statement
|
|
(function_declaration
|
|
(extended_name
|
|
(name_identifier))
|
|
(function_type
|
|
(scoped_any_type
|
|
(type_expression
|
|
(parametrized_type
|
|
(type_identifier))))
|
|
(scoped_any_type
|
|
(type_expression
|
|
(parametrized_type
|
|
(type_identifier))))))))
|
|
(source_statement
|
|
(namespace_statement
|
|
(function_definition_statement
|
|
(function_definition
|
|
(extended_name
|
|
(name_identifier))
|
|
(extended_name
|
|
(name_identifier)))
|
|
(superexpression
|
|
(expression
|
|
(prefixed_expression
|
|
(block
|
|
(block_statement
|
|
(prefixed_expression
|
|
(return_expression
|
|
(expression
|
|
(subexpression
|
|
(subexpression_token
|
|
(scoped_statement
|
|
(superexpression
|
|
(flow_control
|
|
(match
|
|
(expression
|
|
(subexpression
|
|
(subexpression_token
|
|
(name_expression
|
|
(extended_name
|
|
(name_identifier))))))
|
|
(match_case
|
|
(pattern
|
|
(type_constructor_pattern
|
|
(type_expression
|
|
(parametrized_type
|
|
(type_identifier)))))
|
|
(expression
|
|
(subexpression
|
|
(subexpression_token
|
|
(literal
|
|
(number_literal))))))
|
|
(match_case
|
|
(pattern
|
|
(type_constructor_pattern
|
|
(type_expression
|
|
(parametrized_type
|
|
(type_identifier))))))
|
|
(match_case
|
|
(pattern
|
|
(type_constructor_pattern
|
|
(type_expression
|
|
(parametrized_type
|
|
(type_identifier)))))
|
|
(expression
|
|
(subexpression
|
|
(subexpression_token
|
|
(literal
|
|
(number_literal)))))))))))))))))))))))
|
|
(source_statement
|
|
(namespace_statement
|
|
(function_declaration
|
|
(extended_name
|
|
(name_identifier))
|
|
(function_type
|
|
(scoped_any_type
|
|
(type_expression
|
|
(parametrized_type
|
|
(type_identifier))))
|
|
(scoped_any_type
|
|
(type_expression
|
|
(parametrized_type
|
|
(type_identifier))))
|
|
(scoped_any_type
|
|
(type_expression
|
|
(parametrized_type
|
|
(type_identifier))))))))
|
|
(source_statement
|
|
(namespace_statement
|
|
(function_definition_statement
|
|
(function_definition
|
|
(extended_name
|
|
(name_identifier))
|
|
(extended_name
|
|
(name_identifier))
|
|
(extended_name
|
|
(name_identifier)))
|
|
(superexpression
|
|
(expression
|
|
(prefixed_expression
|
|
(block
|
|
(block_statement
|
|
(variable_definition_statement
|
|
(any_name
|
|
(annotated_name
|
|
(extended_name
|
|
(name_identifier))))
|
|
(superexpression
|
|
(flow_control
|
|
(match
|
|
(expression
|
|
(subexpression
|
|
(subexpression_token
|
|
(name_expression
|
|
(extended_name
|
|
(name_identifier))))))
|
|
(match_case
|
|
(pattern
|
|
(literal
|
|
(number_literal)))
|
|
(expression
|
|
(subexpression
|
|
(subexpression_token
|
|
(name_expression
|
|
(extended_name
|
|
(name_identifier))))))
|
|
(expression
|
|
(subexpression
|
|
(subexpression_token
|
|
(literal
|
|
(string_literal))))))
|
|
(match_case
|
|
(pattern
|
|
(literal
|
|
(number_literal))))
|
|
(match_case
|
|
(pattern
|
|
(literal
|
|
(number_literal))))
|
|
(match_case
|
|
(pattern
|
|
(literal
|
|
(number_literal))))
|
|
(match_case
|
|
(pattern
|
|
(literal
|
|
(number_literal))))
|
|
(match_case
|
|
(pattern
|
|
(literal
|
|
(number_literal)))
|
|
(expression
|
|
(subexpression
|
|
(subexpression_token
|
|
(literal
|
|
(string_literal))))))
|
|
(match_case
|
|
(pattern
|
|
(extended_name
|
|
(name_identifier)))
|
|
(expression
|
|
(subexpression
|
|
(function_call_expression
|
|
(subexpression_token
|
|
(scoped_statement
|
|
(superexpression
|
|
(expression
|
|
(subexpression
|
|
(binary_operator_expression
|
|
(subexpression
|
|
(subexpression_token
|
|
(literal
|
|
(number_literal))))
|
|
(operator)
|
|
(subexpression
|
|
(subexpression_token
|
|
(literal
|
|
(number_literal))))))))))
|
|
(extended_name
|
|
(name_identifier))
|
|
(subexpression_token
|
|
(name_expression
|
|
(extended_name
|
|
(name_identifier)))))))
|
|
(expression
|
|
(subexpression
|
|
(subexpression_token
|
|
(literal
|
|
(string_literal))))))
|
|
(match_case
|
|
(pattern
|
|
(extended_name
|
|
(name_identifier)))
|
|
(expression
|
|
(subexpression
|
|
(function_call_expression
|
|
(subexpression_token
|
|
(scoped_statement
|
|
(superexpression
|
|
(expression
|
|
(subexpression
|
|
(binary_operator_expression
|
|
(subexpression
|
|
(subexpression_token
|
|
(literal
|
|
(number_literal))))
|
|
(operator)
|
|
(subexpression
|
|
(subexpression_token
|
|
(literal
|
|
(number_literal))))))))))
|
|
(extended_name
|
|
(name_identifier))
|
|
(subexpression_token
|
|
(name_expression
|
|
(extended_name
|
|
(name_identifier)))))))
|
|
(expression
|
|
(subexpression
|
|
(subexpression_token
|
|
(literal
|
|
(string_literal))))))
|
|
(match_case
|
|
(pattern
|
|
(extended_name
|
|
(name_identifier)))
|
|
(expression
|
|
(subexpression
|
|
(subexpression_token
|
|
(literal
|
|
(string_literal)))))))))))
|
|
(block_statement
|
|
(prefixed_expression
|
|
(return_expression
|
|
(expression
|
|
(subexpression
|
|
(subexpression_token
|
|
(name_expression
|
|
(extended_name
|
|
(name_identifier)))))))))))))))))
|