Иногда нужно возвращать во входной поток символы, чтобы потом считать их снова. Если сделать функцию помещения символа в буфер, то это ломает логику считывания. Например символ может быть помещён не тот, который там был изначально. А если вместо возвращения символа в буфер делать откат указателей, то может оказаться, что нужно в буфере вернуться к предыдущему участку файла, при этом файл может не уметь позиционироваться назад (например если это pipe в консоли).
И трудности с возвратом символа ломают логику позиционирования во входном файле (счётчики строка/столбец для текстового редактора).
Я думаю - может ли переход от двухбуферного считывания к трёхбуферному решить эту проблему?
Один буфер считается текущим, один считается свободным для считывания, а третий - хранит предыдущие данные, чтобы можно было к ним вернуться во время "развидения".
Про "двухпольную систему севооборота" написано в википедии ( и вообще много где -
[html]
<a href="https://en.wikipedia.org/wiki/Circular_buffer">https://en.wikipedia.org/wiki/Circular_buffer</a>
<br />
<a href="http://ecomputernotes.com/compiler-design/input-buffering">http://ecomputernotes.com/compiler-design/input-buffering</a>[/html] ), а про "трёхпольную" я ещё не встречал.
Можно ли сюда призвать концепцию транзакций (в общекомпьютерном смысле, а не в смысле СУБД)?
В каких случаях вообще мы можем отбросить (выгрузить) уже прочитанную часть файла, если полное дерево разбора ещё не построено?
Отредактировано Лис (2019-04-04 13:35:15)