func (r *Lexer) fetchFalse() {
	r.pos += 5
	if r.pos > len(r.Data) ||
		r.Data[r.pos-4] != 'a' ||
		r.Data[r.pos-3] != 'l' ||
		r.Data[r.pos-2] != 's' ||
		r.Data[r.pos-1] != 'e' ||
		(r.pos != len(r.Data) && !isTokenEnd(r.Data[r.pos])) {
		r.pos -= 5
		r.errSyntax()
	}
}
fetchFalse fetches and checks remaining bytes of false keyword.
package jlexer
import (
	"encoding/base64"
	"encoding/json"
	"errors"
	"fmt"
	"io"
	"strconv"
	"unicode"
	"unicode/utf16"
	"unicode/utf8"
)
type tokenKind byte
const (
	tokenUndef  tokenKind = iota  
	tokenDelim                    
	tokenString                   
	tokenNumber                   
	tokenBool                     
	tokenNull                     
)
type token struct {
	kind tokenKind  
	boolValue  bool    
	byteValue  []byte  
	delimValue byte
}
type Lexer struct {
	Data []byte  
	start int    
	pos   int    
	token token  
	firstElement bool  
	wantSep      byte  
	UseMultipleErrors bool           
	fatalError        error          
	multipleErrors    []*LexerError  
}
func (r *Lexer) FetchToken() {
	r.token.kind = tokenUndef
	r.start = r.pos
	if len(r.Data) < r.pos {
		r.errParse("Unexpected end of data")
		return
	}
	for _, c := range r.Data[r.pos:] {
		switch c {
		case ':', ',':
			if r.wantSep == c {
				r.pos++
				r.start++
				r.wantSep = 0
			} else {
				r.errSyntax()
			}
		case ' ', '\t', '\r', '\n':
			r.pos++
			r.start++
		case '"':
			if r.wantSep != 0 {
				r.errSyntax()
			}
			r.token.kind = tokenString
			r.fetchString()
			return
		case '{', '[':
			if r.wantSep != 0 {
				r.errSyntax()
			}
			r.firstElement = true
			r.token.kind = tokenDelim
			r.token.delimValue = r.Data[r.pos]
			r.pos++
			return
		case '}', ']':
			if !r.firstElement && (r.wantSep != ',') {
				r.errSyntax()
			}
			r.wantSep = 0
			r.token.kind = tokenDelim
			r.token.delimValue = r.Data[r.pos]
			r.pos++
			return
		case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '-':
			if r.wantSep != 0 {
				r.errSyntax()
			}
			r.token.kind = tokenNumber
			r.fetchNumber()
			return
		case 'n':
			if r.wantSep != 0 {
				r.errSyntax()
			}
			r.token.kind = tokenNull
			r.fetchNull()
			return
		case 't':
			if r.wantSep != 0 {
				r.errSyntax()
			}
			r.token.kind = tokenBool
			r.token.boolValue = true
			r.fetchTrue()
			return
		case 'f':
			if r.wantSep != 0 {
				r.errSyntax()
			}
			r.token.kind = tokenBool
			r.token.boolValue = false
			r.fetchFalse()
			return
		default:
			r.errSyntax()
			return
		}
	}
	r.fatalError = io.EOF
	return
}
func isTokenEnd(c byte) bool {
	return c == ' ' || c == '\t' || c == '\r' || c == '\n' || c == '[' || c == ']' || c == '{' || c == '}' || c == ',' || c == ':'
}
func (r *Lexer) fetchNull() {
	r.pos += 4
	if r.pos > len(r.Data) ||
		r.Data[r.pos-3] != 'u' ||
		r.Data[r.pos-2] != 'l' ||
		r.Data[r.pos-1] != 'l' ||
		(r.pos != len(r.Data) && !isTokenEnd(r.Data[r.pos])) {
		r.pos -= 4
		r.errSyntax()
	}
}
func (r *Lexer) fetchTrue() {
	r.pos += 4
	if r.pos > len(r.Data) ||
		r.Data[r.pos-3] != 'r' ||
		r.Data[r.pos-2] != 'u' ||
		r.Data[r.pos-1] != 'e' ||
		(r.pos != len(r.Data) && !isTokenEnd(r.Data[r.pos])) {
		r.pos -= 4
		r.errSyntax()
	}
}