scanner

最后更新于:2022-04-02 02:46:24

[TOC] ## 概述 scanner包提供对utf-8文本的token扫描服务。它会从一个io.Reader获取utf-8文本,通过对Scan方法的重复调用获取一个个token。为了兼容已有的工具,NUL字符不被接受。如果第一个字符是表示utf-8编码格式的BOM标记,会自动忽略该标记。 一般Scanner会跳过空白和Go注释,并会识别所有go语言规格的字面量。它可以定制为只识别这些字面量的一个子集,也可以识别不同的空白字符 ## 语法 ``` func TokenString(tok rune) string type Position func (pos *Position) IsValid() bool func (pos Position) String() string type Scanner func (s *Scanner) Init(src io.Reader) *Scanner func (s *Scanner) Next() rune func (s *Scanner) Peek() rune func (s *Scanner) Pos() (pos Position) func (s *Scanner) Scan() rune func (s *Scanner) TokenText() string ``` ## 示例 ``` const src = ` // This is scanned code. if a > 10 { someParsable = text }` var s scanner.Scanner s.Init(strings.NewReader(src)) s.Filename = "example" for tok := s.Scan(); tok != scanner.EOF; tok = s.Scan() { fmt.Printf("%s: %s\n", s.Position, s.TokenText()) } // Output: // example:3:1: if // example:3:4: a // example:3:6: > // example:3:8: 10 // example:3:11: { // example:4:2: someParsable // example:4:15: = // example:4:17: text // example:5:1: } ```
';