Обычно токены не сохраняются в файл. Парсер запрашивает их, когда анализатор готов прочитать дополнительные входные данные.
Таким образом, токены сохраняются в памяти в куче программы, и после того, как они были обработаны (что может занять много времени до полного анализа файла), они освобождаются.
--- Обновление после редактирования ---
Если вас беспокоит чрезмерное распределение и освобождение, у вас есть несколько решений, в зависимости от детализации проблемы, которую вы пытаетесь решить.
Для строк вы можете создавать их через интерфейс «строителя строк», который проверяет, присутствует ли уже строка с этим текстом, и, если это так, возвращает ссылку на уже существующую строку. Обратите внимание, что для правильной работы все возвращаемые строки должны быть неизменными (так как изменение строки в одной ссылке изменит строку во всех ссылках). Подобные решения возможны для чисел, логических значений и т. Д.
Для повторного использования токена вы можете превратить токен в структуру, которая в основном ссылается указателем на данные, которые могут быть "использованы" синтаксическим анализатором. Таким образом, синтаксический анализатор захватывает «поля» токена, и токен «скелет» может быть добавлен обратно в «очередь повторного использования». Очередь повторного использования должна сбросить ссылки «данных» токена, прежде чем возвращать его токенизатору, который будет переписан, чтобы запросить в очереди его структуры данных. Если токены «в очереди» отсутствуют, очередь должна их тихо распределить.
Существуют и другие решения, в зависимости от того, насколько хитро вы хотите получить.