GeoSELECT.ru



Компьютеры / Реферат: Лабораторные работы по Теории вычислительных процессов и структур (Компьютеры)

Космонавтика
Уфология
Авиация
Административное право
Арбитражный процесс
Архитектура
Астрология
Астрономия
Аудит
Банковское дело
Безопасность жизнедеятельности
Биология
Биржевое дело
Ботаника
Бухгалтерский учет
Валютные отношения
Ветеринария
Военная кафедра
География
Геодезия
Геология
Геополитика
Государство и право
Гражданское право и процесс
Делопроизводство
Деньги и кредит
Естествознание
Журналистика
Зоология
Инвестиции
Иностранные языки
Информатика
Искусство и культура
Исторические личности
История
Кибернетика
Коммуникации и связь
Компьютеры
Косметология
Криминалистика
Криминология
Криптология
Кулинария
Культурология
Литература
Литература : зарубежная
Литература : русская
Логика
Логистика
Маркетинг
Масс-медиа и реклама
Математика
Международное публичное право
Международное частное право
Международные отношения
Менеджмент
Металлургия
Мифология
Москвоведение
Музыка
Муниципальное право
Налоги
Начертательная геометрия
Оккультизм
Педагогика
Полиграфия
Политология
Право
Предпринимательство
Программирование
Психология
Радиоэлектроника
Религия
Риторика
Сельское хозяйство
Социология
Спорт
Статистика
Страхование
Строительство
Схемотехника
Таможенная система
Теория государства и права
Теория организации
Теплотехника
Технология
Товароведение
Транспорт
Трудовое право
Туризм
Уголовное право и процесс
Управление
Физика
Физкультура
Философия
Финансы
Фотография
Химия
Хозяйственное право
Цифровые устройства
Экологическое право
   

Реферат: Лабораторные работы по Теории вычислительных процессов и структур (Компьютеры)



Министерство образования Российской Федерации
Саратовский государственный технический университет



ЛАБОРАТОРНАЯ РАБОТА №1

Лексический анализ входного языка транслятора
лабораторная работа по курсу «Теория вычислите-
льных процессов и структур» для студентов
специальности 220400 (ПВС)



Составил доцент кафедры ПВС
Сайкин А.И.



Саратов, 2001 г.
Введение
Данная лабораторная работа предназначается для студентов
специальности ПВС изучающих «Теорию вычислительных процессов и структур».
Лабораторная работа рассчитана на 4 аудиторных часа и 6 часов
самостоятельной работы по составлению
программы, изучение литературы и составление отчёта.
Объект исследования - трансляторы с алгоритмических языков
программирования. Процесс трансляции с алгоритмического языка можно условно
разбить на три этапа: лексический анализ, грамматический разбор и генерацию
машинного кода. В данной работе рассматривается задача построения
лексического анализатора
входного текста транслятора.
Цель работы состоит в составлении программы (сканера) производящей
лексический анализ текста, соответствующего заданному алфавиту и грамматике
алгоритмического языка.
Программа составляется на языках Паскаль и С++ по выбору студента в
среде WINDOWS.


1. Содержание работы.

