- •Билет 2 (Проверка открытия exe файла)
- •Клава.Асм
- •Выводит хвост командной строки
- •Породитель процесса (par.Asm)
- •Порождаемый процесс
- •Билет 3 (сканер для лексем)
- •Билет 4 (построить грамматику с возведением в степень)
- •Билет 5 (преобразование для нисходящего разбора)
- •Билет 6 (грамматика для if then else)
- •Билет 7 (представление массива и выведение формулы)
- •Билет 8 (хеш - функция)
- •Билет 9(Построить таблицу идентификаторов)
- •Билет 10 (ка для сканера лексем)
- •Билет 11(грамматика для чисел)
- •Билет 13 (матрица предшествования для грамматики)
- •Билет 14(анализ грамматики для метода предшествования)
- •Билет 16 (Заголовок exe)
- •Билет 17(Структура диска ms-dos)
- •Билет 18 (Синтаксический анализ теория) не написано Билет 19 (Лексический анализ теория)
- •Требования к грамматике нисходящего метода
- •Семантические программы. Перевод инфиксной записи в польскую.
- •Тетрады
- •Хранение грамматики с использованием сети
- •Аппаратные прерывания
- •Представление многомерных массивов в памяти эвм
- •Свободные кластеры логического диска "а" (на всякий)
Билет 9(Построить таблицу идентификаторов)
Построить таблицу идентификаторов, используя таблицу переполнения для специальной таблицы идентификаторов. В качестве ключа строки таблицы используется первый символ идентификатора.
Построение таблицы с переполнением идентификаторов используется для борьбы с коллизией в хеш-таблицах. Данный метод называется методом цепочек и заключается он в том, что мы создаем М связных списков, по одному на каждое значение хеш-функций. В списке хранятся ключи, дающие одинаковое значение хеш-кодов. Тогда если мы имеем N-ключей и М списков, то средний размер хеш-таблицы будет (N-1)xM, что приведет к уменьшению времени поиска, по сравнению с последовательным списком в М раз.
Пусть у нас имеется следующий список идентификаторов:
a1,a2,cc,c1,c2,b8
Так как ключом таблицы является первый символ идентификатора, то получим следующую хеш-таблицу.
Такую коллизию можно устранить следующим образом:
УСТРАНЕНИЕ КОЛЛИЗИЙ МЕТОДОМ ЦЕПОЧЕК ПЕРЕПОЛНЕНИЯ
Для записи переполнения в методе открытого перемешивания заводят отдельную таблицу. В дополнительной таблице записи переполнения связываются в цепочку.
( В лекции) Для хранения записей, вызывающих коллизию заводят специальную таблицу. В основной таблице, которую можно назвать входной, дополнительно каждой записи отводится поле указателей. В это поле при возникновении коллизии записывается адрес цепочки продолжения дополнительной таблицы. Цепочка продолжения(переполнения) состоит из списка записей, находящихся в дополнительной таблице для записей с одинаковыми ключами.
В этом случае таблица будет иметь вид: а,с1,а3,b1,a4,h,h1.
Используется также метод перемешивания с внутренними цепочками, при этом заполнение позиций отображающего вектора состоит из двух этапов: используется внутренняя таблица переполнения, а затем после формирования основной дополнительной таблицы производится перенесение записи из дополнительной таблицы в основную.
(В лекции) Таблица с внутренними цепочками переполнения. В этом случае деление таблиц делается на промежуточном этапе. На определенном этапе информация из дополнительной таблицы переносится в основную(динамическое изменение размеров таблицы).
|
|
|
|
Билет 10 (ка для сканера лексем)
Построить конечный автомат для сканера лексем.
(Общая задача, в задании будет дан список лексем, для которых надо построить конечный автомат).
Лексема - конструкция, составляемая из символов алфавита. Может иметь бесконечную длину. Лексемы формируются по заранее определенным правилам.
Примерами лексем могут служить: идентификаторы, ключевые слова, константы, разделители.
Пример КА для идентификаторов:
Пример КА для следующих лексем: XEX, XOX, fox, fex:
Билет 11(грамматика для чисел)
Построить грамматику для чисел (целые, вещественные, вещественные с порядком)
Грамматика – правила построений конструкций (лексем) из символов алфавита языка.
1. В качестве целых чисел будем понимать числа вида: 10, 20, 0, -5, +100; причем 10е5 (105) не является целым.
2. В качестве вещественных чисел будем понимать числа вида: 1.5, 2.5, -5.0, .23
3. В качестве вещественных чисел с порядком будем понимать числа вида: 1.5е10, 2е2, 2.2е-3, 5е-2
Тогда грамматика примет вид:
1) <целое> :: = < целое >|+ < целое >| -< целое >
2) < целое число> :: = <цифра>|< целое > <цифра>
3) < цифра > :: = 0|1|2|…|9
4) <вещественное> :: = <целое число>. <целое>|< целое число > <порядок>|< целое число >.<целое> <порядок>|.<целое>|.<целое> <порядок>
5) <порядок> :: е+<целое>|e< целое >|e-< целое >
Билет 12 (стек для выражения a+b*(c+d))
Построить заключительное состояние стека для предложения языка а+b*(с+d)
Предложение языка – сентенциальная форма, состоящая только из терминальных символов.
L(G(z)) = {x|z => xx^xэ (VTT)}
Сентенциальная форма: для грамматики G[z] x – сентенциальная форма, если она выводима из z
z => *x
Пусть дана грамматика G[z]
1) z :: = E#
2) E :: = T+E|T
3) T :: = F*T|F
4) F :: = id| (E)
Тогда дерево разбора будет выглядеть следующим образом:
Пронумеруем вершины дерева по порядку их разбора. Каждый элемент семантического стека состоит из 4 компонент:
GOAL – цель, символ для разбора
FAT – номер родителя в стеке
BRO – брат в дереве разбора (самый левый символ)
SUN – сын в дереве разбора (самый правый символ)
Получаем следующие состояния синтаксического стека в конце разбора
№ |
GOAL |
FAT |
SUN |
BRO |
1 |
z |
- |
25 |
- |
2 |
E |
1 |
7 |
- |
3 |
T |
2 |
4 |
- |
4 |
F |
3 |
5 |
- |
5 |
id(a) |
4 |
- |
- |
6 |
+ |
2 |
- |
3 |
7 |
E |
2 |
8 |
6 |
8 |
T |
7 |
12 |
- |
9 |
F |
8 |
10 |
- |
10 |
id(b) |
9 |
- |
- |
11 |
* |
8 |
- |
9 |
12 |
T |
8 |
13 |
11 |
13 |
F |
12 |
24 |
- |
14 |
( |
13 |
- |
- |
15 |
E |
13 |
20 |
14 |
16 |
T |
15 |
17 |
- |
17 |
F |
16 |
18 |
- |
18 |
id(c) |
17 |
- |
- |
19 |
+ |
15 |
- |
16 |
20 |
E |
15 |
21 |
19 |
21 |
T |
20 |
22 |
- |
22 |
F |
21 |
23 |
- |
23 |
id(d) |
22 |
- |
- |
24 |
) |
13 |
- |
15 |
25 |
# |
1 |
- |
2 |
