Главная arrow Программирование С++ arrow Определения Mini С++

Определения Mini С++

Несмотря на то, что у С++ немного ключевых слов, это очень богатый и сложный язык. Потребуется не одна глава для описания и реализации интерпретатора всего языка С++. Предлагаемый интерпретатор Mini С++ понимает очень узкое подмножество языка, но оно включает в себя большинство наиболее важных элементов С++. Например, интерпретатор Mini С++ поддерживает рекурсивные функции, глобальные и локальные переменные вложенные области видимости (nested scope) и большинство управляющих операторов. Далее приведен перечень всех поддерживаемых интерпретатором элементов языка:
? параметризованные функции с локальными переменными;
? вложенные области видимости;
? рекурсия;
? оператор if;
? оператор switch;
? ЦИКЛЫ do-while, while И for;
? оператор break;
? локальные и глобальные переменные типов int и char;
? параметры функций типов int и char;
? целые и символьные константы;
? константы типа string (ограниченная реализация);
? группа стандартных библиотечных функций;
? оператор return со значением и без;
? операции: +, -,*, /, %, <, >, <=, >=, ==, !=, ++, —, унарный - и унарный +;
? функции, возвращающие целые значения;
? знаки комментариев: /* и //;
? консольный ввод/вывод с помощью операторов cin и cout.
Несмотря на то, что приведенный перечень может показаться коротким, он потребует для реализации внушительного объема кода. Приходится платить существенную "входную плату" за интерпретацию такого языка, как С++ Хотя перечисленные элементы описывают лишь его небольшую часть, они позволяют интерпретатору обрабатывать ядро языка, включая его базовый синтаксис, управляющие операторы, выражения и средства вызова функций. Таким образом, Mini С++ интерпретирует то, что можно назвать основной сутью языка С++.
Как вы, несомненно, заметили, интерпретатор Mini С++ не поддерживает тип class. Причина этого чисто практическая. Поддержка типа class означала бы, что интерпретатор также обрабатывает определенные пользователем типы, реализацию объектов (object instantiation), и операцию-точку (dot (.) operator). Более того, тип class требует, чтобы интерпретатор понимал назначение спецификаторов public и private. Несмотря на то, что интерпретатору несложно обрабатывать каждый из этих элементов, все вместе они приведут к разрастанию кода интерпретатора до объема, который невозможно представить в одной главе данной книги. После того как вы поймете, как действует интерпретатор, возможно, у вас появится желание самостоятельно добавить поддержку типа class.
К другим элементам языка, не обрабатываемым интерпретатором, относятся перегрузка функций и операций, шаблоны, пространства имен, исключения, препроцессор, структуры, объединения и битовые поля. Опять-таки, интерпретировать их не сложно, но код интерпретатора вырастет до размеров, неприемлемых для книги подобного формата. Включение обработки этих элементов может стать интересным проектом для вашей самостоятельной работы.