Министерство образования Российской Федерации
Саратовский государственный технический университет
ЛАБОРАТОРНАЯ РАБОТА №1
Лексический анализ входного языка транслятора
лабораторная работа по курсу «Теория вычислите-
льных процессов и структур» для студентов
специальности 220400 (ПВС)
Составил доцент кафедры ПВС
Сайкин А.И.
Саратов, 2001 г.
Введение
Данная лабораторная работа предназначается для студентов специальности ПВС изучающих «Теорию вычислительных процессов и структур». Лабораторная работа рассчитана на 4 аудиторных часа и 6 часов самостоятельной работы по составлению
программы, изучение литературы и составление отчёта.
Объект исследования - трансляторы с алгоритмических языков программирования. Процесс трансляции с алгоритмического языка можно условно разбить на три этапа: лексический анализ, грамматический разбор и генерацию машинного кода. В данной работе рассматривается задача построения лексического анализатора
входного текста транслятора.
Цель работы состоит в составлении программы (сканера) производящей лексический анализ текста, соответствующего заданному алфавиту и грамматике алгоритмического языка.
Программа составляется на языках Паскаль и С++ по выбору студента в среде WINDOWS.
Этап лексического анализа текста исходной программы выделяется в самостоятельный этап работы транслятора, как с методической целью, так и с целью сокращения времени компиляции программы. Последнее достигается за счёт того, что
исходная программа в виде последовательности символов, преобразуется на этапе лексической обработки к некоторому стандартному виду, что облегчает дальнейший анализ.
Под лексическим анализом понимают процесс предварительной обработки исходной программы, на котором основные лексические единицы программы - лексемы: ключевые слова, идентификаторы, метки, константы приводятся к единому формату и заменяются условными кодами или ссылками на соответствующие таблицы, а коментарии исключаются из текста программы. Результатом лексического анализа является список лексем-дескрипторов и таблицы. В таблицах хранятся значения выделенных в программе лексем.
Дескриптор- это пара вида: ( <тип> . < указатель>),
где <тип>- это, как правило, числовой код класса лексемы, который означает, что лексема принадлежит одному из конечного множества классов слов, выделенных в языке программирования;
<указатель>- это может быть либо начальный адрес области основной памяти, в которой хранится адрес этой лексемы, либо число, адресующее элемент таблицы, в которой хранится значение этой лексемы.
Количество классов лексем в языках программирования может быть различным. Наиболее распространёнными классами являются:
идентификаторы;
служебные (ключевые) слова;
разделители;
константы.
Могут вводиться и другие классы. Это обусловлено в первую очередь той ролью, которую играют различные виды слов при написании исходной программы и переводе её в машинную программу. При этом наиболее предпочтительным является разбиение всего множества слов, допускаемых в языке программирования, на такие классы, которые бы не пересекались между собой. В общем случае все выделяемые классы являются либо конечными (ключевые слова, разделители и др.) - классы фиксированных для данного языка программирования слов, либо
бесконечными или очень большими (идентификаторы, константы, метки)- классы переменных для данного языка программирования слов.
С этих позиций коды лексем (дескрипторы) из конечных классов всегда одни и те же в различных программах для данного компилятора. Коды же лексем из бесконечных классов различны для разных программ и формируются всякий раз на этапе лексического анализа.
В ходе лексического анализа значения лексем из бесконечных классов помещаются в таблицы соответствующих классов. Конечность таблиц объясняет ограничения, существующие в языках программирования на длины и соответственно число используемых в программе идентификаторов и констант.
Числовые константы перед помещением их в таблицу могут переводиться из внешнего символьного во внутреннее машинное представление. Содержимое таблиц, в особенности таблицы идентификаторов, в дальнейшем пополняется на этапе семантического анализа исходной программы и используется на этапе генерации объектной программы.
В работе требуется составить программу лексического анализатора (сканер) входного текста для транслятора, которая бы
составляла таблицы и производила бы кодирование идентификаторов, разделителей и констант. Производила бы проверку правильности написания ключевых слов операторов, стандартных функций и использование служебных символов.
Производила бы отображение теста программы с комментариями и исключала бы их из текста, подлежащего трансляции. Отображала
дескрипторный текст.
2.1. Получить вариант задания у преподавателя.
2.2. В соответствии с выданным вариантом выпол
Наверняка у вас есть товары или услуги, продажа которых приносит вам максимальную прибыль. Для быстрого старта в сети вам необходимо создание посадочной страницы (одностраничного сайта), на которой будет размещена информация о маржинальных товарах/услугах интернет магазина. За 8 лет опыта разработки конверсионных страниц мы выработали оптимальную структуру, которая позволит привлекать через landing page больше продаж. На такую структуру «одевается» ваш контент — фирменный стиль, тексты, фотографии, уникальные торговые предложения, после чего страница выходит в свет. Разработка лендинга и запуск в сети — до 7 рабочих дней. Стоит отметить, что в разработку самой посадочной страницы входит и написание копирайтером продающих текстов для вашего бизнеса, чтобы каждый посетитель страницы захотел совершить покупку именно у вас. Результат: качественно разработаная продающая посадочная страница, которая готова приносить вам новых клиентов.