| | |
| | |
| | |
| |
|
| | package scanner_test |
| |
|
| | import ( |
| | "fmt" |
| | "strings" |
| | "text/scanner" |
| | "unicode" |
| | ) |
| |
|
| | func Example() { |
| | 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()) |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | } |
| |
|
| | func Example_isIdentRune() { |
| | const src = "%var1 var2%" |
| |
|
| | var s scanner.Scanner |
| | s.Init(strings.NewReader(src)) |
| | s.Filename = "default" |
| |
|
| | for tok := s.Scan(); tok != scanner.EOF; tok = s.Scan() { |
| | fmt.Printf("%s: %s\n", s.Position, s.TokenText()) |
| | } |
| |
|
| | fmt.Println() |
| | s.Init(strings.NewReader(src)) |
| | s.Filename = "percent" |
| |
|
| | |
| | s.IsIdentRune = func(ch rune, i int) bool { |
| | return ch == '%' && i == 0 || unicode.IsLetter(ch) || unicode.IsDigit(ch) && i > 0 |
| | } |
| |
|
| | for tok := s.Scan(); tok != scanner.EOF; tok = s.Scan() { |
| | fmt.Printf("%s: %s\n", s.Position, s.TokenText()) |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | } |
| |
|
| | func Example_mode() { |
| | const src = ` |
| | // Comment begins at column 5. |
| | |
| | This line should not be included in the output. |
| | |
| | /* |
| | This multiline comment |
| | should be extracted in |
| | its entirety. |
| | */ |
| | ` |
| |
|
| | var s scanner.Scanner |
| | s.Init(strings.NewReader(src)) |
| | s.Filename = "comments" |
| | s.Mode ^= scanner.SkipComments |
| |
|
| | for tok := s.Scan(); tok != scanner.EOF; tok = s.Scan() { |
| | txt := s.TokenText() |
| | if strings.HasPrefix(txt, "//") || strings.HasPrefix(txt, "/*") { |
| | fmt.Printf("%s: %s\n", s.Position, txt) |
| | } |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | } |
| |
|
| | func Example_whitespace() { |
| | |
| | const src = `aa ab ac ad |
| | ba bb bc bd |
| | ca cb cc cd |
| | da db dc dd` |
| |
|
| | var ( |
| | col, row int |
| | s scanner.Scanner |
| | tsv [4][4]string |
| | ) |
| | s.Init(strings.NewReader(src)) |
| | s.Whitespace ^= 1<<'\t' | 1<<'\n' |
| |
|
| | for tok := s.Scan(); tok != scanner.EOF; tok = s.Scan() { |
| | switch tok { |
| | case '\n': |
| | row++ |
| | col = 0 |
| | case '\t': |
| | col++ |
| | default: |
| | tsv[row][col] = s.TokenText() |
| | } |
| | } |
| |
|
| | fmt.Print(tsv) |
| |
|
| | |
| | |
| | } |
| |
|