На практике вы не можете написать инструмент, который принимает настоящий естественный язык и отображает его в рабочий код. Никто не знает, как это сделать. (Следовательно C # вместо английского).
Лучшее, на что вы можете надеяться, - это неопрятный набор фраз (очень похожий на BRML, который вы демонстрировали), который всегда имеет преимущество в том, что он лучше определен, и «бизнес-пользователям» гораздо труднее учиться, потому что они (хочу) знать, что сказать, чтобы начать, не говоря уже о том, каковы пределы выразительности. Любой искусственный язык, который вы придумываете, используя ненормативную лексику, ориентированную на проблемную область, по определению является «языком, специфичным для предметной области».
Реальные аргументы в том, какой диапазон деятельности должен охватывать ваш язык? Насколько образованы ваши «бизнес-пользователи» (если они умеют кодировать, мне интересно, как их можно назвать «бизнес-пользователями»)? Согласны ли они с тем, что они готовы сказать (не спорю). Если вам нужны полностью общие вычисления, вы в конечном итоге получите типичный компьютерный язык (на самом деле хуже, потому что вы в конечном итоге будете подпрыгивать на функциях программирования, производя по-настоящему уродливого ребенка). Если вы можете сильно сузить сферу, вы можете закончить чем-то полезным.
Вопрос в том, можете ли вы разработать такой язык, который лучше, чем BRML, который вы намереваетесь заменить, для того, что пользователи ожидают сделать? [У меня нет мнения о том, насколько хорош BRML ILOG, но вы должны предположить, что они пытались решить эту проблему некоторое время, и, поскольку они все еще существуют, у них не должно быть глупого решения].
Если вы уверены, что можете, то вы можете использовать инструменты генератора кода на основе синтаксического анализатора для реализации DSL. Это довольно эксперимент; если вы начнете сейчас, вы не узнаете в течение года, успешен ли ваш подход, и он может потерпеть неудачу.
Хороший языковой дизайн, будь то процедурный или DSL, является сложным .
Что обычно случается с работоспособными DSL, так это то, что им удается решить интересную часть первоначальной проблемы, а остальным - «как-то». Один из способов справиться с этим - развить DSL: новый синтаксис, новая семантика и т. Д .; это случается с успешными DSL. Ожидайте, что ваш тоже будет развиваться. Другой типичный способ - предоставить несколько стандартных механизмов выхода (например, какой-то вызов процедуры, произвольные выражения, ...), а затем кто-нибудь добавляет дополнительные подпрограммы по требованию.
Даже если вы правильно понимаете DSL, он не может быть принят обществом. [Ada был действительно хорошим языком, и его заменили C и C ++, потому что программисты просто не хотели его изучать].