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