2012-02-15 3 views
0

Этот вопрос звучит тривиально, но позвольте мне объяснить мой сценарий.Как работать с текстовыми форматами в другом процедуре?

Я работаю в объектно-ориентированном языке программирования (C#), и большая часть фактического кода выполнения составляет процедурный, то есть ряд утверждений, иногда ветвей и циклов. Довольно стандартный.

Теперь у меня есть задача иметь дело с текстовым форматом (PGN, но это может быть что угодно, например VCard или какой-то пользовательский формат). По крайней мере, для меня, «стандартный» способ работать с ним было бы использовать смесь:

  • регулярных выражений
  • IF/заявления переключателя
  • для петель
  • хранения регулярное выражение соответствует в какую-то пользовательскую структуру и/или вывод ее в некоторый формат результата

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

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

Я помню, что когда я видел демонстрации «M» язык Я думал, что это именно то, что я искал. Был простой способ объявить синтаксис моего текстового формата, тогда инструмент автоматически проанализировал бы входную строку в представлении текстовой DSL в памяти, я думаю, что было также возможно преобразовать формат в другой.

Я также был в контакте с людьми позади JetBrains MPS, который является еще одним инструментом для работы с DSL, но мой сценарий, похоже, не идеально подходит для того, что они пытаются обеспечить.

Так что, если кто-нибудь имеет представление о том, как элегантно обрабатывать текстовые форматы в другой процедурной кодовой базе, я был бы рад узнать о вариантах.

ответ

1

Посмотрите мой проект с открытым исходным кодом meta#. Я думаю, это похоже на то, что вы ищете.

+0

Выглядит хорошо. Каково состояние проекта? Из дорожной карты (http://metasharp.codeplex.com/wikipage?title=Roadmap&referringTitle=Home) кажется, что это довольно рано в разработке. – Borek

+0

Возможности сопоставления шаблонов являются надежными. Также хорошо работает задача msbuild, которая поддерживает преобразование времени сборки. Недостатки вспомогательных функций, таких как интеграция IDE. Язык грамматики находится поверх общего языка, который является неполным. Но основные сценарии стабильны и эффективны, например: http://justinmchase.com/2011/10/05/martin-fowlers-state-machine-in-meta/ Есть некоторые пользователи. Для этого нужны еще некоторые участники. Существует пакет nuget, который вы можете использовать, чтобы попробовать его немедленно. –

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

  • Нет связанных вопросов^_^