Lex will buffer and return the tokens of a disposable *[Lexer].
(source file.Source)
| 14 | |
| 15 | // Lex will buffer and return the tokens of a disposable *[Lexer]. |
| 16 | func Lex(source file.Source) ([]Token, error) { |
| 17 | tokens := make([]Token, 0, ringChunkSize) |
| 18 | l := New() |
| 19 | l.Reset(source) |
| 20 | for { |
| 21 | t, err := l.Next() |
| 22 | switch err { |
| 23 | case nil: |
| 24 | tokens = append(tokens, t) |
| 25 | case io.EOF: |
| 26 | return tokens, nil |
| 27 | default: |
| 28 | return nil, err |
| 29 | } |
| 30 | } |
| 31 | } |
| 32 | |
| 33 | // New returns a reusable lexer. |
| 34 | func New() *Lexer { |