Этот вопрос звучит тривиально, но позвольте мне объяснить мой сценарий.
Я работаю на объектно-ориентированном языке программирования (C #), и большая часть фактического кода выполнения является процедурной , т.е.утверждений, иногда ветвей и петель.Довольно стандартный.
Теперь передо мной стоит задача поработать с текстовым форматом ( PGN , но это может быть что-то другое, например VCard или какой-либо другой пользовательский формат),По крайней мере, для меня «стандартным» способом работы с ним было бы использование комбинации:
- регулярных выражений
- операторов if / switch
- для-loops
- хранение совпадений регулярного выражения в некоторой пользовательской структуре и / или вывод его в некоторый формат результата
Однако этот процедурный подход мне совсем не нравится - регулярные выражения склоннык ошибкам код обычно довольно сложен для понимания и отладки, он обычно имеет довольно высокую цикломатическую сложность и т. д.
Проще говоря, я хотел бы, чтобы он был декларативным , ноЯ не знаю, какие инструменты или библиотеки использовать.
Я помню, что когда я видел демонстрации "M" языка , я думал, что это именно то, что я искал.Был простой способ объявить синтаксис моего текстового формата, инструмент затем автоматически проанализировал бы входную строку в представлении текстовой DSL в памяти, я думаю, что было также возможно преобразовать формат в другой и т. Д.
Я также общался с людьми, стоящими за JetBrains MPS , который является еще одним инструментом для работы с DSL, но мой сценарий, кажется, не идеально подходит для того, что они
Так что, если у кого-то есть идеи о том, как элегантно работать с текстовыми форматами в процедурной кодовой базе, я был бы рад узнать о вариантах.