Как работать с текстовыми форматами в противном случае процедурный код? - PullRequest
0 голосов
/ 15 февраля 2012

Этот вопрос звучит тривиально, но позвольте мне объяснить мой сценарий.

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

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

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

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

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

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

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

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

1 Ответ

1 голос
/ 16 февраля 2012

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

...