Я бы порекомендовал создать свой DSL поверх существующего языка (внутреннего DSL). Я делал это несколько раз с Python, создавая системы, в которых потребитель DSL записывает файл python, который используется в качестве файла конфигурации системы. Файл конфигурации использует определенные мной конструкции (классы, функции). Эти конструкции образуют DSL.
IMO, такой язык, как Python (IronPython или Jython, если хост-система - .NET или Java) или Ruby (IronRuby, JRuby), лучше использовать в качестве основы DSL, чем Java или C #.
В моем случае хост-системы также были (C) Python, поэтому выбор Python для DSL был естественным.
Некоторые плюсы:
- Более низкая стоимость строительства. Существует намного меньше для вас, чтобы реализовать. Вы можете сосредоточиться на проблеме, а не тратить время на реализацию парсера / компилятора / интерпретатора.
- Доступ к языку хоста: Ваш язык будет иметь доступ ко всем возможностям существующего языка / платформы.