Должен ли я использовать Workflow или fsYacc? - PullRequest
2 голосов
/ 03 октября 2011

У меня очень простой DSL, который мне нужно проанализировать на платформе .Net.Не имея большого опыта работы с парсерами, я просматривал примеры с использованием F # (fsLex, fsYacc, FParsec).Я не очень знаком с F #, но у меня есть некоторый опыт работы с Workflow и LINQ.

Учитывая простоту DSL, я могу обойтись без использования LINQ для реализации лексера.Рабочий процесс (я бы использовал V4) привлекателен для реализации грамматики, поскольку я более знаком с ней, ее легче объяснить другим, учитывая ее графическую природу, и она поддерживается Microsoft и, вероятно, будет продолжать развиваться.

Однако, если мой DSL становится более сложным, я могу представить, что реализация WF становится вложенным адом действий и лексером на основе LINQ, идущим тем же путем.На этом этапе изучение F # и использование одного из инструментов F # будет иметь больше смысла.

Мне интересно, сравнивали ли другие инструменты синтаксического анализа WF и F # для реализации простого интерпретатора DSL и какие могут быть выводы.

1 Ответ

4 голосов
/ 03 октября 2011

Трудно дать ответ, не зная немного больше о том, что DSL должен делать и насколько сложно он может стать в будущем.Если ваш DSL связан с рабочим процессом, то WF может показаться очень логичным выбором для сохранения ваших проанализированных результатов.

Если ваш язык не слишком сложен, тогда LINQ или небольшой управляемый анализатор вполне могут подойти.Хорошо, чтобы все было просто и использовались инструменты, знакомые вашим коллегам.

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

Лично мне очень нравится FParsec для разбора.Это требует некоторых знаний о F #, но когда вы разберетесь в этом, он настолько безумно силен для преобразования текста в AST, и он очень прост в том, что нет никаких «волшебных шагов», которые превращают ваш EBNF в тарабарский код, вы можетепосмотрите, как это работает, и настройте его.

Когда у вас нет времени погружаться в F # и FParsec, есть также Irony , который похож на FParsec, но затем на C #.

Это то, что я могу сказать из того, что вы нам сообщили, если у вас есть какие-то конкретные вопросы, сообщите нам.

Rgds GJ

...