Прошу подсказать, знакомы ли читателям версии компилятора компиляторов в исходниках, которые можно будет перетащить в .NET (или на JVM), и которые поддерживают модульное описание и позволят разбирать как императивные, так и функциональные языки.
Предполагаемая область использования — подготовка учебных языков программирования
Модульное описание синтаксиса pl2-rainbow.livejournal.com/1090.html
Идея: в примерах, которые я встречал, описание калькулятора (анализатор арифметических выражений) отдельно, другие языки отдельно. При этом анализатор арифметики является частью практически любого языка и может быть вынесен в подключаемый модуль описания языка.
В 1999 делал описание языка, которое проходило на TP YACC (Albert Graef), но описание приходилось делать в 15 файлах четырех категорий, которые сливались с помощью copy перед подачей на вход yacc.
Каскадные национальные языки программирования pl2-rainbow.livejournal.com/301.html
Идея: возможность последовательного перевода с языка народности на русский, затем на английский, затем трансляция в байт код (или машинный)
Основание: программа, написанная на национальном языке может быть проверена преподавателем на русском по листингу соответствующего уровня.
Для реализации достаточно использовать словарь времени компиляции — #define, вынесенные в отдельный специализированнный файл с указанием контекстов переводимого — пространство имен, класс, метод, параметр метода.
Тема национальных языков поднималась в статье
habrahabr.ru/post/176243/
Предполагаемые области видимости и группы операторов для порожденного языка:
functional — Функциональное — для разделов, использующих функциональное программирование.
aspect — Аспектное — для интерфесов и аспектов. Для методов могут указываться необходимые свойства и дополнения, используемые перед
predicate — Логичное — соответствует Булевым переменным, доказательству теорем, Аристотелевкой логике, работе с запросами SQL, LINQ или простейшим операциям Prolog.
controller — Управляющее — соответствует контроллеру (Controller) модели MVC
publish — Изменяемое — соответствует представлению (View) для модели MVC
public — Соединяющее — соответствует модели базы данных (Model) модели MVC
protected — Защищенное — внутренние элементы класса
private — Внутреннее — скрытые элементы класса
local — Блоковые — переменные методов и блоков
(из
habrahabr.ru/post/176249/ — Абстрактность и модель взаимодействия открытых систем)
Спасибо.