// if the resulting val <= 0377
val = 8 * val + c - '0';
c = getChar();
}
}
ungetChar(c);
c = val;
}
}
}
addToString(c); //код литеры, возможно сформированный выше, добавить в буфер
c = getChar(); //прочитать следующую литеру
}
Stringstr = getStringFromBuffer(); //получить строковое представление литерала
this.string = (String)allStrings.intern(str); //добавить в таблицу
returnToken.STRING; //код группы слов «строковый литерал»
}
if (c == '@') returnToken.XMLATTR; //вернуть токен начала XML – атрибута
switch (c) { //этот переключатель обрабатывает все остальные слова языка JavaScript
case ';':returnToken.SEMI; //литера «;» – это отдельное слово языка
case '[': returnToken.LB; //литера «[» – также отдельное слово
case ']': return Token.RB; // …
case '{': return Token.LC; // …
case '}': return Token.RC; // …
case '(': return Token.LP; // …
case ')': return Token.RP; // …
case ',': return Token.COMMA; // …
case '?': return Token.HOOK; // …
case ':': //с литеры «:» начинаются однолитерное слово : и двухлитерное слово ::
if (matchChar(':')) { //метод matchChar читает со входа
//следующую литеру и возвращает истину, если она совпадает с его аргументом, иначе не делает ничего
return Token.COLONCOLON;
} else {
return Token.COLON;
}
case '.'://с точки начинаются слова DOT, DOTDOT и DOTQUERY
if (matchChar('.')) {
return Token.DOTDOT;
} else if (matchChar('(')) {
return Token.DOTQUERY;
} else {
return Token.DOT;
}
case '|': //аналогично, с литеры «|» начинаются слова OR, ASSIGN_BITOR и BITOR:
if (matchChar('|')) {
return Token.OR;
} else if (matchChar('=')) {
return Token.ASSIGN_BITOR;
} else {
returnToken.BITOR;
} //следующие ниже операторы case (вплоть до case '!')
//аналогичным образом обрабатывают одно-, двух- или трехлитерные слова
case '^':
if (matchChar('=')) {
return Token.ASSIGN_BITXOR;
} else {
return Token.BITXOR;
}
case '&':
if (matchChar('&')) {
return Token.AND;
} else if (matchChar('=')) {
return Token.ASSIGN_BITAND;
} else {
return Token.BITAND;
}
case '=':
if (matchChar('=')) {
if (matchChar('='))
return Token.SHEQ;
else
return Token.EQ;
} else {
return Token.ASSIGN;
}
case '!':
if (matchChar('=')) {
if (matchChar('='))
return Token.SHNE;
else
return Token.NE;
} else {
returnToken.NOT;
}
case '<': //особая ситуация: с последовательности <!--
//начинается HTML-комментарий, использующийся для скрытия JavaScript-кода от старых браузеров
/* NB:treat HTML begin-comment as comment-till-eol */
if (matchChar('!')) {
if (matchChar('-')) {
if (matchChar('-')) {
skipLine(); //метод skipLine пропускает все литеры
//входного потока вплоть до конца строки или конца файла, что встретится раньше
continue retry;
}
ungetCharIgnoreLineEnd('-'); //этот метод возвращает
//на вход литеру, явно указываемую в качестве аргумента (прочитанную предшествующим методом matchChar)
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.