- •Содержание
- •1. Организация таблицы идентификаторов
- •1.1 Исходные данные
- •1.2 Назначение таблиц идентификаторов
- •1.4 Упорядоченный список
- •1.5 Результаты
- •2. Проектирование лексического анализатора
- •2.1 Исходные данные
- •2.3 Схема распознавателя
- •2.2 Принципы работы лексического анализатора
- •2.4 Результаты
- •Проектирование синтаксического анализатора
- •3.1 Исходные данные
- •3.2 Построение синтаксического анализатора
- •Результаты
- •Список литературы
1.4 Упорядоченный список
Метод организации таблицы идентификаторов, в котором при добавлении надо перестраивать весь список, т.е. упорядочивать его согласно некоторому условию.
В этом методе применяется бинарный или логарифмический способ поиска элементов. Алгоритм этого поиска заключается в следующем: искомый символ сравнивается с элементом (N+1)/2 в середине таблицы; если этот элемент не является искомым, то мы должны просмотреть только блок элементов, пронумерованных от 1 до (N+1)/2 – 1, или блок элементов от (N+1)/2 + 1 до N в зависимости от того, меньше или больше искомый элемент того, с которым его сравнивали. Затем процесс повторяется с блоком в два раз меньшего размера. Так продолжается до тех пор, пока либо не будет найден искомый элемент, либо алгоритм не дойдет до очередного блока.
Так
как на каждом шаге число элементов,
которые могут содержать искомый элемент,
сокращается в 2 раза, максимальное число
сравнений равно 1+log2(N).
Недостатком данного метода в том, что для поиска требуется упорядочивание таблицы идентификаторов, следовательно, время заполнения будет зависеть от числа добавляемых элементов.
Блок-схемы добавления и поиска элемента в упорядоченном списке представлены на рис. 3 и рис. 4.
Рис. 3. Блок-схема алгоритма добавления элемента в упорядоченный список
min(начало
блока элементов)=1;
max(конец
блока элементов)=N;
max=(
max-min)/2-1
Нет
Да
Да
Нет
min=(
max-min)/2+1
Рис. 4 Блок-схема алгоритма поиска элемента в упорядоченном списке
1.5 Результаты
Полученные результаты (рис. 5) говорят о том, что при поиске в методе хеш-адресации с рехешированием количество операций сравнения и среднее число сравнений меньше, чем при упорядоченном списке. А так как чаще всего компилятору приходится искать идентификатор, то, следовательно, метод хеш-адресации с рехешированием более эффективен.
Рис. 5 Экранная форма организации таблиц идентификаторов
2. Проектирование лексического анализатора
2.1 Исходные данные
Требуется написать программу, которая выполняет лексический анализ входного текста в соответствии с заданием и порождает таблицу лексем с указанием их типов и значений. Текст на входном языке задается в виде символьного (текстового) файла. Программа должна выдавать сообщения о наличии во входном тексте ошибок, которые могут быть обнаружены на этапе лексического анализа.
Входной язык содержит:
операторы цикла “do” и “while”;
идентификаторы;
круглые открывающиеся и закрывающиеся скобки;
операторы сравнения “<”, “>”, “=”;
знак присваивания “:=” ;
составные операторы “begin” и “end”;
условные операторы “if”, “then”, “else” и “endif”;
ключевые слова начала и конца программы “prog” и “end.”;
разделяющий знак “;”.
логические операторы “not”, “and” и “or”;
арифметические операции сложения, вычитания, умножения и деления;
комментарии любой длины в фигурных скобках;
константы в шестнадцатеричной форме.
