>/* Текстовий рядок "xxx" або 'xxx' */
else if (ch == '"' | | ch == ''')
{chStart = ch; = buf;
ch2 = ' 0';// Підтримка лапок всередині тексту "..... " .... "
while (1)
{= lexer_get_char (cb); (ch == TOK_EOF) break;
// Перевірка "і '(ch == chStart && ch2! =' ')
{;
}
{= * cPtr;
* cPtr + + = ch;
}
}
* cPtr = ' 0'; len = min (strlen (buf), MAX_TOKEN_LEN);
strncpy (_tokRec-> str, buf, len);
* (_tokRec-> str + len) = ' 0';
_tokRec-> type = TOK_STRING;
}
/* Це ціле число або десяткове; 123, 0.51, .67, -2.67, +89,-4e3, +2 e-9 */
else if (strchr ("0123456789 + -.", ch))
{hasDecimal = 0; hasExp = 0; hasExpSign = 0; = buf;
* cPtr + + = ch; (ch == '.') {hasDecimal = 1;}
/* Приймаються наступні варіанти запису:
.67, -2.67, +89,-4e3, +2 e-9
*/
/* Також приймаються шістнадцяткові числа у вигляді 0x7FCD і 0XA. */Is_hex = FALSE; (ch == '0 ')
{_hex = lexer_lookahead (cb, 'x', 1/* Істина * /); (! is_hex) _hex = lexer_lookahead (cb, 'X', 1/* Істина * /);
}
/* Додаємо 'x' щоб запис відповідала формату "0x" */
if (is_hex)
* cPtr + + = 'x'; int count = 0 ;/ * Скидання індексу */(1)
{= lexer_get_char (cb); (ch == TOK_EOF) break; (ch == '.' &&! hasDecimal)
{
* cPtr + + = ch; = 1;
} if ((ch == 'e' | | ch == 'E') &&! hasExp)
{
* cPtr + + = ch; = 1;
} if (strchr ("+ -", ch) && hasExp && (! hasExpSign))
{
* cPtr + + = ch; = ch;
} if (strchr ("0123456789", ch))
{
* cPtr + + = ch;
} if (is_hex && strchr ("ABCDEFabcdef", ch))
{
* cPtr + + = ch;
}; (count + +> MAX_TOKEN_LEN) break;
}
/* Повертаємо останній символ назад в потік */
lexer_put_back (cb, ch);
* cPtr = ' 0'; d = atof (buf);
_tokRec-> type = ...