mirror of
https://codeberg.org/ProgramSnail/lang_2023.git
synced 2025-12-06 06:58:45 +00:00
variable namespace, function declaration fixes
This commit is contained in:
parent
c31b20fa24
commit
f973f65b5b
17 changed files with 511 additions and 98 deletions
|
|
@ -16,7 +16,7 @@ def fact : n =
|
|||
| _ -> error "n must be positive"
|
||||
|
||||
decl find_prefix_hashes ('H : (#AccHash Char)) : String -> (Array 'H)
|
||||
def find_prefix_hashes 'H : str = {
|
||||
def find_prefix_hashes : str = {
|
||||
var hashes = (Array 'H).new (str.size () + 1)
|
||||
|
||||
; hashes:0 = 'H.of str:0
|
||||
|
|
@ -38,7 +38,7 @@ def find_substring : str substr = {
|
|||
const substr_hash = Hash.of substr
|
||||
|
||||
for i in 0..(str_hashes.size () - substr.size ()) do {
|
||||
const part_hash = Hash.diff str_hashes:(i + substr->size ()) str_hashes:i
|
||||
const part_hash = Hash.diff str_hashes(i + substr->size ()) str_hashes:i
|
||||
|
||||
if part_hash == substr_hash then {
|
||||
; result.push i
|
||||
|
|
|
|||
245
tests/match.lang
245
tests/match.lang
|
|
@ -1,15 +1,244 @@
|
|||
================================================================================
|
||||
Match
|
||||
================================================================================
|
||||
|
||||
def fruit_cost : fruit = {
|
||||
return (match fruit with
|
||||
| $Banana -> 11
|
||||
| $Apple | $Orange -> 7)
|
||||
return (match fruit with
|
||||
| $Banana -> 11
|
||||
| $Apple | $Orange -> 7)
|
||||
}
|
||||
|
||||
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"
|
||||
| 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
|
||||
(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
|
||||
(type_subexpression
|
||||
(type_identifier)))))
|
||||
(expression
|
||||
(subexpression
|
||||
(subexpression_token
|
||||
(literal
|
||||
(number_literal))))))
|
||||
(match_case
|
||||
(pattern
|
||||
(type_constructor_pattern
|
||||
(type_expression
|
||||
(type_subexpression
|
||||
(type_identifier))))))
|
||||
(match_case
|
||||
(pattern
|
||||
(type_constructor_pattern
|
||||
(type_expression
|
||||
(type_subexpression
|
||||
(type_identifier)))))
|
||||
(expression
|
||||
(subexpression
|
||||
(subexpression_token
|
||||
(literal
|
||||
(number_literal))))))))))))))))))))))
|
||||
(source_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
|
||||
(pattern_token
|
||||
(literal
|
||||
(number_literal))))
|
||||
(expression
|
||||
(subexpression
|
||||
(function_call_expression
|
||||
(extended_name
|
||||
(name_identifier))
|
||||
(function_argument
|
||||
(subexpression_token
|
||||
(literal
|
||||
(unit_literal)))))))
|
||||
(expression
|
||||
(subexpression
|
||||
(subexpression_token
|
||||
(literal
|
||||
(string_literal))))))
|
||||
(match_case
|
||||
(pattern
|
||||
(pattern_token
|
||||
(literal
|
||||
(number_literal)))))
|
||||
(match_case
|
||||
(pattern
|
||||
(pattern_token
|
||||
(literal
|
||||
(number_literal)))))
|
||||
(match_case
|
||||
(pattern
|
||||
(pattern_token
|
||||
(literal
|
||||
(number_literal)))))
|
||||
(match_case
|
||||
(pattern
|
||||
(pattern_token
|
||||
(literal
|
||||
(number_literal)))))
|
||||
(match_case
|
||||
(pattern
|
||||
(pattern_token
|
||||
(literal
|
||||
(number_literal))))
|
||||
(expression
|
||||
(subexpression
|
||||
(subexpression_token
|
||||
(literal
|
||||
(string_literal))))))
|
||||
(match_case
|
||||
(pattern
|
||||
(pattern_token
|
||||
(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))
|
||||
(function_argument
|
||||
(subexpression_token
|
||||
(name_expression
|
||||
(extended_name
|
||||
(name_identifier))))))))
|
||||
(expression
|
||||
(subexpression
|
||||
(subexpression_token
|
||||
(literal
|
||||
(string_literal))))))
|
||||
(match_case
|
||||
(pattern
|
||||
(pattern_token
|
||||
(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))
|
||||
(function_argument
|
||||
(subexpression_token
|
||||
(name_expression
|
||||
(extended_name
|
||||
(name_identifier))))))))
|
||||
(expression
|
||||
(subexpression
|
||||
(subexpression_token
|
||||
(literal
|
||||
(string_literal))))))
|
||||
(match_case
|
||||
(pattern
|
||||
(pattern_token
|
||||
(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))))))))))))))))
|
||||
|
|
|
|||
|
|
@ -10,6 +10,10 @@ namespace Array {
|
|||
decl something : Unit -> Unit
|
||||
}
|
||||
|
||||
namespace var a : Array {
|
||||
namespace var : Array {
|
||||
decl something : Unit -> Unit
|
||||
}
|
||||
|
||||
namespace const : Array {
|
||||
decl something : Unit -> Unit
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,10 +2,7 @@ typeclass Copy =
|
|||
& copy : Copy -> Copy
|
||||
|
||||
typeclass (Ord : #Eq) =
|
||||
& ( < ) : Ord -> Ord -> Bool
|
||||
& ( > ) : Ord -> Ord -> Bool
|
||||
& ( <= ) : Ord -> Ord -> Bool
|
||||
& ( >= ) : Ord -> Ord -> Bool
|
||||
& is_less_then : Ord -> Bool
|
||||
|
||||
typeclass (D : #A #B #C) 'A 'B =
|
||||
& do_something : Unit -> (& 'A & 'B)
|
||||
|
|
@ -13,8 +10,17 @@ typeclass (D : #A #B #C) 'A 'B =
|
|||
typeclass E 'A =
|
||||
& do_something : Unit -> 'A
|
||||
|
||||
namespace const ord : Ord {
|
||||
def ( <= ) : a b = (a < b) || (a == b)
|
||||
def ( > ) : a b = !(a <= b)
|
||||
def ( >= ) : a b = !(a < b)
|
||||
}
|
||||
decl ( == ) ('A : #Ord) : 'A -> 'A -> Bool
|
||||
def ( == ) : a b = a.is_equal_to b
|
||||
|
||||
decl ( < ) ('A : #Ord) : 'A -> 'A -> Bool
|
||||
def ( < ) : a b = a.is_less_then b
|
||||
|
||||
decl ( > ) ('A : #Ord) : 'A -> 'A -> Bool
|
||||
def ( > ) : a b = !(a <= b)
|
||||
|
||||
decl ( <= ) ('A : #Ord) : 'A -> 'A -> Bool
|
||||
def ( <= ) : a b = (a < b) || (a == b)
|
||||
|
||||
decl ( >= ) ('A : #Ord) : 'A -> 'A -> Bool
|
||||
def ( >= ) : a b = !(a < b)
|
||||
|
|
|
|||
|
|
@ -1,3 +1,7 @@
|
|||
================================================================================
|
||||
Types
|
||||
================================================================================
|
||||
|
||||
alias T1 = Int
|
||||
|
||||
abstract (T2 : #A #B #C)
|
||||
|
|
@ -6,3 +10,44 @@ abstract (T2 : #A #B #C)
|
|||
let T2 = Int
|
||||
let T2 = Float
|
||||
let T2 = Complex
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
(source_file
|
||||
(source_statement
|
||||
(alias_definition_statement
|
||||
(type_identifier)
|
||||
(type_expression
|
||||
(type_subexpression
|
||||
(type_identifier)))))
|
||||
(source_statement
|
||||
(abstract_type_definition_statement
|
||||
(annotated_type
|
||||
(type_identifier)
|
||||
(typeclass_expression
|
||||
(typeclass_subexpression
|
||||
(typeclass_identifier)))
|
||||
(typeclass_expression
|
||||
(typeclass_subexpression
|
||||
(typeclass_identifier)))
|
||||
(typeclass_expression
|
||||
(typeclass_subexpression
|
||||
(typeclass_identifier))))))
|
||||
(source_statement
|
||||
(alias_definition_statement
|
||||
(type_identifier)
|
||||
(type_expression
|
||||
(type_subexpression
|
||||
(type_identifier)))))
|
||||
(source_statement
|
||||
(alias_definition_statement
|
||||
(type_identifier)
|
||||
(type_expression
|
||||
(type_subexpression
|
||||
(type_identifier)))))
|
||||
(source_statement
|
||||
(alias_definition_statement
|
||||
(type_identifier)
|
||||
(type_expression
|
||||
(type_subexpression
|
||||
(type_identifier))))))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue