Чего мелочиться, надо начинать не с байтов, а с битов

Как распарсить текст от уровня байтов
 
цепочка битов
представим текст в виде длинной (ну как длинной? имеющей длину) линейной цепочки битов.
Саму цепочку назовём S. Или обозначим как S. Или поименуем как S. Или будем говорить, что цепочка это S.
количество битов в цепочке обозначим N.
Длину цепочки в битах обозначим LS = N.
n-ный по счёту бит обозначим как Sn
целое число, обозначающее длину цепочки будет занимать ⌈ log2N ⌉ битов
операцию стандартного двоичного кодирования обозначим как E
Операцию подсчёта длины записи в битах обозначим LE (length of encoding)
LE(S) = LE(LS) + N * LE(Sn)
длина записи одного бита LE(Sn) = 1
позиция бита в цепочка битов
это целое неотрицательное число. Причем длина таких чисел в битах (в стандартной двоичной кодировке/записи) не превышает ⌈ log2N ⌉
Позицию обозначим P
Длину позиции обозначим как LP
сегмент в цепочке битов
Это несколько смежных позиций в цепочке. Сегмент, слитная подпоследовательность, span, subsequence.
Сегмент можно определить указанием начала сегмента и длины сегмента (в битах)
количество битов в сегменте - это целое число, в записи которого битов тоже log2N
Сегмент обозначим как W (мнемонической связи никакой, это не "слово" (word), ассоциация была - две галочки, отмечающие начало и конец)
длину сегмента (при записи/кодировании представления сегмента в бинарном виде стандартным способом)
обозначим LW= LP + log2N
множество позиций битов в цепочке битов представленное в виде массива позиций
Чтобы записать множество, запишем количество элементов множества, а потом сами элементы (которые имеют фиксированную длину)
в памяти такая запись будет занимать
log2M + M * LP
M ≤ N
множество позиций бита в цепочке битов
Множество состоит из элементов, каждый элемент - позиция.
записывать/кодировать множество позиций можно разными способами (как минимум тремя)
- множество позиций битов в цепочке битов в виде массива позиций
- множество позиций битов в цепочке битов в виде массива сегментов
- множество позиций битов в цепочке битов в виде комбинации массива позиций и массива сегментов
незря, всё-таки, математики придумывали разные короткие символы для обозначения новых понятий, описывать которые словами дольше, чем запомнить один новый символ. Компьютеры отобрали возможность создавать новые символы и легко размещать символы на плоскости в разных позициях по отношению друг к другу, выражая таким образом отношения между символами

Какое из нескольких представлений выбирать, выбирать то или иное (ту или иную запись) множества позиций?
нужно выбирать запись, которая занимает меньшее количество места
для этого должен быть способ (метод класса, функция-член) для того, чтобы определять/вычислять длину представления в каждом варианте
можно сделать у каждого множества метод "создать наиболее компактное представление"
по какому алгоритму будет работать такой метод?
он посчитает количество смежных позиций, смежных групп позиций, вычислит размеры записи в том или ином варианте
а какие варианты есть и как из перебирать?
с другой стороны, я понимаю тех, кто пробует читать математические тексты. Читать такие тексты неудобно, так как значения символов не сразу запоминаются, а только при частом (и по делу) использовании символов
Допустим, что библиотека работающая с
битами, позициями, сегментами битов, множествами позиций
закодирована. Что при помощи неё можно делать?

А то ведь можно много (сколько, кcтати?) усилий потрать на её написание.
сделать сериализацию самих битовых объектов, сериализацию метаинформации о том, что в файле начиная с какого смещения
кроме файлов сделать хранение в СУБД и вообще много чего (конкретнее - что именно "много чего"?).

Абстрактные синтаксические конструкции представлены/закодированы в исходном тексте в исходной последовательности битов S наборами позиций
(что-то не верится. Вот есть арифметическое кодирование, там символы могут быть закодированы частью бита, а символы это как раз один из вариантов тех самых абстрактных синтаксических конструкций)
частью бита - в том смысле, что бит может определять сразу несколько символов, идущих подряд, в зависимости от предыдущего контекста.

Абстрактные синтаксические конструкции представялются/кодируются символами (именно поэтому они "абстрактные", а не "терминальные символы").
а символы кодируются битами (но не по принципу 1 символ - целое количество битов)

Что мешает кодировать абстрактные синтаксические конструкции непосредственно (без промежуточной записи символами)?
нуу, в памяти компьютера они как раз битами и закодированы.
Глифы символов - компактное это визуальное представление, а глифы для значений битов - некомпактное (хотя если посмотреть на QR-коды...)
QR-коды труднее распознаются человеком (не работает алгоритм выделения существенных деталей, так как все детали существенные)

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