feat: implement SQL lexer and token types
This commit is contained in:
1 parent
7966ecba12
commit
c64315c46b
2 files changed
+71
No files matched your search
Binary file not shown.
@@ -0,0 +1,71 @@
|
|||||||
|
package kestrel.sql.lexer
|
||||||
|
|
||||||
|
enum class TokenType {
|
||||||
|
Identifier, IntLiteral, RealLiteral, TextLiteral,
|
||||||
|
Create, Table, Insert, Into, Values, Select, From, Where,
|
||||||
|
Order, By, Asc, Desc, Limit, Delete, Update, Set, Drop,
|
||||||
|
And, Or, Not, Null, True, False, Primary, Key, As,
|
||||||
|
Index, On, Inner, Left, Outer, Join, Group, Having,
|
||||||
|
Begin, Commit, Rollback, Transaction, Explain,
|
||||||
|
Integer, Text, Boolean, Real,
|
||||||
|
Equal, NotEqual, Less, LessEqual, Greater, GreaterEqual,
|
||||||
|
Plus, Minus, Star, Slash, Dot,
|
||||||
|
LeftParen, RightParen, Comma, Semicolon,
|
||||||
|
EndOfInput
|
||||||
|
}
|
||||||
|
|
||||||
|
data class Token(
|
||||||
|
val type: TokenType,
|
||||||
|
val lexeme: String,
|
||||||
|
val line: Int,
|
||||||
|
val column: Int,
|
||||||
|
val intValue: Long? = null,
|
||||||
|
val realValue: Double? = null,
|
||||||
|
val textValue: String? = null
|
||||||
|
)
|
||||||
|
|
||||||
|
internal val keywords: Map<String, TokenType> = mapOf(
|
||||||
|
"CREATE" to TokenType.Create,
|
||||||
|
"TABLE" to TokenType.Table,
|
||||||
|
"INSERT" to TokenType.Insert,
|
||||||
|
"INTO" to TokenType.Into,
|
||||||
|
"VALUES" to TokenType.Values,
|
||||||
|
"SELECT" to TokenType.Select,
|
||||||
|
"FROM" to TokenType.From,
|
||||||
|
"WHERE" to TokenType.Where,
|
||||||
|
"ORDER" to TokenType.Order,
|
||||||
|
"BY" to TokenType.By,
|
||||||
|
"ASC" to TokenType.Asc,
|
||||||
|
"DESC" to TokenType.Desc,
|
||||||
|
"LIMIT" to TokenType.Limit,
|
||||||
|
"DELETE" to TokenType.Delete,
|
||||||
|
"UPDATE" to TokenType.Update,
|
||||||
|
"SET" to TokenType.Set,
|
||||||
|
"DROP" to TokenType.Drop,
|
||||||
|
"AND" to TokenType.And,
|
||||||
|
"OR" to TokenType.Or,
|
||||||
|
"NOT" to TokenType.Not,
|
||||||
|
"NULL" to TokenType.Null,
|
||||||
|
"TRUE" to TokenType.True,
|
||||||
|
"FALSE" to TokenType.False,
|
||||||
|
"PRIMARY" to TokenType.Primary,
|
||||||
|
"KEY" to TokenType.Key,
|
||||||
|
"AS" to TokenType.As,
|
||||||
|
"INDEX" to TokenType.Index,
|
||||||
|
"ON" to TokenType.On,
|
||||||
|
"INNER" to TokenType.Inner,
|
||||||
|
"LEFT" to TokenType.Left,
|
||||||
|
"OUTER" to TokenType.Outer,
|
||||||
|
"JOIN" to TokenType.Join,
|
||||||
|
"GROUP" to TokenType.Group,
|
||||||
|
"HAVING" to TokenType.Having,
|
||||||
|
"BEGIN" to TokenType.Begin,
|
||||||
|
"COMMIT" to TokenType.Commit,
|
||||||
|
"ROLLBACK" to TokenType.Rollback,
|
||||||
|
"TRANSACTION" to TokenType.Transaction,
|
||||||
|
"EXPLAIN" to TokenType.Explain,
|
||||||
|
"INTEGER" to TokenType.Integer,
|
||||||
|
"TEXT" to TokenType.Text,
|
||||||
|
"BOOLEAN" to TokenType.Boolean,
|
||||||
|
"REAL" to TokenType.Real
|
||||||
|
)
|
||||||
Reference in new issue
Block a user