40 lines
737 B
Go
40 lines
737 B
Go
// SPDX-License-Identifier: Unlicense
|
|
|
|
package bytes_test
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"git.codemonkeysoftware.net/b/gigaparsec"
|
|
"git.codemonkeysoftware.net/b/gigaparsec/bytes"
|
|
)
|
|
|
|
func Example() {
|
|
ptokens := gigaparsec.Choose(
|
|
bytes.MatchString("("),
|
|
bytes.MatchString(")"),
|
|
bytes.MatchString("+"),
|
|
bytes.MatchString("-"),
|
|
bytes.Regexp(`[a-zA-Z][a-zA-Z0-9_]*`).Label("identifier"),
|
|
bytes.Regexp(`[0-9]+`).Label("number"),
|
|
)
|
|
|
|
tokenize := gigaparsec.Repeat(0, bytes.Token[string](bytes.WhitespaceASCII())(ptokens))
|
|
const src = `(alpha
|
|
+ 42 ) -5 `
|
|
tokens, _ := tokenize.Run(strings.NewReader(src))
|
|
for _, token := range tokens {
|
|
fmt.Println(token)
|
|
}
|
|
|
|
// Output:
|
|
// (
|
|
// alpha
|
|
// +
|
|
// 42
|
|
// )
|
|
// -
|
|
// 5
|
|
}
|