private void ReadIdentifierOrKeyword() { while (char.IsLetter(Current)) { _position++; } var length = _position - _start; var text = _text.ToString(_start, length); _kind = SyntaxRules.GetKeywordKind(text); }
public SyntaxToken Lex() { _start = _position; _kind = SyntaxKind.BadToken; _value = null; // <operator> + - / ( ) switch (Current) { case '+': { _kind = SyntaxKind.PlusToken; _position++; break; } case '-': { _kind = SyntaxKind.MinusToken; _position++; break; } case '*': { _kind = SyntaxKind.StarToken; _position++; break; } case '/': { _kind = SyntaxKind.ForwardSlashToken; _position++; break; } case '(': { _kind = SyntaxKind.OpenParenToken; _position++; break; } case ')': { _kind = SyntaxKind.CloseParenToken; _position++; break; } case '{': { _kind = SyntaxKind.OpenBraceToken; _position++; break; } case '}': { _kind = SyntaxKind.CloseBraceToken; _position++; break; } case '&': { if (Lookahead == '&') { _kind = SyntaxKind.AmpersandAmpersandToken; _position += 2; } break; } case '|': { if (Lookahead == '|') { _kind = SyntaxKind.PipePipeToken; _position += 2; } break; } case '=': { _position++; if (Current != '=') { _kind = SyntaxKind.EqualToken; } else { _kind = SyntaxKind.EqualEqualToken; _position++; } break; } case '!': { _position++; if (Current != '=') { _kind = SyntaxKind.BangToken; } else { _kind = SyntaxKind.BangEqualToken; _position++; } break; } case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': { ReadNumberToken(); break; } case ' ': case '\t': case '\n': case '\r': { ReadWhiteSpaceToken(); break; } case '\0': { _kind = SyntaxKind.EOFToken; break; } default: { if (char.IsLetter(Current)) { ReadIdentifierOrKeyword(); } // <whitespace> else if (char.IsWhiteSpace(Current)) { ReadWhiteSpaceToken(); } else { _diagnostics.ReportBadCharacter(_position, Current); _position++; } break; } } var length = _position - _start; var text = SyntaxRules.GetText(_kind); if (text == null) { text = _text.ToString(_start, length); } return(new SyntaxToken(_kind, _start, text, _value)); }