Задание 1. Построить дерево, содержащее информацию об идентификаторах анализируемой компилятором программы.
Каждая вершина дерева содержит следующую информацию об идентификаторе:
1) Имя идентификатора.
2) Значение хеш-функции, вычисленной по имени идентификатора.
3) Способ использования идентификатора – одно из значений перечислимого типа (CLASSES, CONSTS, VARS, METHODS).
4) Информация о типе идентификатора – одно из значений перечислимого типа (int_type, float_type, bool_type, char_type, string_type, class_type).
5) Если идентификатор является константой (способ использования CONSTS), то в вершине дерева необходимо хранить значение этой константы.
6) Если идентификатор является методом (способ использования METHODS), то необходимо хранить информацию о линейном списке параметров метода: тип параметра, способ передачи параметра (по значению, по ссылке, out).
7) Ссылки на левое и правое поддеревья.
Вершины дерева упорядочиваются в зависимости от значения хэш-функции вычисленной по имени идентификатора.
Шаги выполнения задания:
1. Создать обобщенный класс/структуру «Бинарное дерево».
2. Создать класс/структуру «Идентификатор».
3. Создать 7-10 экземпляров класса/структуры «Дерево идентификаторов», содержащих информацию о различных идентификаторах.
4. В качестве «бонуса» написать модуль, позволяющий выполнять парсинг файла, в котором описаны идентификаторы исходной программы. Пример структуры файла приведен ниже.
Структура файла с описанием идентификаторов:
int a;
const float c = 10;
class MyClass;
string method1 (int x1, ref char x2, out float x3);
…
Пример дерева для данного фрагмента исходной программы представлен ниже:



