62 lines
1.0 KiB
Go
62 lines
1.0 KiB
Go
package rsql
|
|
|
|
// Tokens for RSQL FIQL
|
|
const (
|
|
TokIllegal = "TokIllegal"
|
|
TokEOF = "TokEOF"
|
|
|
|
TokIdent = "TokIdent"
|
|
TokInteger = "TokInteger"
|
|
TokString = "TokString"
|
|
TokFloat = "TokFloat"
|
|
TokExtend = "TokExtend"
|
|
|
|
TokLParen = "("
|
|
TokRParen = ")"
|
|
|
|
TokLBracket = "["
|
|
TokRBracket = "]"
|
|
|
|
TokLIKE = "~"
|
|
TokNLIKE= "!~"
|
|
TokNOT = "!"
|
|
TokLT = "<"
|
|
TokGT = ">"
|
|
TokLE = "<="
|
|
TokGE = ">="
|
|
TokEQ = "=="
|
|
TokNEQ = "!="
|
|
TokAND = ";"
|
|
TokOR = ","
|
|
|
|
TokTRUE = "true"
|
|
TokFALSE = "false"
|
|
TokNULL = "null"
|
|
)
|
|
|
|
var keywords = map[string]TokenType {
|
|
"true": TokTRUE,
|
|
"false": TokFALSE,
|
|
"null": TokNULL,
|
|
"and": TokAND,
|
|
"or": TokOR,
|
|
}
|
|
|
|
// TokenType is a token enumeration
|
|
type TokenType string
|
|
// Token is a type and literal pair
|
|
type Token struct {
|
|
Type TokenType
|
|
Literal string
|
|
}
|
|
|
|
func newToken(tokenType TokenType, ch rune) Token {
|
|
return Token{Type: tokenType, Literal: string(ch)}
|
|
}
|
|
|
|
func lookupIdent(ident string) TokenType {
|
|
if tok, ok := keywords[ident]; ok {
|
|
return tok
|
|
}
|
|
return TokIdent
|
|
} |