40 lines
648 B
Go
40 lines
648 B
Go
|
package govaluate
|
||
|
|
||
|
type lexerStream struct {
|
||
|
source []rune
|
||
|
position int
|
||
|
length int
|
||
|
}
|
||
|
|
||
|
func newLexerStream(source string) *lexerStream {
|
||
|
|
||
|
var ret *lexerStream
|
||
|
var runes []rune
|
||
|
|
||
|
for _, character := range source {
|
||
|
runes = append(runes, character)
|
||
|
}
|
||
|
|
||
|
ret = new(lexerStream)
|
||
|
ret.source = runes
|
||
|
ret.length = len(runes)
|
||
|
return ret
|
||
|
}
|
||
|
|
||
|
func (this *lexerStream) readCharacter() rune {
|
||
|
|
||
|
var character rune
|
||
|
|
||
|
character = this.source[this.position]
|
||
|
this.position += 1
|
||
|
return character
|
||
|
}
|
||
|
|
||
|
func (this *lexerStream) rewind(amount int) {
|
||
|
this.position -= amount
|
||
|
}
|
||
|
|
||
|
func (this lexerStream) canRead() bool {
|
||
|
return this.position < this.length
|
||
|
}
|