Для того, чтобы научиться написанию компиляторов, необходима практика. Однако, реальные языки программирования не очень хорошо подходят в качестве тренировочного полигона, так как при их реализации чаще всего приходится существенно усложнять структуру компилятора из-за всяких второстепенных особенностей языка.
Поэтому в качестве примера к нашему курсу мы разработали специальный язык, полученный путем усечения C#. Этот язык получил название C-бемоль, здесь мы вкратце опишем основные ограничения этого языка по сравнению с C# (более подробная спецификация этого языка приведена в приложении к курсу).
классы (могут содержать поля и методы, но только вида public, private или static ; вложенные классы запрещены)
интерфейсы (однако поддерживается только импорт существующих интерфейсов в целях совместимости с платформой .NET - описание новых интерфейсов запрещено)
одномерные массивы
тип данных "множество" ( set ), подобно одноименному типу в Паскале (этот тип введен в состав языка для того, чтобы продемонстрировать приемы реализации типов, отсутствующих в .NET)
Из управляющих конструкций допускаются только if-then-else, while-do, do-while, присваивания, вызовы, пустой и составной операторы. Каждый оператор должен выдавать значение.
Поддерживаются стандартные операции (+, -, *, /, %), причем тип операции всегда определяется по типу первого операнда.
Перегрузка методов допускается, но при вызове список параметров должен определять вызываемый метод единственным образом.
Все приведения должны быть записаны явным образом.
Курс сопровождается примером реализации C-бемоль, который может быть использован как дополнительный демонстрационный материал во время лекций.