Этап лексического анализа текста исходной программы выделяется в
самостоятельный этап работы транслятора, как с методической целью, так и с
целью сокращения времени компиляции программы. Последнее достигается за
счёт того, что
исходная программа в виде последовательности символов, преобразуется на
этапе лексической обработки к некоторому стандартному виду, что облегчает
дальнейший анализ.
Под лексическим анализом понимают процесс предварительной обработки
исходной программы, на котором основные лексические единицы программы -
лексемы: ключевые слова, идентификаторы, метки, константы приводятся к
единому формату и заменяются условными кодами или ссылками на
соответствующие таблицы, а коментарии исключаются из текста программы.
Результатом лексического анализа является список лексем-дескрипторов и
таблицы. В таблицах хранятся значения выделенных в программе лексем.
Дескриптор- это пара вида: ( . < указатель>),
где - это, как правило, числовой код класса лексемы, который
означает, что лексема принадлежит одному из конечного множества классов
слов, выделенных в языке программирования;
- это может быть либо начальный адрес области основной
памяти, в которой хранится адрес этой лексемы, либо число, адресующее
элемент таблицы, в которой хранится значение этой лексемы.
Количество классов лексем в языках программирования может быть
различным. Наиболее распространёнными классами являются:
идентификаторы;
служебные (ключевые) слова;
разделители;
константы.
Могут вводиться и другие классы. Это обусловлено в первую очередь той
ролью, которую играют различные виды слов при написании исходной программы
и переводе её в машинную программу. При этом наиболее предпочтительным
является разбиение всего множества слов, допускаемых в языке
программирования, на такие классы, которые бы не пересекались между собой.
В общем случае все выделяемые классы являются либо конечными (ключевые
слова, разделители и др.) - классы фиксированных для данного языка
программирования слов, либо
бесконечными или очень большими (идентификаторы, константы, метки)- классы
переменных для данного языка программирования слов.
С этих позиций коды лексем (дескрипторы) из конечных классов всегда
одни и те же в различных программах для данного компилятора. Коды же лексем
из бесконечных классов различны для разных программ и формируются всякий
раз на этапе лексического анализа.
В ходе лексического анализа значения лексем из бесконечных классов
помещаются в таблицы соответствующих классов. Конечность таблиц объясняет
ограничения, существующие в языках программирования на длины и
соответственно число используемых в программе идентификаторов и констант.
Числовые константы перед помещением их в таблицу могут переводиться
из внешнего символьного во внутреннее машинное представление. Содержимое
таблиц, в особенности таблицы идентификаторов, в дальнейшем пополняется на
этапе семантического анализа исходной программы и используется на этапе
генерации объектной программы.
В работе требуется составить программу лексического анализатора
(сканер) входного текста для транслятора, которая бы
составляла таблицы и производила бы кодирование идентификаторов,
разделителей и констант. Производила бы проверку правильности написания
ключевых слов операторов, стандартных функций и использование служебных
символов.
Производила бы отображение теста программы с комментариями и исключала бы
их из текста, подлежащего трансляции. Отображала
дескрипторный текст.

2. Задание по работе.

2.1. Получить вариант задания у преподавателя.
2.2. В соответствии с выданным вариантом выполнить следующее:
2.2.1. Составит техническое задание (ТЗ) на разработку
программы сканера, производящей лексический анализ произвольных текстов в
пределах установленного алфавита.
2.2.2. Согласовать ТЗ с преподавателем.
2.2.3. Разработать программу-сканер на языках
Паскаль, С++ или в интегрированных средах по собственному усмотрению.
2.2.4. Провести тестирование программы, особенно для всех
случаев выдачи пользователю сообщений об ошибках.
2.2.5. Составить отчёт по работе и приложить к нему ТЗ.


3. Варианты заданий.

Вариант задания включает номер, состоящий из трёх цифр.
Первая цифра означает выбор алфавита входного языка, вторая цифра означает
выбор заданных ключевых слов входного языка и третья цифра означает выбор
заданных библиотечных функций.

Таблица 1. Алфавит входного языка.
|№ | Алфавит |
| 1 |Латинский, строчные буквы |
| 2 |Латинский, заглавные буквы |
| 3 |Кириллица, строчные буквы |
| 4 |Кириллица, заглавные буквы |
| 5 |Латинский, строчные + заглавные |
| 6 |Кириллица, строчные + заглавные |

Таблица 2. Ключевые слова.
|№ | Дополнительные ключевые слова |
| 1 |Описание циклов, массивов |
| 2 |Описание операторов перехода, |
| |структуры типа switch |
| 3 |Описание безусловных переходов, |
| |описание функций |


Таблица 3. Библиотечные функции.
|№ | Стандартные функции |
|1 |sin, cos, tan, exp |
| |sqrt, log, ln, nearby |
|2 | |
| 3 |abs, fact, code, sign |

Например, 1-2-3 означает, что из первой таблицы необходимо выбрать
первую строку, из второй таблицы - вторую строку, из третьей таблицы -
третью строку.
Для всех вариантов задаётся общая часть в которую входит следующее.
Ключевые слова обозначающие начало и конец программы, описание типа, ввод и
вывод, присваивание.
Разделители : +, -, *, :, _, /, (, ), {, }, =, , [,
], ;, “, ‘ , ‘,’ и про-
бел.
Идентификаторы должны начинаться с буквы, не включать в себя
разделители, количество позиций не должно превышать 14.
Текст программы должен допускать использование комментариев.



4. Методические указания.

