From b37ef48f0dc109ef99089a99eb917d027799e5ea Mon Sep 17 00:00:00 2001 From: martin dobrev Date: Fri, 7 Sep 2018 18:58:29 +0300 Subject: Add more lexemes to Lexer --- JSImpl/src/Lexer.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'JSImpl/src/Lexer.cpp') diff --git a/JSImpl/src/Lexer.cpp b/JSImpl/src/Lexer.cpp index d17f593..2115a2b 100644 --- a/JSImpl/src/Lexer.cpp +++ b/JSImpl/src/Lexer.cpp @@ -156,12 +156,13 @@ Token Tokenizer::NextToken() case '}': m_Current++; return ProduceToken(TokenType::RightBrace); case ',': m_Current++; return ProduceToken(TokenType::Comma); case '.': m_Current++; return ProduceToken(TokenType::Dot); - case '-': m_Current++; return ProduceToken(TokenType::Minums); - case '+': m_Current++; return ProduceToken(TokenType::Plus); + case '-': m_Current++; return Match('-') ? ProduceToken(TokenType::MinusMinus) : ProduceToken(TokenType::Minus); + case '+': m_Current++; return Match('+') ? ProduceToken(TokenType::PlusPlus) : ProduceToken(TokenType::Plus); case ';': m_Current++; return ProduceToken(TokenType::Semicolon); case '*': m_Current++; return ProduceToken(TokenType::Star); - case '=': m_Current++; return Match('=') ? ProduceToken(TokenType::EqualEqual) : ProduceToken(TokenType::Equal); - case '!': m_Current++; return Match('=') ? ProduceToken(TokenType::BangEqual) : ProduceToken(TokenType::Bang); + case '~': m_Current++; return ProduceToken(TokenType::BitwiseNot); + case '=': m_Current++; return Match('=') ? Match('=') ? ProduceToken(TokenType::StrictEqual) : ProduceToken(TokenType::EqualEqual) : ProduceToken(TokenType::Equal); + case '!': m_Current++; return Match('=') ? Match('=') ? ProduceToken(TokenType::StrictNotEqual) : ProduceToken(TokenType::BangEqual) : ProduceToken(TokenType::Bang); case '>': m_Current++; return Match('=') ? ProduceToken(TokenType::GreaterEqual) : ProduceToken(TokenType::Greater); case '<': m_Current++; return Match('=') ? ProduceToken(TokenType::LessEqual) : ProduceToken(TokenType::Less); default: @@ -220,5 +221,6 @@ Token Tokenizer::NextToken() } return Token{ TokenType::Identifier, m_Line, IPLString(m_Code + start, m_Code + m_Current) }; } + // TODO: Error reporting return Token{ TokenType::Eof, m_Line, "" }; } \ No newline at end of file -- cgit v1.3.1-23-gd82d