-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathexpr.go
40 lines (34 loc) · 1.08 KB
/
expr.go
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
package main
import "github.com/chettriyuvraj/lox-crafting-interpreters/pkg/scanner"
type ExprVisitor interface {
// visitAssignExpr(expr *AssignExpr) (any, error)
visitBinaryExpr(expr *BinaryExpr) (any, error)
// visitCallExpr(expr *CallExpr) (any, error)
// visitGetExpr(expr *GetExpr) (any, error)
// visitGroupingExpr(expr *GroupingExpr) (any, error)
// visitLiteralExpr(expr *LiteralExpr) (any, error)
// visitLogicalExpr(expr *LogicalExpr) (any, error)
// visitSetExpr(expr *SetExpr) (any, error)
// visitSuperExpr(expr *SuperExpr) (any, error)
// visitThisExpr(expr *ThisExpr) (any, error)
// visitUnaryExpr(expr *UnaryExpr) (any, error)
// visitVariableExpr(expr *VariableExpr) (any, error)
}
type Expr interface {
accept(visitor ExprVisitor) (any, error)
}
type BinaryExpr struct {
left Expr
operator *scanner.Token
right Expr
}
func NewBinaryExpr(left Expr, operator *scanner.Token, right Expr) *BinaryExpr {
return &BinaryExpr{
left,
operator,
right,
}
}
func (expr *BinaryExpr) accept(visitor ExprVisitor) (any, error) {
return visitor.visitBinaryExpr(expr)
}