This repository has been archived on 2022-08-30. You can view files and clone it, but cannot push or open issues or pull requests.
arf/lexer/token.go

75 lines
1.6 KiB
Go
Raw Normal View History

2022-08-07 19:18:30 +00:00
package lexer
import "github.com/sashakoshka/arf/file"
2022-08-07 19:18:30 +00:00
// TokenKind is an enum represzenting what role a token has.
type TokenKind int
const (
TokenKindNewline TokenKind = iota
TokenKindIndent
TokenKindSeparator
TokenKindPermission
2022-08-10 04:48:18 +00:00
TokenKindReturnDirection
2022-08-07 19:18:30 +00:00
TokenKindInt
TokenKindFloat
TokenKindString
TokenKindRune
TokenKindName
TokenKindSymbol
TokenKindColon
TokenKindDot
TokenKindLBracket
TokenKindRBracket
TokenKindLBrace
TokenKindRBrace
2022-08-10 04:48:18 +00:00
TokenKindPlus
TokenKindMinus
TokenKindAsterisk
TokenKindSlash
TokenKindAt
TokenKindExclamation
TokenKindPercent
TokenKindTilde
TokenKindLessThan
TokenKindLShift
TokenKindGreaterThan
TokenKindRShift
TokenKindBinaryOr
TokenKindLogicalOr
TokenKindBinaryAnd
TokenKindLogicalAnd
2022-08-07 19:18:30 +00:00
)
// Token represents a single token. It holds its location in the file, as well
// as a value and some semantic information defining the token's role.
type Token struct {
kind TokenKind
location file.Location
value any
}
// Kind returns the semantic role of the token.
func (token Token) Kind () (kind TokenKind) {
return token.kind
}
// Value returns the value of the token. Depending on what kind of token it is,
// this value may be nil.
func (token Token) Value () (value any) {
return token.value
}
// Location returns the location of the token in its file.
func (token Token) Location () (location file.Location) {
return token.location
}