Сканирование из буфера довольно просто, но почти наверняка не , что вы хотите сделать.
Если вы хотите сканировать из файла, вы просто открываете файл для чтения, сохраняя значение из вызова fopen
в yyin
. Убедитесь, что вы проверили, что fopen
успешно выполнено, потому что, если yyin
окажется НЕДЕЙСТВИТЕЛЬНЫМ (что произойдет, если fopen
не удастся), тогда сканер будет читать с stdin
.
Вам нужно будет объявить yyin
, если только часть вашей программы, которая настраивается во входном файле, не содержится в той же единице перевода, что и определение вашего сканера. Декларация:
extern FILE* yyin;
Если вы действительно хотите прочитать из одной строки в памяти, просто позвоните
yy_scan_string(buffer);
перед началом сканирования. (Существует также функция, которая принимает и адрес буфера, и длину, которую вы можете использовать для входов, которые не заканчиваются NUL и, возможно, содержат байты NUL:
yy_scan_bytes(buffer, buflen);
Но буфер, который вы предоставляете, должен быть весь ввод; Вы не используете этот интерфейс для чтения файла строкой за раз. (Есть способы сделать это, но я действительно не думаю, что это то, что вы ищете. Это описано в разделе нескольких входных буферов руководства Flex , если вам интересно.)