Создание универсального синтаксического анализатора для преобразования текстового файла в структуру данных в C # - PullRequest
8 голосов
/ 18 августа 2010

У меня есть определение для файла SPAN (http://www.cme -ch.com / span / spanl300.htm ), которое я хотел бы использовать при создании синтаксического анализатора для анализа строковых данных вв классе сбора памяти (или даже с использованием ленивых вычислений с ключевым словом yield).

Все методы синтаксического анализа и библиотеки, которые я видел, применимы для построения деревьев разбора для реализации языков;я просто хотел бы узнать о любых хороших методах синтаксического анализа в структуре данных, аналогично тому, как XML анализируется в XMLDocument в .net framework, но с использованием правил, определенных SPAN.

Ответы [ 3 ]

2 голосов
/ 19 августа 2010

Рекурсивный приличный - довольно простой подход к таким вещам.

Вы начинаете с обертки для основного потока, которая позволяет вам прочитать один символ (или, возможно, карту / запись в вашем случае).

Затем вы пишете ряд функций, которые выполняют такие вещи, как «читать число, анализировать его» и «читать символ и проверять, что это X».

Эти функции либо преуспевают и продвигают поток, либо завершаются ошибкой с исключением синтаксического анализа.

Наконец, удобно создать набор комбинаторов, которые берут вышеупомянутые функции и объединяют их, например, «читать A, затем читать B» или «читать A, и если это не удается, вместо этого попробуйте B».

2 голосов
/ 19 августа 2010

SPAN представляется набором типов записей, каждая запись имеет много деталей.

Определение классической грамматики, охватывающей все записи (как нетерминалы), с точки зрениялюбые подзаписи (как нетерминальные) и терминальные типы данных, представляющие различные типы данных, определенные SPAN.Может быть много нетерминалов, но это просто большая грамматика, но не сложная.

Большинство языков программирования имеют небольшой набор терминальных токенов, которые обычно могут появляться где угодно.Правда в том, что грамматики определяют ожидания того, что может появиться далее (называемые «первым» и «последующим» наборами в литературе по анализатору LR), включая очень ограниченный набор терминалов.SPAN грамматика не будет отличаться;каждое «состояние разбора» синтаксического анализатора подразумевает ограниченный набор терминалов, которые следуют дальше, и один использует синтаксический анализатор, чтобы воспользоваться этим.(Я построил парсеры L (AL) R, и можно легко использовать «текущее» состояние, чтобы определить подмножество терминалов, которые могут произойти дальше).Таким образом, синтаксический анализатор SPAN может определить только небольшой набор токенов, который может появиться в следующем состоянии в каждом состоянии, и использовать его для выбора персонажей, содержащих эти следующие токены (они должны образовывать непересекающиеся наборы!).

Легкоспособ реализовать это с помощью синтаксического анализатора рекурсивного спуска.

Поэтому я утверждаю, что все эти механизмы синтаксического анализа вполне подойдут для синтаксического анализа SPAN, с некоторой частью пользовательской работы, возможно, для полученияtokens.

Действия синтаксического анализа для обычных синтаксических анализаторов создают деревья, но заполнять поля структуры данных так же просто.

1 голос
/ 19 августа 2010

Изучите Генератор синтаксических анализаторов Gardens Point , приложение, которое генерирует синтаксический анализатор C # для любого языка, для которого дано определение языка, аналогичное YACC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...