Обычно используется такой подход: придумывают язык, на котором удобно было бы описывать специфичные проблемы - Domain Specific Langauge.
Ну и потом его реализуют. Тут есть два варианта, либо самому писать транслятор, что вобщем-то не трудно, но у пользователей возникает проблема изучения нового языка, интеграции его с другими программами и так далее. В-общем, мне этот вариант представляется тупиковым.
Более мощный подход, состоит в расширении существующего языка. Таким образом, не нужно учить новый язык и интерграция с другим ПО проходит легче. Тем более, что мощные языки программирования поддерживают возможность расширения. А в некоторых, например Лисп, Хаскел, это составляет основу языка.