From 0a31ea7bf88cdc313a757db5e047345ed514e00d Mon Sep 17 00:00:00 2001 From: Sasha Koshka Date: Thu, 11 Aug 2022 02:54:20 -0500 Subject: [PATCH] Support for digraphs such as &&, <<, ++ --- lexer/lexer.go | 40 +++++++++++++++++++++++++++++++++++----- 1 file changed, 35 insertions(+), 5 deletions(-) diff --git a/lexer/lexer.go b/lexer/lexer.go index c17a549..1051d1b 100644 --- a/lexer/lexer.go +++ b/lexer/lexer.go @@ -159,7 +159,13 @@ func (lexer *LexingOperation) tokenizeSymbolBeginning () (err error) { }) err = lexer.nextRune() case '+': - // TODO: tokenize plus begin + err = lexer.nextRune() + if err != nil { return } + token := Token { kind: TokenKindPlus } + if lexer.char == '+' { + token.kind = TokenKindIncrement + } + lexer.addToken(token) err = lexer.nextRune() case '-': err = lexer.tokenizeDashBeginning() @@ -194,16 +200,40 @@ func (lexer *LexingOperation) tokenizeSymbolBeginning () (err error) { }) err = lexer.nextRune() case '<': - // TODO: tokenize less than begin + err = lexer.nextRune() + if err != nil { return } + token := Token { kind: TokenKindLessThan } + if lexer.char == '<' { + token.kind = TokenKindLShift + } + lexer.addToken(token) err = lexer.nextRune() case '>': - // TODO: tokenize greater than begin + err = lexer.nextRune() + if err != nil { return } + token := Token { kind: TokenKindGreaterThan } + if lexer.char == '>' { + token.kind = TokenKindRShift + } + lexer.addToken(token) err = lexer.nextRune() case '|': - // TODO: tokenize bar begin + err = lexer.nextRune() + if err != nil { return } + token := Token { kind: TokenKindBinaryOr } + if lexer.char == '|' { + token.kind = TokenKindLogicalOr + } + lexer.addToken(token) err = lexer.nextRune() case '&': - // TODO: tokenize and begin + err = lexer.nextRune() + if err != nil { return } + token := Token { kind: TokenKindBinaryAnd } + if lexer.char == '&' { + token.kind = TokenKindLogicalAnd + } + lexer.addToken(token) err = lexer.nextRune() default: err = file.NewError (