base = 16; //то основание = 16
c = getChar(); //прочитать первую литеру 16-ричного числа
} elseif (isDigit(c)) { //иначе, если после литеры 0 следует цифра
base = 8; //то основание = 8
} else { //иначе, запомнить лидирующий 0 в буфере
addToString('0');
}
}
if (base == 16) { //если основание 16
while (0 <= Kit.xDigitToInt(c, 0)) { //то до тех пор, пока на входе 16-ричные цифры
addToString(c); //накапливать их в буфере
c = getChar(); //читать следующую литеру
}
} else {
while('0' <= c && c <= '9') { //пока на входе десятичные цифры
/*
* We permit 08 and 09 as decimal numbers, which
* makes our behavior a superset of the ECMA
* numeric grammar. We might not always be so
* permissive, so we warn about it.
*/
if (base == 8 && c >= '8') { //если основание = 8 и очередная цифра > 7
parser.addWarning("msg.bad.octal.literal",c =='8'?"8" : "9");
base = 10; //добавить предупреждение и установить основание = 10
}
addToString(c); //запоминать цифры в буфере
c = getChar(); //читать следующую литеру
}
}
booleanisInteger = true; //флажок «целое» по умолчанию
if (base==10 && (c == '.' || c == 'e' || c == 'E')) {//если основание 10 и очереднаялитера – это точка
//или буква e или буква E
isInteger = false; //сбросить флажок «целое»
if (c == '.') { //если после целой части точка
do { //то все последующие цифры запомнить в буфере
addToString(c);
c = getChar();
} while (isDigit(c));
}
if (c == 'e' || c == 'E') { //если после целой или дробной части следует e или E
addToString(c); //то признак экспоненциальной формы запомнить в буфере
c = getChar(); //прочитать следующую литеру
if (c == '+' || c == '-') { //если это знак экспоненты
addToString(c); //то поместить его в буфер и прочитать следующую литеру
c = getChar();
}
if (!isDigit(c)) { //и проверить, что в экспоненте есть хотя бы одна цифра
parser.addError("msg.missing.exponent");
returnToken.ERROR; //вернуть ошибку, если цифр нет
}
do { //до тех пор, пока на входе цифры
addToString(c); //запоминать их в буфере
c = getChar(); //и читать следующую литеру
} while (isDigit(c));
}
}
ungetChar(c); //вернуть на вход литеру, следующую после числового литерала
StringnumString = getStringFromBuffer(); //получить строковое представление литерала
doubledval; //временная переменная для значения числа опущено: преобразование числового литерала
//во внутреннее представление числа
this.number = dval; //сохранить значение числа
returnToken.NUMBER; //вернуть код группы слов «числа»
}
//конец обработки численных литералов
// isitastring?
if (c == '"' || c == '\'') { //если текущая литера – одиночный апостроф или двойная кавычка
// We attempt to accumulate a string the fast way, by
// building it directly out of the reader. But if there
// are any escaped characters in the string, we revert to
// building it out of a StringBuffer.
intquoteChar = c; // запомнить открывающую литеру строки во временной переменной
stringBufferTop = 0;//подготовить буфер для строкового литерала
c = getChar(); //прочитать первую литеру литерала
strLoop: while (c != quoteChar) { //до тех пор, пока текущая литера не равна открывающей литере
if (c == '\n' || c == EOF_CHAR) { //если прочитан конец строки или конец файла
ungetChar(c); //вернуть литеру на вход
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.