/
node.ay
63 lines (43 loc) · 1.52 KB
/
node.ay
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
module(Atomy::AST):
'_ pattern :=
Atomy::Patterns::Any new
`(~h . ~t) pattern :=
Atomy::Patterns::HeadTail new(h to-pattern, t to-pattern)
`(~p = ~d) pattern :=
Atomy::Patterns::Default new(p to-pattern, d)
`(? ~t) pattern :=
Atomy::Patterns::Predicate new(Atomy::Patterns::Any new, t)
`(~p ? ~t) pattern :=
Atomy::Patterns::Predicate new(p to-pattern, t)
`(~a & ~b) pattern :=
Atomy::Patterns::And new(a to-pattern, b to-pattern)
`(~a | ~b) pattern :=
Atomy::Patterns::Or new(a to-pattern, b to-pattern)
`(~x with(~e, ~y)) pattern :=
Atomy::Patterns::With new(x to-pattern, e, y to-pattern)
`(with(~e, ~y)) pattern :=
Atomy::Patterns::With new(Atomy::Patterns::Any new, e, y to-pattern)
`@@~n pattern :=
Atomy::Patterns::NamedClass new(n name)
`$~n pattern :=
Atomy::Patterns::NamedGlobal new(n name)
`@~n pattern :=
Atomy::Patterns::NamedInstance new(n name)
`%~x pattern :=
Atomy::Patterns::RuntimeClass new(x, nil)
`&~x pattern :=
Atomy::Patterns::BlockPass new(x to-pattern)
`*~x pattern :=
Atomy::Patterns::Splat new(x to-pattern)
'self pattern :=
Atomy::Patterns::Match new(#self)
'true pattern :=
Atomy::Patterns::Match new(#true)
'false pattern :=
Atomy::Patterns::Match new(#false)
'nil pattern :=
Atomy::Patterns::Match new(#nil)
`#~(x: Atomy::AST::Variable) pattern :=
Atomy::Patterns::Literal new(x name to-sym)
`(Particle [~*as]) pattern :=
Atomy::Patterns::List new(as collect [a]: a to-pattern)