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
 | |
| }
 |