Go 1.8rc3 源代码学习:token
xingpingz · · 2115 次点击 · · 开始浏览前言
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
总结
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传
收入到我管理的专栏 新建专栏
前言
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