2012-03-26 2 views
1

Меня заинтересовали генераторы парсера. Но у меня нет теоретического фона. Я просто прочитал несколько вещей в Интернете.Анализ двоичных данных

В настоящее время я пытаюсь сделать что-то с ANTLR

Так что мои вопросы:

У меня есть специальный формат моих dataframes:

  • Первый байт кадра тег который описывает природу данных
  • Второй байт содержит длину (количество байтов) самих данных
  • Затем следует данные itse Л.Ф.
  • Данные могут содержать dataframes себя, и dataframes могут быть перечислены один за другим

Я надеюсь, что мое описание ясно. Мои вопросы:

Могу ли я создать такой синтаксический анализатор с ANTLR, который читает lengs кадра, а затем знает, когда закончится кадр?

В ANTLR можно загрузить различные теги, которые я использую из сгенерированного файла?

Спасибо!

+0

Сори, если я не был ясен. У меня есть сгенерированный файл, который определяет значение тегов. Мне это не нужно для синтаксического анализа. Потому что я знаю из поля длины, когда начинается новый тег. И все двоичные данные. Просто куча байтов. Я использую формат файла для встроенной системы, поэтому он настолько компактен и не читается человеком вообще. – woodtluk

ответ

1

Я не 100% уверен в этом, но:

  • Parser генераторы, как ANTLR требуют грамматику, которая по меньшей мере контекстно-свободной
  • с использованием длины-полей данных делает грамматику не контекст бесплатный (контекстно-зависимый, я думаю)

Это последний момент, о котором я не уверен - возможно, вы хотите изучить еще кое-что.

Вы, вероятно, придется написать пакетный «анализатор» самостоятельно (который затем должен быть синтаксический анализатор для контекстно-зависимой грамматики пакетов)

В качестве альтернативы, вы можете опустить поле длины, и использовать что-то вроде s- выражения, JSON или xml; они будут обрабатываться чем-то, сгенерированным с помощью antlr.

+0

Нет, грамматика ANTLR, используемая для создания лексера и/или синтаксического анализатора, может быть чувствительной к контексту w.r.t. как правила парсера (производства), так и лексеры (терминалы). –

+0

-1, хотя принятый ответ содержит неверную информацию. –

+0

@BartKiers Мне просто интересно, можете ли вы объяснить или предоставить ссылку? – SLin

1

Я думаю, вам будет лучше создать написанный вручную двоичный синтаксический анализатор вместо ANTLR, поскольку ANTLR в первую очередь предназначен для чтения и анализа текстового файла, а не двоичных данных. Часть лексера ориентирована на токенизирующий текст, поэтому попытка заставить его читать двоичные данные вместо этого будет тяжелой битвой.

Звучит так, как будто вашей структуре понадобится какой-то рекурсивный способ чтения данных, хотя проще было бы просто иметь древовидную структуру, а затем заполнить ее при чтении файла.

+0

Хорошо, я думал, что ANTLR будет излишним ... Но это интересная тема. И я хотел бы узнать больше о генераторах парсеров. Но я попробую, если у меня будет более подходящая задача. благодаря – woodtluk

Смежные вопросы