Дерево вывода и цепочка вывода, построенные на основе входной цепочки. Преобразование дерева синтаксического обзора в дерево операций
Триады - многоадресный код с неявно именуемым результатом C=A*12+K*(2-3*B) 1. *(A,12) 2. *(3,B) 3. – (2,2 ) 4. *(K,3 ) 5. +(1 ,4 ) 6.:= (C,5 ) 2. Тетрады – многоадресный код с явно именуемым результатом C=A*12+K*(2-3*B) 1. *(A,12,D1) 2. *(3,B,D2) 3. – (2,D2,D3) 4. *(K,D3,D4) 5. +(D1,D4,D5) 6.:= (D5,0,C) 3. Построение таблицы идентификаторов методом бинарного дерева. Идентификаторы поступают в следующем порядке: K1, A22, B1, M, P3, L. Решение: создаем дерево идентификаторов, листья пишутся с точи зрения расположения букв в алфавите – если по алфавиту меньше то на налево, если больше то направо.
Обратная польская запись операций
Вычислить выражения в обратной польской записи с использованием стека. Выражение: 5*9-6*(3+4)
5 | 9 | * | 6 | 3 | 4 | + | * | - | ||||||||
|
|
|
|
|
|
|
|
| ||||||||
|
|
|
|
| 4 |
|
|
| ||||||||
|
|
|
| 3 | 3 | 7 |
|
| ||||||||
| 9 |
| 6 | 6 | 6 | 6 | 42 |
| ||||||||
5 | 5 | 45 | 45 | 45 | 45 | 45 | 45 | 3 |
Заполнение таблицы идентификаторов методом цепочек (хэш адресация методом цепочек)
Идентификаторы поступают в следующем порядке: ab, ac, an, ak, bc, az, ck. Максимальное значение ХФ Nm=13 (под ХТ будет выделен объем памяти, равный 13). Используемая ХФ-ASCII-код первой буквы идентификатора.
h(ab)=h(ac)=h(an)=h(ak)=h(az)=d7
|
|
h(bc)=d3
h(ck)=d9
ХТ | ТИ | ||||
d1 |
| a1 | ab | a2 | |
d2 |
| a2 | ac | a3 | |
d3 | a5 | a3 | an | a4 | |
d4 |
| a4 | ak | a5 | |
d5 |
| a5 | bc | a6 | |
d6 |
| a6 | az | a7 | |
d7 | a1 | a7 | ck | - | |
d8 |
| ||||
d9 | a7 | ||||
d10 |
| ||||
d11 |
| ||||
d12 |
| ||||
d13 |
|
Указатель
6. Заполнение таблицы идентификаторов методом рехеширования с помощью произведения
Формула для простого рехеширования hi(A)=(h(A)+i)mod Nm
Формула для рехеширования с помощью произведения hi(A)=(h(A)*i)mod Nm
Идентификаторы поступают в следующем порядке: ab, ac, an, ak, bc, az, ck. Максимальное значение ХФ Nm=13 (под ТИ будет выделен объем памяти, равный 13). Используемая ХФ- ASCII-код первой буквы идентификатора.
h(ab)=h(ac)=h(an)=h(ak)=h(az)=d7
h(bc)=d3
h(ck)=d9
ТИ | |
d1 | ac |
d2 | ak |
d3 | |
d4 |
|
d5 | ck |
d6 |
|
d7 | ab |
d8 | an |
d9 | az |
d10 | |
d11 | |
d12 | |
d13 |
|
Шаг 1. h(ab)=d7
Шаг 2. h(ac)=d7 - коллизия
h1(ac)=(h(ac)*1)mod13=d7 - коллизия
h2(ac)=(h(ac)*2)mod13=d1
Шаг 3. h(an)=d7 - коллизия
h1(an)=(h(an)*1)mod13=d7 - коллизия
h2(an)=(h(an)*2)mod13=d1- коллизия
h3(an)=(h(an)*3)mod13=d8
Шаг 4. h(ak)=d7 - коллизия
|
|
h1(ak)=(h(ak)*1)mod13=d7 - коллизия
h2(ak)=(h(ak)*2)mod13=d1 - коллизия
h3(ak)=(h(ak)*3)mod13=d8 - коллизия
h4(ak)=(h(ak)*4)mod13=d2
Шаг 5. h(bc)=d3
Шаг 6. h(az)=d7 - коллизия
h1(az)=(h(az)*1)mod13=d7 - коллизия
h2(az)=(h(az)*2)mod13=d1 - коллизия
h3(az)=(h(az)*3)mod13=d8 - коллизия
h4(az)=(h(az)*4)mod13=d2 - коллизия
h5(az)=(h(az)*5)mod13=d9
Шаг 7. h(ck)=d9 - коллизия
h1(ck)=(h(ck)*1)mod13=d9 - коллизия
h2(ck)=(h(ck)*2)mod13=d5
Цепочки вывода и дерево вывода
На основе заданной грамматики построить множество цепочек вывода. Если число без знака (допустим 575), то начинаем разбор по правилу с крайнего правого символа, если число со знаком (+ или -, т.е. -9856 или +9856), то начинаем разбор с крайнего левого символа.
S=>*575 S=>*-9856
P: S→T1|+T2|-T3
T→F4|TF5
F→06|17|28|39|410|511|612|713|814|915
S T TF T5 TF5 T75 F75 575
S=>7575 – 7 это то количество шагов, за которые мы получили 575
-T -TF -TFF -TFFF -FFFF -9FFF -9F5F -985F -9856
S=>8-9856
Преобразование конечного автомата (КА) в детерминированный конечный автомат (ДКА)
Задан КА M({H,A,B,S},{a,b,c}, ,H,{S})
: (a,H)=A (c,A)=B (c,H)=B (b,B)=A (a,A)=B (b,B)=S
Необходимо построить эквивалентный ему ДКА
M’(Q’,V’, ’,q0’,F’)
1. Находим множество состояний эквивалентного ДКА
Поскольку в КА 4 состояния (n=4), то в ДКА будет m=2n-1=15
Q’={H,A,B,S,HA,HB,HS,AB,AS,BS,HAB,HAS,HBS,ABS,HABS}
2. Строим функцию переходов эквивалентного ДКА по таблице. Если в скобках в самой верхней строке, после запятой (т.е. допустим на месте, где написано «Н» в (a,H)=A), есть искомая буква из столбца, написанная также в скобках после запятой (т.е.допустим «Н» в H (*,H)), то пишем плюс. Если у нас две, три и более искомых букв, то, найдя в самой верхней строке в скобках после запятой любую из них, также ставим плюс.
|
|
(a,H)=A | (c,H)=B | (a,A)=B | (c,A)=B | (b,B)=A | (b,B)=S | |
H (*,H) | + | + | ||||
A (*,A) | + | + | ||||
B (*,B) | + | + | ||||
S (*,S) | ||||||
HA (*,HA) | + | + | + | + | ||
HB (*,HB) | + | + | + | + | ||
HS (*,HS) | + | + | ||||
AB (*,AB) | + | + | + | + | ||
AS (*,AS) | + | + | ||||
BS (*,BS) | + | + | ||||
HAB (*,HAB) | + | + | + | + | + | + |
HAS (*,HAS) | + | + | + | + | ||
HBS (*,HBS) | + | + | + | + | ||
ABS (*,ABS) | + | + | + | + | ||
HABS (*,HABS) | + | + | + | + | + | + |
Как заполнять ’:
1) Из самой верхней строки переписываем те значения, под которыми стоит знак плюса.
2) Заменяем значение после запятой на то, которое указано в столбце, т.е. например в 11 строке (a,H)=A заменим на (a,HAB)=A, (c,H)=B на (c,HAB)=B и т.д.
3) Если после такой замены у нас получается, например, (b,HAB)=A и (b,HAB)=S, то, в связи с тем, что первая маленькая буква у них совпадает, объединяем в (b,HAB)=AS.
|
|
’:
(a,H)=A (c,H)=B
2) (a,A)=B (c,A)=B
3) (b,B)=AS
4) -
5) (a,HA)=AB (c,HA)=B
6) (a,HB)=A (c,HB)=B (b,HB)=AS
7) (a,HS)=A (c,HS)=B
8) (a,AB)=B (c,AB)=B (b,AB)=AS
9) (a,AS)=B (c,AS)=B
10) (b,BS)=AS
11) (a,HAB)=AB (c,HAB)=B (b,HAB)=AS
12) (a,HAS)=AB (c,HAS)=B
13) (a,HBS)=A (c,HBS)=B (b,HBS)=AS
14) (a,ABS)=B (c,ABS)=B (b,ABS)=AS
15) (a,HABS)=AB (c,HABS)=B (b,HABS)=AS
3. Строим ДКА
4. Начальное состояние ДКА q0’=H
Множество конечных состояний
F={S,HS,AS,BS,HAS,HBS,ABS,HABS}
8 конечных состояний
Исключим недостижимые состояния (получим граф переходов полностью определенного ДКА). Как это делать: смотрим по получившемуся графику. Из «Н» по стрелке мы можем переместиться только в «А» и «В». Из «А» можем только в «В», из «В» только в «AS», из «AS» только в «В». Дописываем состояние конца «S» и состояние ошибки «E».
Розовым обозначены недостающие a, b или c. Из каждого состояния обязательно должно выходить и a, и b, и c. И если какого либо из них не хватает, то мы дорисовываем стрелку до ошибки (error, состояние «E») и надписываем недостающие буквы (a, b, c).
Дерево вывода и цепочка вывода, построенные на основе входной цепочки. Преобразование дерева синтаксического обзора в дерево операций
Входная цепочка a+(b-a) – МПА автомат
P: F→F+F1|F-F2
F→F*F3|F/F4
F→(F)5|a6|b7
| + | - | * | / | ( | ) | a | b | к |
+ | .> | .> | <. | <. | <. | .> | <. | <. | .> |
- | .> | .> | <. | <. | <. | .> | <. | <. | .> |
* | .> | .> | .> | .> | <. | .> | <. | <. | .> |
/ | .> | .> | .> | .> | <. | .> | <. | <. | .> |
( | <. | <. | <. | <. | <. | =. | <. | <. |
|
) | .> | .> | .> | .> |
| .> |
|
| .> |
a | .> | .> | .> | .> |
| .> |
|
| .> |
b | .> | .> | .> | .> |
| .> |
|
| .> |
н | <. | <. | <. | <. | <. |
| <. | <. |
|
<. =. сдвиг
>. свертка
символ до точки с запятой ищем в строке, после точки запятой ищем в столбце
1. {a+(b-a) к; н;Ø}÷сд
2. {+(b-a) к; нa;Ø}÷св
3. {+(b-a) к; нF;6}÷сд
4. {(b-a) к; нF+;6}÷сд
5. {b-a) к; нF+(;6}÷сд
6. {-a) к; нF+(b;6}÷св
7. {-a) к; нF+(F;6,7}÷сд
8. {a) к; нF+(F-;6,7}÷сд
9. {) к; нF+(F-a;6,7}÷св
10. {) к; нF+(F-F;6,7,6}÷св
11. {) к; нF+(F;6,7,6,2}÷сд
12. { к; нF+(F);6,7,6,2}÷св
13. { к; нF+F;6,7,6,2,5}÷св
14. { к; нF;6,7,6,2,5,1}
Разбор закончен. Цепочка принята.
Цепочка вывода: F F+F F+(F) F+(F-F) F+(F-a) F+(b-a) a+(b-a)
Дерево вывода (синтаксическое дерево):
Процесс построения дерева операций разбора:
Дата добавления: 2018-04-05; просмотров: 602; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!