36 lines
635 B
Go
36 lines
635 B
Go
package token
|
|
|
|
// zero handles all tokens starting with a '0'.
|
|
func zero(tokens List, buffer []byte, i Position) (List, Position) {
|
|
position := i
|
|
i++
|
|
|
|
if i >= Position(len(buffer)) {
|
|
tokens = append(tokens, Token{Kind: Number, Position: position, Length: 1})
|
|
return tokens, i
|
|
}
|
|
|
|
filter := isDigit
|
|
|
|
switch buffer[i] {
|
|
case 'x':
|
|
i++
|
|
filter = isHexDigit
|
|
|
|
case 'b':
|
|
i++
|
|
filter = isBinaryDigit
|
|
|
|
case 'o':
|
|
i++
|
|
filter = isOctalDigit
|
|
}
|
|
|
|
for i < Position(len(buffer)) && filter(buffer[i]) {
|
|
i++
|
|
}
|
|
|
|
tokens = append(tokens, Token{Kind: Number, Position: position, Length: Length(i - position)})
|
|
return tokens, i
|
|
}
|