Рассмотрим основные идеи, которые лежат в основе
построения
лексического анализатора, и проблемы, возникающие при его
разра-
ботке.
Первоначально в тексте входной программы сканер выделяет
последовательность символов, которая по его предположению должна быть
словом в программе, т.е. лексемой. Может выделяться не вся
последовательность, а только один символ, который считается началом
лексемы. Это сделать просто, если слова в программе отделяются друг от
друга специальными разделителями,
например, пробелами или запрещено использование служебных слов в качестве
переменных, либо классы лексем распознаются по вхождению первых символов
лексемы.
Затем, проводится идентификация лексемы. Она заключается
в сборке лексемы из символов, начиная с выделенного на предыдущем этапе, и
проверки правильности записи лексемы данного класса.
Идентификация лексемы из конечного класса выполняется путём сравнения
её с эталонным значением. Основная проблема здесь - минимизация времени
поиска эталона. В общем случае может понадобиться полный перебор слов
данного класса, особенно, если выделенное слово содержит ошибку. Уменьшить
время поиска можно, используя различные методы ускоренного поиска:
упорядоченный список, линейный список, метод расстановки и др.
Для идентификации из очень больших классов используются специальные
методы сборки лексем с одновременной проверкой правильности написания. В
этих методах применяется формальный математический аппарат- теория
регулярных языков и конечных распознавателей.
При успешной идентификации значение лексемы из бесконечного класса
помещается в таблицу идентификации лексем данного класса. При этом
осуществляют проверку: не хранится ли уже там значение данной лексемы, т.е.
необходимо проводить просмотр элементов таблицы. Таблица при этом должна
допускать расширение. Опять же для уменьшения времени доступа к элементам
таблицы она должна быть специальным образом организована, при этом должны
использоваться специальные методы ускоренного поиска элементов.
После проведения успешной идентификации лексемы формируется её образ
- дескриптор, он помещается в выходные данные лексического анализатора. В
случае неуспешной идентификации формируется сообщение об ошибках в
написании слов программы.
В ходе лексического анализа могут выполняться и другие виды
лексического контроля, в частности, проверяться парность скобок и других
парных символов, наличие метки у оператора, следующего за GOTO и т.д.
Результаты работы сканера передаются в последствии на вход
синтаксического анлизатора. Имеется две возможности их связи:
раздельная связь и нераздельная связь.
При раздельной связи выходные данные сканера формируются
полностью и затем передаются синтаксическому анализатору. При
нераздельной связи, когда синтаксическому анализатору требуется
очередной образ лексемы, он вызывает лексический анализатор, кото-
рый генерирует дескриптор и возвращает управление синтаксическому
анализатору.
Второй вариант характерен для однопроходных трансляторов.
Таким образом, процесс лексического анализа достаточно прост, но может
занимать значительное время трансляции.
Рассмотрим конкретный пример. Пусть нам дана программа на
некотором алгоритмическом азыке:

PROGRAM PRIMER;
VAR X,Y,Z : REAL;
BEGIN
X:=5;
Y:=6;
Z:=X+Y;
END;

Применим следующие коды для типов лексем:
К1- ключевое слово;
К2- разделитель;
К3- идентификатор;
К4- константа.
Лексический анализ можно производить, если нам задан алфавит,
список ключевых слов языка и служебных символов.
Пусть всё это
имеется. Тогда внутренние таблицы сканера примут
следующий вид.
Таблица 4. Ключевые слова.

| № | Ключевое слово |
| 1 | PROGRAM |
| 2 | BEGIN |
| 3 | END |
| 4 | FOR |
| 5 | REAL |
| 6 | VAR |

Таблица 5. Разделители.
| № | Разделители |
| 1 | ; |
| 2 | , |
| 3 | + |
| 4 | - |
| 5 | / |
| 6 | * |
| 7 | : |
| 8 | = |
| 9 | . |


Результат работы сканера таблица идентификаторов и таблица констант

Таблица 6. Идентификаторы.
| № | Идентификаторы |
| 1 | PRIMER |
| 2 | X |
| 3 | Y |
| 4 | Z |



Таблица 7. Константы.
| № | Знач. констант |
| 1| 5 |
| 2| 6 |


На основании составленных таблиц можно записать входной текст через
введённые дескрипторы (дескрипторный текст):

