From 9c1baf8216d451b84f27b8b6505cdd6e9efa0fb1 Mon Sep 17 00:00:00 2001 From: Sasha Koshka Date: Wed, 10 Aug 2022 14:18:28 -0400 Subject: [PATCH] Lexer can now tokenize minus decrement return direction separator --- file/error.go | 1 + lexer/lexer.go | 26 +++++++++++++++++++++----- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/file/error.go b/file/error.go index e6b4d80..6a0d502 100644 --- a/file/error.go +++ b/file/error.go @@ -59,6 +59,7 @@ func (err Error) Error () (formattedMessage string) { // print an arrow with a tail spanning the width of the mistake columnCountdown := err.Location.column for columnCountdown > 1 { + // TODO: for tabs, print out a teb instead. formattedMessage += " " columnCountdown -- } diff --git a/lexer/lexer.go b/lexer/lexer.go index 00959b0..60795ef 100644 --- a/lexer/lexer.go +++ b/lexer/lexer.go @@ -126,13 +126,10 @@ func (lexer *LexingOperation) tokenizeSymbolBeginning () (err error) { }) lexer.nextRune() case '+': - lexer.addToken (Token { - kind: TokenKindPlus, - }) + // TODO: tokenize plus begin lexer.nextRune() case '-': - // TODO: tokenize dash begin - lexer.nextRune() + lexer.tokenizeDashBeginning() case '*': lexer.addToken (Token { kind: TokenKindAsterisk, @@ -187,6 +184,25 @@ func (lexer *LexingOperation) tokenizeSymbolBeginning () (err error) { return } +func (lexer *LexingOperation) tokenizeDashBeginning () (err error) { + token := Token { kind: TokenKindMinus } + lexer.nextRune() + + if lexer.char == '-' { + token.kind = TokenKindDecrement + lexer.nextRune() + } else if lexer.char == '>' { + token.kind = TokenKindReturnDirection + lexer.nextRune() + } + + if lexer.char == '-' { + token.kind = TokenKindSeparator + lexer.nextRune() + } + return +} + // addToken adds a new token to the lexer's token slice. func (lexer *LexingOperation) addToken (token Token) { lexer.tokens = append(lexer.tokens, token)