-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathtoken.go
More file actions
69 lines (60 loc) · 946 Bytes
/
token.go
File metadata and controls
69 lines (60 loc) · 946 Bytes
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
package te
import "fmt"
type tokenType int
const (
tokenAnd tokenType = iota
tokenAt
tokenColon
tokenDaily
tokenDigit
tokenError
tokenEvery
tokenEOF
tokenHourly
tokenIn
tokenLast
tokenMidnight
tokenNoon
tokenOf
tokenOn
tokenOrdinal
tokenThe
tokenTwelveHour
tokenWeekday
tokenWeekly
tokenMonth
tokenMonthly
tokenQuarterly
tokenUnitDay
tokenUnitHour
tokenUnitMinute
tokenUnitMonth
tokenUnitSecond
tokenUnitWeek
tokenUnitYear
tokenYearly
)
const eof = rune(-1)
type token struct {
typ tokenType
val string
}
func (t token) String() string {
switch t.typ {
case tokenError:
return t.val
case tokenEOF:
return "EOF"
}
return fmt.Sprintf("%q", t.val)
}
type parseError struct {
token token
message string
}
func (e parseError) Error() string {
return fmt.Sprintf("%s, token: %q", e.message, e.token.val)
}
func newParseError(t token, message string) parseError {
return parseError{t, message}
}