Вам может быть интересно посмотреть, как это делает лексер Ocaml (поиск and string
).По сути, это тот же метод, что и у вас, без хорошего локального буфера (я считаю, что ваш код лучше, но это немного менее эффективно), немного более сложный, потому что поддерживается больше экранирования, и с использованием escape-таблицы (char_for_backslash) для факторизации похожих правил.
Кроме того, у вас есть правило "\\n"
, повторенное дважды, и я думаю, 1
- очень пессимистическая оценка вашей длины строки, я бы предпочел использовать 20
здесь (чтобы избежать ненужного изменения размера).