Fix lexing tokens starting with '<' and '>'
This commit is contained in:
parent
e7e2f355b0
commit
7a31c754ee
@ -153,22 +153,53 @@ Token Lexer::next_token() {
|
|||||||
result.m_type = resolve_similar(ch, TokenType::TOKEN_BITWISE_XOR, TokenType::TOKEN_XOR);
|
result.m_type = resolve_similar(ch, TokenType::TOKEN_BITWISE_XOR, TokenType::TOKEN_XOR);
|
||||||
break;
|
break;
|
||||||
case '<':
|
case '<':
|
||||||
result.m_type = resolve_similar(ch, TokenType::TOKEN_LESS, TokenType::TOKEN_BITWISE_LEFT_SHIFT);
|
switch(m_input.peek()) {
|
||||||
|
case '<':
|
||||||
|
m_input.ignore();
|
||||||
|
if(m_input.peek()=='=') {
|
||||||
|
m_input.ignore();
|
||||||
|
result.m_type = TokenType::TOKEN_EQUALS_BITWISE_LEFT_SHIFT;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
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;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case '>':
|
case '>':
|
||||||
if(m_input.peek()=='>') {
|
switch(m_input.peek()) {
|
||||||
|
case '>':
|
||||||
m_input.ignore();
|
m_input.ignore();
|
||||||
if(m_input.peek()=='>') {
|
switch(m_input.peek()) {
|
||||||
|
case '>':
|
||||||
m_input.ignore();
|
m_input.ignore();
|
||||||
result.m_type = TokenType::TOKEN_ARITHMETIC_RIGHT_SHIFT;
|
result.m_type = TokenType::TOKEN_ARITHMETIC_RIGHT_SHIFT;
|
||||||
}
|
break;
|
||||||
else
|
case '=':
|
||||||
|
m_input.ignore();
|
||||||
|
result.m_type = TokenType::TOKEN_EQUALS_BITWISE_RIGHT_SHIFT;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
result.m_type = TokenType::TOKEN_BITWISE_RIGHT_SHIFT;
|
result.m_type = TokenType::TOKEN_BITWISE_RIGHT_SHIFT;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
else
|
break;
|
||||||
|
case '=':
|
||||||
|
m_input.ignore();
|
||||||
|
result.m_type = TokenType::TOKEN_GREATER_OR_EQUAL;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
result.m_type = TokenType::TOKEN_GREATER;
|
result.m_type = TokenType::TOKEN_GREATER;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
result.m_line = m_line;
|
result.m_line = m_line;
|
||||||
result.m_line_offset = static_cast<unsigned>(m_input.tellg())-m_line_start+1;
|
result.m_line_offset = static_cast<unsigned>(m_input.tellg())-m_line_start+1;
|
||||||
return result;
|
return result;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user