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