前言
token package 包含了 golang 词法分析相关的数据结构和方法,源代码位于 <go-src>/src/go/token
token.go
源代码中的注释很赞!
Token type
Token is the set of lexical tokens of the Go programming language
type Token int
tokens
The list of tokens(token ids)
const (
// Special tokens
ILLEGAL Token = iota
EOF
COMMENT
literal_begin
...
literal_end
operator_beg
...
operator_end
keyword_beg
...
keyword_end
)
使用 const 定义了 Go 语言 tokens,这里有一个地方值得学习:使用 xxx_beg 和 xxx_end 这一对伪 token 作为不同的 token group 分界,方便快速判断 token 类型
接下来是 token 对应的字符串描述(token string) 和 上述的 const 一一对应
var tokens = [...]string {
ILLEGAL: "ILLEGAL",
EOF: "EOF",
COMMENT: "COMMENT",
...
}
根据 token id 查询 token string
查询 tokens 数组,在此之前检查数组越界
func (tok Token) String() string {
s := ""
if 0 <= tok && tok < Token(len(tokens)) {
s = tokens[tok]
}
if s == "" {
s = "token(" + strconv.Itoa(int(tok)) + ")"
}
return s
}
keywords
var keywords map[string]Token
总结
有疑问加站长微信联系(非本文作者)