Implemented operators and better indexing

This commit is contained in:
Martino Ferrari
2026-01-30 00:49:42 +01:00
parent ecc7039306
commit 0cbbf5939a
13 changed files with 836 additions and 83 deletions

View File

@@ -28,6 +28,14 @@ const (
TokenLBracket
TokenRBracket
TokenSymbol
TokenPlus
TokenMinus
TokenStar
TokenSlash
TokenPercent
TokenCaret
TokenAmpersand
TokenConcat
)
type Token struct {
@@ -137,16 +145,45 @@ func (l *Lexer) NextToken() Token {
return l.emit(TokenLBracket)
case ']':
return l.emit(TokenRBracket)
case '&', '?', '!', '<', '>', '*', '(', ')', '~', '%', '^':
case '+':
if unicode.IsSpace(l.peek()) {
return l.emit(TokenPlus)
}
return l.lexObjectIdentifier()
case '-':
if unicode.IsDigit(l.peek()) {
return l.lexNumber()
}
if unicode.IsSpace(l.peek()) {
return l.emit(TokenMinus)
}
return l.lexIdentifier()
case '*':
return l.emit(TokenStar)
case '/':
p := l.peek()
if p == '/' || p == '*' || p == '#' || p == '!' {
return l.lexComment()
}
return l.emit(TokenSlash)
case '%':
return l.emit(TokenPercent)
case '^':
return l.emit(TokenCaret)
case '&':
return l.emit(TokenAmpersand)
case '.':
if l.peek() == '.' {
l.next()
return l.emit(TokenConcat)
}
return l.emit(TokenSymbol)
case '~', '!', '<', '>', '(', ')', '?', '\\':
return l.emit(TokenSymbol)
case '"':
return l.lexString()
case '/':
return l.lexComment()
case '#':
return l.lexHashIdentifier()
case '+':
fallthrough
case '$':
return l.lexObjectIdentifier()
}