( К1, 1) (К3, 1) (K2, 1)
( K1, 6) (K3, 2) (K2, 2) (k3, 3) ( K2, 2) (K3, 4) ( K2, 7) (K1, 5) (K2,
1)
( K1, 2)
( K3, 2) (K2, 7) (K2, 8) (K4, 1) (K2, 1)
( K3, 3) (K2, 7) (K2, 8) (K4, 2) (K2, 1)
( K3, 4) (K2, 7) (K2, 8) (K3, 2) (K2, 3) (K3, 3) (K2, 1)
( K1, 3) (K2, 9).

6. Содержание отчёта.
1. Титульный лист.
2. Вариант задания.
3. Полный список выбранных ключевых слов и стандартных функций.
4. Внутренние таблицы сканера.
5. Техническое задание на разработку сканера (по ЕСПД).
6. Отладочные примеры работы сканера с выходными таблицами и
дескрипторным текстом.

7. Контрольные вопросы.
1. Дайте определение грамматики.
2. Назовите этапы трансляции программы.
3. Что такое лексема?
4. В чём состоят задачи лексического анализа?
5. Дайте определение метаязыка.
6. Исходные данные для сканера.
7. Результаты работы сканера.

8. Литература.
1. Бек Л. Введение в системное программирование. М,: Мир, 1988.
-448 с.
2. Компаниец Р.И. и др. Системное программирование.Основы
построения трансляторов.- СПб.: КОРОНА принт, 2000.-256 с.





Реферат на тему: Лабораторные работы по информатике


ИДЗ №1

Дан одномерный массив [pic] Найти среднее арифметическое элементов массива,
имеющих чётные номера и удовлетворяющих условию [pic], а также сумму
положительных элементов массива. Все отрицательные элементы исходного
массива разделить на найденное значение суммы.


INPUT "Ввод массива"; N
FOR I = 1 TO N
PRINT "A("; I; ")=";
INPUT A(I)
NEXT I
S = 0: K = 0
FOR I = 2 TO N STEP 2
IF A(I) > -10 AND A(I) < 5 THEN
S = S + A(I)
K = K + 1
END IF
NEXT I
P = 0
FOR I = 1 TO N
IF A(I) > 0 THEN
P = P + A(I)
END IF
NEXT I
FOR I = 1 TO N
IF A(I) < 0 THEN
A(I) = A(I) / P
END IF
NEXT I
IF K = 0 THEN
PRINT "Деление на 0"
ELSE
SR = S / K
END IF
PRINT "Вывод нового массива"
FOR I = 1 TO N
PRINT "A("; I; ")="; A(I)
NEXT I
PRINT "Сумма положительных элементов="; P
PRINT "Средне арифметическое значение="; SR

|N |X1|X2|X3|X4|X5|
|5 |1 |-2|3 |4 |-5|

P=8 удовлетворяет условию

[pic] [pic] [pic]
-----------------------
[pic]







Новинки рефератов ::

Реферат: Объекты гражданского права и виды ценных бумаг (Менеджмент)


Реферат: Государственные реформы Петра I (История)


Реферат: Понятие и стадии уголовного процесса (Уголовное право и процесс)


Реферат: Выбор термообработки для метчиков и плашек изготовленных из стали У10 (Технология)


Реферат: Аргон инертный газ (Химия)


Реферат: Этика и психология (Социология)


Реферат: Семья как малая социальная группа (Социология)


Реферат: Глоссарий по теме: "Теории личности" (Философия)


Реферат: Пистолеты (Военная кафедра)


Реферат: Туберкулёз органов дыхания (Биология)


Реферат: Ричард Львиное Сердце (Исторические личности)


Реферат: Гетьмансьтво України: Іван Мазепа (Гетманство Украины. Иван Мазепа) (История)


Реферат: Социальная медицина (медицинское страхование) (Страхование)


Реферат: Проблемы и состояние страхового сектора в России (Страхование)


Реферат: Развитие физических качеств (Спорт)


Реферат: Международное право в период вооруженных конфликтов (Международное публичное право)


Реферат: Разработка программы управления промышленным роботом на базе контроллера SIMATIC S5 фирмы SIEMENS (Цифровые устройства)


Реферат: Социальные коммуникации (Социология)


Реферат: Внимание человека, способы его тренировки и развития. (Психология)


Реферат: Анализ финансовой деятельности предприятия ЗАО "Ртищевские продукты" (Бухгалтерский учет)



Copyright © GeoRUS, Геологические сайты альтруист