Fix lexing tokens starting with '<' and '>'

This commit is contained in:
mrkubax10 2024-08-25 22:22:13 +02:00
parent e7e2f355b0
commit 7a31c754ee

View File

@ -153,20 +153,51 @@ Token Lexer::next_token() {
result.m_type = resolve_similar(ch, TokenType::TOKEN_BITWISE_XOR, TokenType::TOKEN_XOR);
break;
case '<':
result.m_type = resolve_similar(ch, TokenType::TOKEN_LESS, TokenType::TOKEN_BITWISE_LEFT_SHIFT);
break;
case '>':
if(m_input.peek()=='>') {
switch(m_input.peek()) {
case '<':
m_input.ignore();
if(m_input.peek()=='>') {
if(m_input.peek()=='=') {
m_input.ignore();
result.m_type = TokenType::TOKEN_ARITHMETIC_RIGHT_SHIFT;
result.m_type = TokenType::TOKEN_EQUALS_BITWISE_LEFT_SHIFT;
}
else
result.m_type = TokenType::TOKEN_BITWISE_RIGHT_SHIFT;
result.m_type = TokenType::TOKEN_BITWISE_LEFT_SHIFT;
break;
case '=':
m_input.ignore();
result.m_type = TokenType::TOKEN_LESS_OR_EQUAL;
break;
default:
result.m_type = TokenType::TOKEN_LESS;
break;
}
else
break;
case '>':
switch(m_input.peek()) {
case '>':
m_input.ignore();
switch(m_input.peek()) {
case '>':
m_input.ignore();
result.m_type = TokenType::TOKEN_ARITHMETIC_RIGHT_SHIFT;
break;
case '=':
m_input.ignore();
result.m_type = TokenType::TOKEN_EQUALS_BITWISE_RIGHT_SHIFT;
break;
default:
result.m_type = TokenType::TOKEN_BITWISE_RIGHT_SHIFT;
break;
}
break;
case '=':
m_input.ignore();
result.m_type = TokenType::TOKEN_GREATER_OR_EQUAL;
break;
default:
result.m_type = TokenType::TOKEN_GREATER;
break;
}
break;
}
result.m_line = m_line;