-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathExpr.cs
More file actions
82 lines (68 loc) · 2.37 KB
/
Copy pathExpr.cs
File metadata and controls
82 lines (68 loc) · 2.37 KB
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
namespace SharpLox;
public interface Expr
{
public interface Visitor<T>
{
T VisitAssignExpr(Assign expr);
T VisitBinaryExpr(Binary expr);
T VisitCallExpr(Call expr);
T VisitGetExpr(Get expr);
T VisitGroupingExpr(Grouping expr);
T VisitLiteralExpr(Literal expr);
T VisitLogicalExpr(Logical expr);
T VisitSetExpr(Set expr);
T VisitThisExpr(This expr);
T VisitSuperExpr(Super expr);
T VisitUnaryExpr(Unary expr);
T VisitVariableExpr(Variable expr);
}
T Accept<T>(Visitor<T> visitor);
public record Assign(Token Name, Expr Value) : Expr
{
public T Accept<T>(Visitor<T> visitor) => visitor.VisitAssignExpr(this);
}
public record Binary(Expr Left, Token Operator, Expr Right) : Expr
{
public T Accept<T>(Visitor<T> visitor) => visitor.VisitBinaryExpr(this);
}
public record Call(Expr Callee, Token Paren, List<Expr> Arguments) : Expr
{
public T Accept<T>(Visitor<T> visitor) => visitor.VisitCallExpr(this);
}
public record Get(Expr Object, Token Name) : Expr
{
public T Accept<T>(Visitor<T> visitor) => visitor.VisitGetExpr(this);
}
public record Grouping(Expr Expression) : Expr
{
public T Accept<T>(Visitor<T> visitor) => visitor.VisitGroupingExpr(this);
}
public record Literal(object? Value) : Expr
{
public T Accept<T>(Visitor<T> visitor) => visitor.VisitLiteralExpr(this);
}
public record Logical(Expr Left, Token Operator, Expr Right) : Expr
{
public T Accept<T>(Visitor<T> visitor) => visitor.VisitLogicalExpr(this);
}
public record Set(Expr Object, Token Name, Expr Value) : Expr
{
public T Accept<T>(Visitor<T> visitor) => visitor.VisitSetExpr(this);
}
public record This(Token Keyword) : Expr
{
public T Accept<T>(Visitor<T> visitor) => visitor.VisitThisExpr(this);
}
public record Super(Token Keyword, Token Method) : Expr
{
public T Accept<T>(Visitor<T> visitor) => visitor.VisitSuperExpr(this);
}
public record Unary(Token Operator, Expr Right) : Expr
{
public T Accept<T>(Visitor<T> visitor) => visitor.VisitUnaryExpr(this);
}
public record Variable(Token Name) : Expr
{
public T Accept<T>(Visitor<T> visitor) => visitor.VisitVariableExpr(this);
}
}