in src/Parsing/Impl/Tokens/Tokenizer.cs [1693:1838]
private Token NextOperator(int ch) {
switch (ch) {
case '+':
if (NextChar('=')) {
return Tokens.AddEqualToken;
}
return Tokens.AddToken;
case '-':
if (NextChar('=')) {
return Tokens.SubtractEqualToken;
} else if (NextChar('>')) {
return Tokens.ArrowToken;
}
return Tokens.SubtractToken;
case '*':
if (NextChar('=')) {
return Tokens.MultiplyEqualToken;
}
if (NextChar('*')) {
if (NextChar('=')) {
return Tokens.PowerEqualToken;
}
return Tokens.PowerToken;
}
return Tokens.MultiplyToken;
case '/':
if (NextChar('=')) {
return Tokens.DivideEqualToken;
}
if (NextChar('/')) {
if (NextChar('=')) {
return Tokens.FloorDivideEqualToken;
}
return Tokens.FloorDivideToken;
}
return Tokens.DivideToken;
case '%':
if (NextChar('=')) {
return Tokens.ModEqualToken;
}
return Tokens.ModToken;
case '<':
if (LanguageVersion.Is2x() && NextChar('>')) {
return Tokens.LessThanGreaterThanToken;
}
if (NextChar('=')) {
return Tokens.LessThanOrEqualToken;
}
if (NextChar('<')) {
if (NextChar('=')) {
return Tokens.LeftShiftEqualToken;
}
return Tokens.LeftShiftToken;
}
return Tokens.LessThanToken;
case '>':
if (NextChar('>')) {
if (NextChar('=')) {
return Tokens.RightShiftEqualToken;
}
return Tokens.RightShiftToken;
}
if (NextChar('=')) {
return Tokens.GreaterThanOrEqualToken;
}
return Tokens.GreaterThanToken;
case '&':
if (NextChar('=')) {
return Tokens.BitwiseAndEqualToken;
}
return Tokens.BitwiseAndToken;
case '|':
if (NextChar('=')) {
return Tokens.BitwiseOrEqualToken;
}
return Tokens.BitwiseOrToken;
case '^':
if (NextChar('=')) {
return Tokens.ExclusiveOrEqualToken;
}
return Tokens.ExclusiveOrToken;
case '=':
if (NextChar('=')) {
return Tokens.EqualsToken;
}
return Tokens.AssignToken;
case '!':
if (NextChar('=')) {
return Tokens.NotEqualsToken;
}
return BadChar(ch);
case '(':
_state.ParenLevel++;
return Tokens.LeftParenthesisToken;
case ')':
if (_state.ParenLevel != 0) {
_state.ParenLevel--;
}
return Tokens.RightParenthesisToken;
case '[':
_state.BracketLevel++;
return Tokens.LeftBracketToken;
case ']':
if (_state.BracketLevel != 0) {
_state.BracketLevel--;
}
return Tokens.RightBracketToken;
case '{':
_state.BraceLevel++;
return Tokens.LeftBraceToken;
case '}':
if (_state.BraceLevel != 0) {
_state.BraceLevel--;
}
return Tokens.RightBraceToken;
case ',':
return Tokens.CommaToken;
case ':':
if (LanguageVersion >= PythonLanguageVersion.V38 && NextChar('=')) {
return Tokens.ColonEqualToken;
}
return Tokens.ColonToken;
case '`':
if (LanguageVersion.Is2x()) {
return Tokens.BackQuoteToken;
}
break;
case ';':
return Tokens.SemicolonToken;
case '~':
return Tokens.TwiddleToken;
case '@':
if (LanguageVersion >= PythonLanguageVersion.V35) {
if (NextChar('=')) {
return Tokens.MatMultiplyEqualToken;
}
if (GroupingLevel > 0) {
// @ can't be a decorator here.
return Tokens.MatMultiplyToken;
}
}
return Tokens.AtToken;
}
return null;
}