-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathExpr.java
More file actions
98 lines (79 loc) · 2.17 KB
/
Copy pathExpr.java
File metadata and controls
98 lines (79 loc) · 2.17 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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
public abstract class Expr {
public interface Visitor<R> {
R visitAssignExpr(AssignExpr expr);
R visitBinaryExpr(BinaryExpr expr);
R visitGroupingExpr(GroupingExpr expr);
R visitLiteralExpr(LiteralExpr expr);
R visitUnaryExpr(UnaryExpr expr);
R visitVariableExpr(VariableExpr expr);
}
public abstract <R> R accept(Visitor<R> visitor);
}
class AssignExpr extends Expr {
public final Token name;
public final Expr value;
public AssignExpr(Token name, Expr value) {
this.name = name;
this.value = value;
}
@Override
public <R> R accept(Visitor<R> visitor) {
return visitor.visitAssignExpr(this);
}
}
class BinaryExpr extends Expr {
public final Expr left;
public final Token operator;
public final Expr right;
public BinaryExpr(Expr left, Token operator, Expr right) {
this.left = left;
this.operator = operator;
this.right = right;
}
@Override
public <R> R accept(Visitor<R> visitor) {
return visitor.visitBinaryExpr(this);
}
}
class GroupingExpr extends Expr {
public final Expr expression;
public GroupingExpr(Expr expression) {
this.expression = expression;
}
@Override
public <R> R accept(Visitor<R> visitor) {
return visitor.visitGroupingExpr(this);
}
}
class LiteralExpr extends Expr {
public final Object value;
public LiteralExpr(Object value) {
this.value = value;
}
@Override
public <R> R accept(Visitor<R> visitor) {
return visitor.visitLiteralExpr(this);
}
}
class UnaryExpr extends Expr {
public final Token operator;
public final Expr right;
public UnaryExpr(Token operator, Expr right) {
this.operator = operator;
this.right = right;
}
@Override
public <R> R accept(Visitor<R> visitor) {
return visitor.visitUnaryExpr(this);
}
}
class VariableExpr extends Expr {
public final Token name;
public VariableExpr(Token name) {
this.name = name;
}
@Override
public <R> R accept(Visitor<R> visitor) {
return visitor.visitVariableExpr(this);
}
}