-
Notifications
You must be signed in to change notification settings - Fork 1
/
string.go
47 lines (41 loc) · 979 Bytes
/
string.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
41
42
43
44
45
46
47
package eval
import "fmt"
func (v Var) String() string {
return "(" + string(v) + ")"
}
func (l literal) String() string {
return fmt.Sprintf("(%f)", float64(l))
}
func (u unary) String() string {
switch u.op {
case '+':
return "(+" + u.x.String() + ")"
case '-':
return "(-" + u.x.String() + ")"
}
return "???"
}
func (b binary) String() string {
switch b.op {
case '+':
return "(" + b.x.String() + " + " + b.y.String() + ")"
case '-':
return "(" + b.x.String() + " - " + b.y.String() + ")"
case '*':
return "(" + b.x.String() + " * " + b.y.String() + ")"
case '/':
return "(" + b.x.String() + " / " + b.y.String() + ")"
}
return "(" + b.x.String() + "???" + b.y.String() + ")"
}
func (c call) String() string {
switch c.fn {
case "pow":
return "pow(" + c.args[0].String() + ", " + c.args[1].String() + ")"
case "sin":
return "sin(" + c.args[0].String() + ")"
case "sqrt":
return "sqrt(" + c.args[0].String() + ")"
}
return "???()"
}