From 06a99ce232ca896ac295be20b124ffaadef7d9fb Mon Sep 17 00:00:00 2001 From: Sasha Koshka Date: Tue, 30 Aug 2022 01:02:49 -0400 Subject: [PATCH] Implement new tokens I think this is all of them. The test will tell. --- lexer/lexer.go | 38 ++++++++++++++++++++++++++++++++++---- 1 file changed, 34 insertions(+), 4 deletions(-) diff --git a/lexer/lexer.go b/lexer/lexer.go index b3a50ac..91e3fc4 100644 --- a/lexer/lexer.go +++ b/lexer/lexer.go @@ -253,14 +253,26 @@ func (lexer *LexingOperation) tokenizeSymbolBeginning () (err error) { lexer.addToken(token) case '%': token := lexer.newToken() - token.kind = TokenKindPercent - lexer.addToken(token) err = lexer.nextRune() + if err != nil { return } + token.kind = TokenKindPercent + if lexer.char == '=' { + token.kind = TokenKindPercentAssignment + err = lexer.nextRune() + token.location.SetWidth(2) + } + lexer.addToken(token) case '~': token := lexer.newToken() - token.kind = TokenKindTilde - lexer.addToken(token) err = lexer.nextRune() + if err != nil { return } + token.kind = TokenKindTilde + if lexer.char == '=' { + token.kind = TokenKindTildeAssignment + err = lexer.nextRune() + token.location.SetWidth(2) + } + lexer.addToken(token) case '=': token := lexer.newToken() token.kind = TokenKindEqualTo @@ -275,6 +287,11 @@ func (lexer *LexingOperation) tokenizeSymbolBeginning () (err error) { token.kind = TokenKindLShift err = lexer.nextRune() token.location.SetWidth(2) + if lexer.char == '=' { + token.kind = TokenKindLShiftAssignment + err = lexer.nextRune() + token.location.SetWidth(2) + } } else if lexer.char == '=' { token.kind = TokenKindLessThanEqualTo err = lexer.nextRune() @@ -290,6 +307,11 @@ func (lexer *LexingOperation) tokenizeSymbolBeginning () (err error) { token.kind = TokenKindRShift err = lexer.nextRune() token.location.SetWidth(2) + if lexer.char == '=' { + token.kind = TokenKindRShiftAssignment + err = lexer.nextRune() + token.location.SetWidth(2) + } } else if lexer.char == '=' { token.kind = TokenKindGreaterThanEqualTo err = lexer.nextRune() @@ -305,6 +327,10 @@ func (lexer *LexingOperation) tokenizeSymbolBeginning () (err error) { token.kind = TokenKindLogicalOr err = lexer.nextRune() token.location.SetWidth(2) + } else if lexer.char == '=' { + token.kind = TokenKindBinaryOrAssignment + err = lexer.nextRune() + token.location.SetWidth(2) } lexer.addToken(token) case '&': @@ -316,6 +342,10 @@ func (lexer *LexingOperation) tokenizeSymbolBeginning () (err error) { token.kind = TokenKindLogicalAnd err = lexer.nextRune() token.location.SetWidth(2) + } else if lexer.char == '=' { + token.kind = TokenKindBinaryAndAssignment + err = lexer.nextRune() + token.location.SetWidth(2) } lexer.addToken(token) default: