lexerStream.go 648 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. package govaluate
  2. type lexerStream struct {
  3. source []rune
  4. position int
  5. length int
  6. }
  7. func newLexerStream(source string) *lexerStream {
  8. var ret *lexerStream
  9. var runes []rune
  10. for _, character := range source {
  11. runes = append(runes, character)
  12. }
  13. ret = new(lexerStream)
  14. ret.source = runes
  15. ret.length = len(runes)
  16. return ret
  17. }
  18. func (this *lexerStream) readCharacter() rune {
  19. var character rune
  20. character = this.source[this.position]
  21. this.position += 1
  22. return character
  23. }
  24. func (this *lexerStream) rewind(amount int) {
  25. this.position -= amount
  26. }
  27. func (this lexerStream) canRead() bool {
  28. return this.position < this.length
  29. }