Cobol вполне высокоуровневый, это, кстати, один из первых DSL. А как Вы будете проверять корректность такой трансляции?
Я не знаю. Ну будь задача полностью поставлена, ее давно бы уже решили! 😉
Вообще есть разные средства анализа, которые строят, скажем, графы вызовов и не сильно заморачиваются насчёт корректности. Тот же Doxygen часто лажает, сливая разные классы с одинаковыми именами в один на диаграмме, и всё равно остаётся полезен.
Соответственно, у меня возник вопрос - почему нестрогие диаграммы строить можно, а писать на не совсем строгом языке нельзя? Может быть это вопрос привычки?
Примерно год назад мне пришлось объяснять работу метапрограммирования на С++, и выяснилось, что проще всего это сделать, объяснив, что такое term rewriting, а дальше просто перевести конструкции C++ на, в общем-то, язык Miranda. Перевод нестрогий, надо сказать.