Несмотря на то, что у С++ немного ключевых слов, это очень богатый и сложный язык. Потребуется не одна глава для описания и реализации интерпретатора всего языка С++. Предлагаемый интерпретатор 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. К другим элементам языка, не обрабатываемым интерпретатором, относятся перегрузка функций и операций, шаблоны, пространства имен, исключения, препроцессор, структуры, объединения и битовые поля. Опять-таки, интерпретировать их не сложно, но код интерпретатора вырастет до размеров, неприемлемых для книги подобного формата. Включение обработки этих элементов может стать интересным проектом для вашей самостоятельной работы.
|