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

Автор: Алексей Молчанов
Издательство: Питер
Серия:
Жанр произведения: Программирование
Год издания: 2006
isbn: 978-5-469-00391-4
Скачать книгу
можно было бы выполнять на момент ее записи в таблицу лексем с помощью стандартных операций сравнения строк. Граф переходов КА в таком варианте был бы намного компактнее – он выглядел бы точно так же, как фрагмент, представленный на рис. 2.1. Его можно назвать «сокращенным» графом переходов КА (или «сокращенным КА»).

      Но следует отметить, что, несмотря на большую наглядность и простоту реализации, сокращенный КА будет менее эффективным, поскольку в момент записи лексемы в таблицу он должен будет выполнять ее сравнение со всеми известными ключевыми словами (в данном случае надо определять шесть ключевых слов – следовательно, будет выполняться шесть сравнений строк). То есть такой КА будет повторно просматривать уже прочитанную часть входной цепочки, да еще и несколько раз! И хотя в явном виде в реализации сокращенного КА эта операция не присутствует, она все равно будет выполняться в вызове библиотечной функции сравнения строк.

      Итак, хотя сокращенный КА меньше по количеству состояний и проще в реализации, он является менее эффективным, чем полный КА, построенный на анализе всех входных лексем. Тем не менее оба варианта реализации КА обеспечивают построение требуемого лексического анализатора. Какой из них выбрать, решает разработчик компилятора.

      Реализация лексического анализатора

Разбиение на модули

      Модули, реализующие лексический анализатор, разделены на две группы:

      • модули, программный код которых не зависит от входного языка;

      • модули, программный код которых зависит от входного языка.

      В первую группу входят модули:

      • LexElem – описывает структуру данных элемента таблицы лексем;

      • FormLab2 – описывает интерфейс с пользователем.

      Во вторую группу входят модули:

      • LexType – описывает типы входных лексем, связанные с ними наименования и текстовую информацию;

      • LexAuto – реализует функционирование КА.

      Такое разбиение на модули позволяет использовать те же самые структуры данных для организации лексического распознавателя при изменении входного языка.

      Кроме этих модулей для реализации лабораторной работы № 2 используются также программные модули (TblElem и FncTree), позволяющие работать с комбинированной таблицей идентификаторов, которые были созданы при выполнении лабораторной работы № 1. Эти два модуля, очевидно, также не зависят от входного языка.

      Кратко опишем содержание программных модулей, используемых для организации лексического анализатора.

Модуль типов лексем

      Модуль LexType в детальных комментариях не нуждается. В нем перечислены все допустимые типы лексем (тип данных TLexType), каждой из которых соответствует наименование и обозначение лексемы. Вывод наименований лексем обеспечивает функция LexTypeName, а вывод обозначений – функция LexTypeInfo. Следует отметить, что кроме перечисленных в задании лексем используется еще одна дополнительная информационная лексема (LEXSTART), обозначающая