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

       

Конструкции языка С-бемоль


Мы начнем описание языка Си-бемоль(C) с общего описания конструкций, допустимых в этом языке (детали синтаксиса можно найти в прилагаемой грамматике, см. следующую страницу):

  1. Программа: Программа состоит из описаний классов, статических глобальных функций и директив using.
  2. Описание класса: класс состоит из описаний вложенных классов, описаний полей и методов. Единственным атрибутом полей и методов, который может быть явно указан, является static. Атрибуты видимости и прочие модификаторы не могут быть указаны явно (подразумевается public).

    Наследование допускается только от классов (не от интерфейсов).

  3. Методы: заголовки методов являются более или менее обычными, но квалификаторы ref, out использоваться не могут. Также отсутствуют методы c переменным число параметров.

    Тело метода может содержать операторы-выражения (например, вызов метода), if, while, for и return, а также операторы блока и описания переменных.

  4. В выражениях допустимо использование операций +, -, *, /, %, &, |, ^, вызова метода и индексации массива. Кроме того, реализованы операции сравнения выражений типов int, char, float на больше/меньше и (не)равенство и сравнение строк на равенство/неравенство.

    Также реализован оператор new, как для массивов, так и для простых объектов. Хотя описание собственных конструкторов с параметрами невозможно, вызов конструкторов стандартных классов с передачей им списка параметров допустим.

    Следует отметить, что оператор присваивания, в отличие от C#, возвращает значение типа void, то есть фактически может быть использован только как оператор-выражение.

    Особым образом следует сказать про вызов перегруженных методов в C: при вызове методов из стандартных классов используется стандартный алгоритм разрешения. При вызове методов из определенных в программе классов используется упрощенный алгоритм: выбор подходящего метода осуществляется только по числу параметров.

  5. Типы: реализованы встроенные типы void, int, char, string, float, object. Также возможнен доступ к любым классам из библиотеки mscorlib (доступ к другим библиотекам не реализован) и массивы из этих типов.



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