Задание 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);

Пример дерева для данного фрагмента исходной программы представлен ниже: