4.1 Постановка задачи.
В свете вышесказанного перед нами (группой разработчиков) встала задача
напсания транслятора с языка Норма с использованием инструментальных средств
языка программирования Си и библиотеки функций работы с операивной памятью.
Передо нами (двумя разработчиками) была поставлена задача написания функций
работы с таблицами имен и констант.
4.2 Решение задачи.
Для начального заполнения таблиц имен и констант были выбраны хэш-таблици.
При этом мы проигрывали в использовании оперативной памяти, но выигрывали во
времени (по сравнению с "деревьями"). Учитывая повышенные требования к
использованию памяти нами было рпинято решение по окончанию этапа лексического
анализа (т.е. после того как завершится предварительное заполнение таблиц имен
и констант и нам будет вточности известно количество идентификаторов и констант
используемых в транслируемой программе) провести конвертацию поисковой части
хэш-таблиц в непрерывные массивы фиксированной длины. При этом мы увеличиваем
обшее время трансляции за счет времени конвертации, но выигрываем в использовании
оперативной памяти за счет уменьшения числа информационных полей (в хэш-таблице
сушествует поле содержащее код идентификатора(константы), который является
ключом этого идентификатора(константы) в дальнейшей работе транслятора, в
масиве роль ключа будет играть смешение зтого элемента от начала массива -
индекс масива), а так же за счет освобождения неисопльзуемых учасков в
хэш-таблице (в любой хэш-таблице из за случайности процесса хэширования
появляются неиспользованные области приблизительно 30% от величины всей таблици).
Плюсом также является умьшение времени поиска по ключу. В масиве эта операция
эквавалентна взятию индекса от масива. В хэш-таблице поик гораздо дольше.
4.3 Выбор структуры данных
3. ЗАКЛЮЧЕНИЕ
В результате проделанной работы мною были достигнуты следуюющие цели:
- ознакомилась и изучила непроцедурный язык программирования Норма, предназначенный для записи численных методов решения задач математической физики разностными методами;
- изучила структуру транслятора с языка программирования Норма;
- ознакомилась с методами лексического анализа;
- изучила структуру лексического анализатора;
- разработала структуру данных своей части задания для реализации лексического анализатора;
-написала функцию, на вход которой поступает список лексем, а на выходе получаем список списков. Элементом этого списка списков является список лексем, который представляет собой одно предложение программы, написанной на Норме, оканчивающееся точкой. Т.е. эта функция "режет" поступающий на вход список лексем по точкам, а на выходе получаем список предложений, каждое из которых заканчивается точкой и представляется списком лексем.
Программа находится на стадии разработки. Завершение работы планируется в следующем семестре. Задание на УИР и КП выполнила полностью.
Список литературы:
А.Н. Андрианов, К.Н. Ефимкин, И.Б. Задыхайло, Н.В. Поддерюгина "Язык Норма"
А.Н. Андрианов, К.Н. Ефимкин, И.Б. Задыхайло "Непроцедурный язык Норма и методы его реализации"
А.Б. Бугеря "Реализация математических функций языка Норма для распределенных высислительных систем"
Приложение 1.