85 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package lexer
 | 
						|
 | 
						|
import "github.com/sashakoshka/arf/file"
 | 
						|
 | 
						|
// TokenKind is an enum represzenting what role a token has.
 | 
						|
type TokenKind int
 | 
						|
 | 
						|
const (
 | 
						|
	TokenKindNewline TokenKind = iota
 | 
						|
	TokenKindIndent
 | 
						|
 | 
						|
        TokenKindSeparator
 | 
						|
        TokenKindPermission
 | 
						|
        TokenKindReturnDirection
 | 
						|
 | 
						|
        TokenKindInt
 | 
						|
        TokenKindFloat
 | 
						|
        TokenKindString
 | 
						|
        TokenKindRune
 | 
						|
 | 
						|
        TokenKindName
 | 
						|
        TokenKindSymbol
 | 
						|
 | 
						|
        TokenKindColon
 | 
						|
        TokenKindDot
 | 
						|
        
 | 
						|
        TokenKindLBracket
 | 
						|
        TokenKindRBracket
 | 
						|
        TokenKindLBrace
 | 
						|
        TokenKindRBrace
 | 
						|
 | 
						|
        TokenKindPlus
 | 
						|
        TokenKindMinus
 | 
						|
        TokenKindAsterisk
 | 
						|
        TokenKindSlash
 | 
						|
 | 
						|
        TokenKindAt
 | 
						|
        TokenKindExclamation
 | 
						|
        TokenKindPercent
 | 
						|
        TokenKindTilde
 | 
						|
 | 
						|
        TokenKindLessThan
 | 
						|
        TokenKindLShift
 | 
						|
        TokenKindGreaterThan
 | 
						|
        TokenKindRShift
 | 
						|
        TokenKindBinaryOr
 | 
						|
        TokenKindLogicalOr
 | 
						|
        TokenKindBinaryAnd
 | 
						|
        TokenKindLogicalAnd
 | 
						|
)
 | 
						|
 | 
						|
// 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
 | 
						|
}
 | 
						|
 | 
						|
// Is returns whether or not the token is of kind kind.
 | 
						|
func (token Token) Is (kind TokenKind) (match bool) {
 | 
						|
	return token.kind == 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
 | 
						|
}
 | 
						|
 | 
						|
// Equals returns whether this token is equal to another token
 | 
						|
func (token Token) Equals (testToken Token) (match bool) {
 | 
						|
	return token == testToken
 | 
						|
} 
 | 
						|
 | 
						|
// Location returns the location of the token in its file.
 | 
						|
func (token Token) Location () (location file.Location) {
 | 
						|
	return token.location
 | 
						|
}
 |