parser - example_test.go
1 package parser_test
2
3 import (
4 "fmt"
5
6 "vimagination.zapto.org/parser"
7 )
8
9 func Example() {
10 const (
11 TokenWhitespace parser.TokenType = iota
12 TokenWord
13 )
14
15 var start, word, whitespace parser.TokenFunc
16
17 whitespace = func(t *parser.Tokeniser) (parser.Token, parser.TokenFunc) {
18 t.AcceptRun(" ")
19
20 if t.Len() == 0 {
21 return t.Done()
22 }
23
24 return t.Return(TokenWhitespace, word)
25 }
26
27 word = func(t *parser.Tokeniser) (parser.Token, parser.TokenFunc) {
28 t.ExceptRun(" ")
29
30 if t.Len() == 0 {
31 return t.Done()
32 }
33
34 return t.Return(TokenWord, whitespace)
35 }
36
37 start = func(t *parser.Tokeniser) (parser.Token, parser.TokenFunc) {
38 if t.Peek() == ' ' {
39 return whitespace(t)
40 }
41
42 return word(t)
43 }
44
45 p := parser.New(parser.NewStringTokeniser("Hello World Foo Bar"))
46
47 p.TokeniserState(start)
48
49 for p.Peek().Type != parser.TokenDone {
50 tk := p.Next()
51 typ := "word"
52
53 if tk.Type == TokenWhitespace {
54 typ = "whitespace"
55 }
56
57 fmt.Printf("got token (%s): %q\n", typ, tk.Data)
58 }
59
60 // Output:
61 // got token (word): "Hello"
62 // got token (whitespace): " "
63 // got token (word): "World"
64 // got token (whitespace): " "
65 // got token (word): "Foo"
66 // got token (whitespace): " "
67 // got token (word): "Bar"
68 }
69