Разработка компиляторов

       

C-бемоль


Для того, чтобы научиться написанию компиляторов, необходима практика. Однако, реальные языки программирования не очень хорошо подходят в качестве тренировочного полигона, так как при их реализации чаще всего приходится существенно усложнять структуру компилятора из-за всяких второстепенных особенностей языка.

Поэтому в качестве примера к нашему курсу мы разработали специальный язык, полученный путем усечения C#. Этот язык получил название C-бемоль, здесь мы вкратце опишем основные ограничения этого языка по сравнению с C# (более подробная спецификация этого языка приведена в приложении к курсу).

  • Из типов данных поддержаны только следующие:
    • встроенные типы int , char , float , bool , string , void

    • классы (могут содержать поля и методы, но только вида public, private или static ; вложенные классы запрещены)

    • интерфейсы (однако поддерживается только импорт существующих интерфейсов в целях совместимости с платформой .NET - описание новых интерфейсов запрещено)

    • одномерные массивы

    • тип данных "множество" ( set ), подобно одноименному типу в Паскале (этот тип введен в состав языка для того, чтобы продемонстрировать приемы реализации типов, отсутствующих в .NET)

  • Из управляющих конструкций допускаются только if-then-else, while-do, do-while, присваивания, вызовы, пустой и составной операторы. Каждый оператор должен выдавать значение.
  • Поддерживаются стандартные операции (+, -, *, /, %), причем тип операции всегда определяется по типу первого операнда.
  • Перегрузка методов допускается, но при вызове список параметров должен определять вызываемый метод единственным образом.
  • Все приведения должны быть записаны явным образом.

Курс сопровождается примером реализации C-бемоль, который может быть использован как дополнительный демонстрационный материал во время лекций.



Содержание раздела