feat: tokenizer

This commit is contained in:
2025-12-23 14:17:43 -05:00
parent 4845acea73
commit 61bb622dcd
8 changed files with 227 additions and 0 deletions

39
pkg/iterator/iterator.go Normal file
View File

@@ -0,0 +1,39 @@
package iterator
import "fmt"
type Iterator[T any] struct {
data []T
index int
}
func New[T any](items []T) Iterator[T] {
return Iterator[T]{ data: items, index: 0 }
}
func (i Iterator[T]) Index() int {
return i.index
}
func (i Iterator[T]) IsDone() bool {
return i.index == len(i.data)
}
func (i Iterator[T]) Peek() (T, error) {
var null T
if i.IsDone() {
return null, fmt.Errorf("Iterator is exhausted.")
}
return i.data[i.index], nil
}
func (i *Iterator[T]) Next() (T, error) {
if val, err := i.Peek(); err != nil {
return val, err
} else {
i.index++
return val, nil
}
}