scanToken method
void
scanToken()
Implementation
void scanToken() {
String c = advance();
switch (c) {
case '(':
addToken(TokenType.leftParen);
break;
case ')':
addToken(TokenType.rightParen);
break;
case '{':
addToken(TokenType.leftBrace);
break;
case '}':
addToken(TokenType.rightBrace);
break;
case '[':
addToken(TokenType.leftBracket);
break;
case ']':
addToken(TokenType.rightBracket);
break;
case ';':
addToken(TokenType.semicolon);
break;
case ':':
addToken(TokenType.colon);
break;
case ',':
addToken(TokenType.comma);
break;
case '.':
addToken(TokenType.dot);
break;
case '+':
addToken(match('=')
? TokenType.plusAssign
: match('+')
? TokenType.plusPlus
: TokenType.plus);
break;
case '-':
addToken(match('=')
? TokenType.minusAssign
: match('-')
? TokenType.minusMinus
: TokenType.minus);
break;
case '*':
addToken(match('=') ? TokenType.multiplyAssign : TokenType.multiply);
break;
case '/':
if (match('/')) {
while (peek() != '\n' && !isAtEnd()) {
advance();
}
} else if (match('*')) {
while (!isAtEnd() && !(peek() == '*' && peekNext() == '/')) {
if (peek() == '\n') line++;
advance();
}
if (!isAtEnd()) {
advance();
advance();
}
} else {
addToken(match('=') ? TokenType.divideAssign : TokenType.divide);
}
break;
case '%':
addToken(TokenType.modulo);
break;
case '!':
addToken(match('=') ? TokenType.notEqual : TokenType.not);
break;
case '=':
addToken(match('=') ? TokenType.equal : TokenType.assign);
break;
case '<':
addToken(match('=') ? TokenType.lessEqual : TokenType.less);
break;
case '>':
addToken(match('=') ? TokenType.greaterEqual : TokenType.greater);
break;
case '&':
addToken(match('&') ? TokenType.and : TokenType.unknown);
break;
case '|':
addToken(match('|') ? TokenType.or : TokenType.unknown);
break;
case ' ':
case '\r':
case '\t':
// Ignore whitespace
break;
case '\n':
line++;
break;
case '"':
case "'":
string(c);
break;
case 'p':
if (match(':')) {
addToken(TokenType.flutterParam);
} else if (source.length >= current + 10 &&
source.substring(current - 1, current + 10) == 'parameter::') {
advance(10);
addToken(TokenType.flutterParam);
} else {
identifier();
}
break;
case 'f':
if (match(':')) {
addToken(TokenType.flutterWidget);
} else if (match('p')) {
addToken(TokenType.flutterParam);
} else if (source.length >= current + 8 &&
source.substring(current - 1, current + 8) == 'flutter::') {
advance(8);
addToken(TokenType.flutterWidget);
} else {
identifier();
}
break;
default:
if (isDigit(c)) {
number();
} else if (isAlpha(c)) {
identifier();
} else {
addToken(TokenType.unknown);
}
break;
}
}