Add more syntax to lexer and parser, and make improvements to tview

This commit is contained in:
Pablu
2025-12-02 09:50:20 +01:00
parent c41b4cc5da
commit c4218cee51
7 changed files with 233 additions and 56 deletions

View File

@@ -21,6 +21,9 @@ const (
COMMA
ASTERIKS
ASSIGN
BACKQUOTE
QUOTE
SINGLE_QUOTE
// Keywords
CREATE
@@ -41,36 +44,42 @@ const (
NOT
IF
EXISTS
AUTOINCREMENT
CONSTRAINT
TEXT
INTEGER
NULL
REAL
BLOB
NUMERIC
)
var keywords map[string]Token = map[string]Token{
"CREATE": CREATE,
"TABLE": TABLE,
"PRIMARY": PRIMARY,
"FOREIGN": FOREIGN,
"REFERENCES": REFERENCES,
"KEY": KEY,
"NOT": NOT,
"TEXT": TEXT,
"INTEGER": INTEGER,
"NULL": NULL,
"IF": IF,
"EXISTS": EXISTS,
"SELECT": SELECT,
"FROM": FROM,
"WHERE": WHERE,
"AND": AND,
"OR": OR,
"ORDER": ORDER,
"TOP": TOP,
"REAL": REAL,
"BLOB": BLOB,
"CREATE": CREATE,
"TABLE": TABLE,
"PRIMARY": PRIMARY,
"FOREIGN": FOREIGN,
"REFERENCES": REFERENCES,
"KEY": KEY,
"NOT": NOT,
"TEXT": TEXT,
"INTEGER": INTEGER,
"NULL": NULL,
"IF": IF,
"EXISTS": EXISTS,
"SELECT": SELECT,
"FROM": FROM,
"WHERE": WHERE,
"AND": AND,
"OR": OR,
"ORDER": ORDER,
"TOP": TOP,
"REAL": REAL,
"BLOB": BLOB,
"AUTOINCREMENT": AUTOINCREMENT,
"CONSTRAINT": CONSTRAINT,
"NUMERIC": NUMERIC,
}
type Position struct {
@@ -116,6 +125,12 @@ func (l *Lexer) Lex() (Position, Token, string) {
return l.pos, ASTERIKS, "*"
case '=':
return l.pos, ASSIGN, "="
case '`':
return l.pos, BACKQUOTE, "`"
case '"':
return l.pos, QUOTE, "\""
case '\'':
return l.pos, SINGLE_QUOTE, "'"
default:
if unicode.IsSpace(r) {
continue