Системное программное обеспечение. Лабораторный практикум. Алексей Молчанов

Чтение книги онлайн.

Читать онлайн книгу Системное программное обеспечение. Лабораторный практикум - Алексей Молчанов страница 22

Системное программное обеспечение. Лабораторный практикум - Алексей Молчанов

Скачать книгу

в таблице лексем – ссылку на таблицу идентификаторов со всей информацией о переменной или же только имя переменной. Но реализация лексического анализатора, при которой хранится именно ссылка на таблицу идентификаторов, чрезвычайно удобна для дальнейшей обработки данных, что будет очевидно в последующих работах (лабораторных работах № 3 и № 4). Поскольку лексический анализатор интересен не сам по себе, а в составе компилятора, такой подход принципиально важен.

      Кроме этого в структуре данных элемента таблицы лексем хранится информация о позиции лексемы в тексте входной программы:

      • iStr – номер строки, где встретилась лексема;

      • iPos – позиция лексемы в строке;

      • iAllP – позиция лексемы относительно начала входного файла.

      Эта информация будет полезна, в частности, при информировании пользователя об ошибках.

      Кроме этих данных структура содержит также:

      • четыре конструктора для создания лексем четырех разных типов:

      – CreateVar – для создания лексем типа «переменная»;

      – CreateConst – для создания лексем типа «константа»;

      – CreateInfo – для создания информационных лексем;

      – CreateKey – для создания лексем других типов;

      • деструктор Destroy для освобождения памяти, занятой лексемой (важен для информационных лексем);

      • свойства и функции для доступа к информации о лексеме.

      Хранить в структуре строку самой лексемы нет никакой необходимости (для переменных строка хранится в таблице идентификаторов, для других типов лексем она просто не нужна).

      Сама таблица лексем (тип данных TLexList) построена на основе динамического массива TList из библиотеки VCL (модуль Classes) системы программирования Delphi 5.

      Динамический массив типа TList обеспечивает все функции и данные, необходимые для хранения в памяти произвольного количества лексем (максимальное количество лексем ограничено только объемом доступной оперативной памяти). Для таблицы лексем TLexList дополнительно реализованы функции очистки таблицы, которые освобождают память, занятую лексемами, при их удалении из таблицы (функция Clear и деструктор Destroy), а также функция GetLexem и свойство Lexem, обеспечивающие удобный доступ к любой лексеме в таблице по ее индексу (порядковому номеру).

Модуль моделирования работы КА

      Модуль LexAuto, моделирующий работу КА, на основе которого построен лексический распознаватель, – самый значительный по объему программного кода. Однако по содержанию программного кода он предельно прост. Этот модуль обеспечивает функционирование полного КА, фрагменты графа переходов которого были изображены на рис. 2.1 и 2.2, а функция переходов была построена выше.

      Главной составляющей этого программного модуля является функция МакеLexList, которая непосредственно моделирует работу КА. На вход функции подается входная программа в виде списка строк (формальный параметр listFile) и таблица лексем, куда должны помещаться найденные лексемы (формальный параметр listLex). Результатом

Скачать книгу