tree-sitter-tony
Version:
Tony grammar for tree-sitter
259 lines (227 loc) • 7.51 kB
Plain Text
============================================
destructuring pattern
============================================
x@[y] := z
(program
term: (assignment
pattern: (destructuring_pattern
alias: (identifier_pattern_name)
pattern: (list_pattern
element: (identifier_pattern
name: (identifier_pattern_name))))
value: (identifier)))
============================================
struct pattern
============================================
{ b: c :: Type } := a
{ b: c :: Type, d :: Type, ['e']: e :: Type, ...f :: Type = {} } := a
(program
term: (assignment
pattern: (destructuring_pattern
pattern: (struct_pattern
member: (member_pattern
key: (shorthand_member_identifier)
value: (identifier_pattern
name: (identifier_pattern_name)
type: (parametric_type
name: (type))))))
value: (identifier))
term: (assignment
pattern: (destructuring_pattern
pattern: (struct_pattern
member: (member_pattern
key: (shorthand_member_identifier)
value: (identifier_pattern
name: (identifier_pattern_name)
type: (parametric_type
name: (type))))
member: (shorthand_member_pattern
name: (identifier_pattern_name)
type: (parametric_type
name: (type)))
member: (member_pattern
key: (string)
value: (identifier_pattern
name: (identifier_pattern_name)
type: (parametric_type
name: (type))))
rest: (identifier_pattern
name: (identifier_pattern_name)
type: (parametric_type
name: (type))
default: (struct))))
value: (identifier)))
============================================
tagged struct pattern
============================================
<constructor>{ b: c :: Type } := a
<constructor>{ b: c :: Type, d :: Type, ['e']: e :: Type, ...f :: Type = {} } := a
(program
term: (assignment
pattern: (tagged_pattern
name: (identifier)
pattern: (destructuring_pattern
pattern: (struct_pattern
member: (member_pattern
key: (shorthand_member_identifier)
value: (identifier_pattern
name: (identifier_pattern_name)
type: (parametric_type
name: (type)))))))
value: (identifier))
term: (assignment
pattern: (tagged_pattern
name: (identifier)
pattern: (destructuring_pattern
pattern: (struct_pattern
member: (member_pattern
key: (shorthand_member_identifier)
value: (identifier_pattern
name: (identifier_pattern_name)
type: (parametric_type
name: (type))))
member: (shorthand_member_pattern
name: (identifier_pattern_name)
type: (parametric_type
name: (type)))
member: (member_pattern
key: (string)
value: (identifier_pattern
name: (identifier_pattern_name)
type: (parametric_type
name: (type))))
rest: (identifier_pattern
name: (identifier_pattern_name)
type: (parametric_type
name: (type))
default: (struct)))))
value: (identifier)))
============================================
tuple pattern
============================================
(a, b :: Type, ...c) := a
(program
term: (assignment
pattern: (destructuring_pattern
pattern: (tuple_pattern
element: (identifier_pattern
name: (identifier_pattern_name))
element: (identifier_pattern
name: (identifier_pattern_name)
type: (parametric_type
name: (type)))
rest: (identifier_pattern
name: (identifier_pattern_name))))
value: (identifier)))
============================================
tagged tuple pattern
============================================
<constructor>(a, b :: Type, ...c) := a
(program
term: (assignment
pattern: (tagged_pattern
name: (identifier)
pattern: (destructuring_pattern
pattern: (tuple_pattern
element: (identifier_pattern
name: (identifier_pattern_name))
element: (identifier_pattern
name: (identifier_pattern_name)
type: (parametric_type
name: (type)))
rest: (identifier_pattern
name: (identifier_pattern_name)))))
value: (identifier)))
============================================
list pattern
============================================
[b :: Type, c :: Type] := a
[b :: Type, c :: Type, ...d :: Type = [1]] := a
(program
term: (assignment
pattern: (destructuring_pattern
pattern: (list_pattern
element: (identifier_pattern
name: (identifier_pattern_name)
type: (parametric_type
name: (type)))
element: (identifier_pattern
name: (identifier_pattern_name)
type: (parametric_type
name: (type)))))
value: (identifier))
term: (assignment
pattern: (destructuring_pattern
pattern: (list_pattern
element: (identifier_pattern
name: (identifier_pattern_name)
type: (parametric_type
name: (type)))
element: (identifier_pattern
name: (identifier_pattern_name)
type: (parametric_type
name: (type)))
rest: (identifier_pattern
name: (identifier_pattern_name)
type: (parametric_type
name: (type))
default: (list
element: (number)))))
value: (identifier)))
============================================
tagged list pattern
============================================
<constructor>[b :: Type, c :: Type] := a
<constructor>[b :: Type, c :: Type, ...d :: Type = [1]] := a
(program
term: (assignment
pattern: (tagged_pattern
name: (identifier)
pattern: (destructuring_pattern
pattern: (list_pattern
element: (identifier_pattern
name: (identifier_pattern_name)
type: (parametric_type
name: (type)))
element: (identifier_pattern
name: (identifier_pattern_name)
type: (parametric_type
name: (type))))))
value: (identifier))
term: (assignment
pattern: (tagged_pattern
name: (identifier)
pattern: (destructuring_pattern
pattern: (list_pattern
element: (identifier_pattern
name: (identifier_pattern_name)
type: (parametric_type
name: (type)))
element: (identifier_pattern
name: (identifier_pattern_name)
type: (parametric_type
name: (type)))
rest: (identifier_pattern
name: (identifier_pattern_name)
type: (parametric_type
name: (type))
default: (list
element: (number))))))
value: (identifier)))
============================================
tagged pattern
============================================
<constructor> := a
(program
term: (assignment
pattern: (tagged_pattern
name: (identifier))
value: (identifier)))