Решенные задачи на экзамен Опалевой / variaNTS / VAR_2
.DOCВариант №2
-
Составить А-грамматику(автоматную) для языка, состоящего из 1 и 0, причем
каждая единица заключена между нулями.
T = {0,1}
N={S, E}
R={ S , S0A, A0B, A1S, A , B 0A, B1A, B }
Управляющая таблица детерминированного конечного автомата по автоматной
грамматике G = <T, N, S,R >
-
0
1
Eps
S (q0)
A
A (q1)
B
S
B (q2)
A
A
Функции перехода:
(q0 , 0) q1
(q1 , 0) q2
(q1 , 1) q0
(q2 , 0) q1
(q2 , 1) q1
Входному языку принадлежат цепочки, состоящие из комбинации любого кол-ва нулей и 0 1 0 (т.е. каждая единица заключена между нулями).
1.2.Удалить бесполезные символы грамматика G=<T,N,S,R>
T={a,b,c,d} N={S,A,B,C} R={S->aC, S->bA, A->cAB, B->aC, C->bA, C->d.}
Бесполезным называется символ грамматики, который является непроизводящим или недостижимым. Для удаления бесполезных символов необходимо сначала удалить непроизводящие, а затем недостижимые символы.
Нетерминал, который не порождает ни одной терминальной цепочки, называется непроизводящим.
Символ называется недостижимым , если он не встречается ни в одной из сентенциальных форм (т.е. ни в одной из терминальных цепочек, порождаемых грамматикой).
Алгоритм исключения бесполезных символов.
-
Построение множества порождающих нетерминалов G : Np (т.е.нетерминалов, из которых с помощью любого количества правил можно перейти к терминалам)
N0p ={C} N1p ={C, B, S} Np={C,B,S}
-
Удаление лишних правил. Строим G1 = <T, Np,S,R1>, S Np
В R1 входят правила, содержащие символы, принадлежащие Т и Np
R1 = { S->aC, B->aC, C->d. }
-
Построение множества достижимых символов гр-ки G1 : Vr (т.е. символов, которые можно вывести из начального символа грамматики)
V0r = {S} V1r = {S, a, C} V2r = {S, a, C, d}
G1=< {a,d}, {S,C}, S, { S->aC, C->d }>
-
Построить МПА, распознающий логические выражения состоящие из идентификаторов, круглых
скобок и логических операций И ИЛИ НЕ
EE or T, ET, TT and P, TP, Pi, P not P, P (E)
(q, , E) = {(q, E or T), (q, T) }
(q, , T) = {(q, T and P), (q, P)}
(q, , P) = {(q, not P), (q, (E)), (q, i)}
(q, a, a) = {(q, )} для всех a{i, and, not, or, ( , )}
Пример: i and i or i
(q, i or i and i, E) (q, i or i and i, E or T) (q, i or i and i, T or T) (q, i or i and i, P or T)
(q, i or i and i, i or T) (q, or i and i, or T) (q, i and i, T) (q, i and i, T and P) (q, i and i, P and P) (q, i and i, i and P) (q, and i, and P) (q, i, P) (q, i, i) (q, , )
-
Построить атрибутно-транслирующую грамматику для семантики раздела переменных в языке Pascal
Подграмматика для переменных:
VARt |
переменная |
t – синтезированный |
VOt |
переменная старого типа |
t – синтезированный |
VO`t,p |
остаток переменной старого типа |
t – синтезированный, p - унаследованный |
IPt |
имя поля |
t – синтезированный |
It |
индекс |
t – синтезированный |
I`t,p |
остаток индекса |
t – синтезированный, p - унаследованный |
Используем как терминалы: |
||
EARt |
арифметическая переменная |
t – синтезированный |
ITt |
имя типа |
t – синтезированный |
VARq3 ( ITp1 ) VOq1 {преобразовать_тип}p2,q2
p2p1 p1 – старый тип, q1 – новый тип
q2,q3q1 Преобразование типов производится в случаях, если это возможно
VARp2 VOp1
p2p1 p1 – значение типа
VOt2 idp1 VO`p2,t1
p2p1 p1 – имя идентификатора (обозначение имени поля)
t2t1 t1 – значение типа
VO`p1,t4 [ Iq1 {ЭМ}p2,q2,r1 I`r2,t1 ] VO`t2,t3
r1,r2НОВЭЛТ
p2p1 p2 – элемент массива
q2q1 q2 – индекс массива
t2t1 t2 – имя идентификатора (имя поля)
t4t3 t3 – значение типа элементов массива
VO`p1,t2 . IPq1 {ПЗ}p2,q2,r1 VO`r2,t1
r1,r2НОВЭЛТ
p2p1 p2 – имя записи
q2q1 q2 – имя поля записи
t2t1 t1 – значение типа
VO`p1,p2
p2p1
Ip2 EARp1
p2p1 EAR – арифметическое выражение, кот. д/соответствовать
типу, приводимому к integer
I`p1,t2 , Iq1 {ЭМ}p2,q2,r1 I`r2,t1
r1,r2НОВЭЛТ
p2p1
q2q1
t2t1
I`p1,p2
p2p1
IPp2 idp1
p2p1 p1 – имя идентификатора (обозначение имени поля)
Операционные символы:
{преобразовать_тип}A1,А2 |
Генерируется триада Ntype A1,A2 |
||
{ЭМ}А1,А2,R |
R = номер триады EM A1,A2 |
||
{ПЗ}А1,А2,R |
R = номер триады PZ A1,A2
|
||
Ntype A1, A2 |
Преобразовать тип значения по адресу A2 в тип А1 (см. соответствующую таблицу, стр. 7). |
|
|
EM A1, A2 |
Элемент массива A1 с индексом A2. |
|
|
PZ A1, A2 |
Поле A2 записи A1. |
|
НОВЭЛТ - процедура, которая выдает значение указателя на свободную позицию таблицы, используемой для запоминания результата.
P.S. Переведено в триады, LL(1) анализ
4. Построить матрицу
(простого?)
операторного предшествования:
R={E->E+T, E->T, T->T*P, T->P, P->.C., C->/C, C->/ } T={+,*,.,/ }
EE+T (1)
ET (2)
TT*P (3)
TP (4)
P.C. (5)
C/C (6)
C/ (7)
Отношения ищем только между терминальными символами.
-
a b, если A aCb R , где С – либо нетерминал, либо пусто.
Отсюда: . .
-
a <• b, если A aB R и B + Cb, где С – либо нетерминал, либо пусто.
Т. е. ищем нетерминалы, перед которыми стоят какие-либо Т – символы, и строим все возможные цепочки из этих нетерминалов:
(1) EE + T из Т возможы выводы: T T * P P * P . C . and P
Получили: + <• *, + <• .
(3) TT * P Отсюда: * <• .
(6)C/C Отсюда: / <• /
(5) P.C. Отсюда: . <• /
Из начального символа грамматики выводятся цепочки, начинающиеся с символов: + * .
Отсюда отношения: <• +, <• *, <• .
-
a •> b, если A Bb R и B + aC, где С – либо нетерминал, либо пусто.
В исходной грамматике ищем правила, содержащие нетерминал, непосредственно за которым следует какой-либо символ.
(1) E E + T , найдем все символы, на которые могут заканчиваться выводы
из Е E + T E + T * P E + T * . C .
Можем занести в матрицу отношения: +•> +, *•> +, . •> +
(3) TT * P Отсюда: *•> *, . •> *
(5) P.C. Отсюда: /•> .
Из начального символа грамматики выводятся цепочки, заканщив.: + * .
+ •> , * •> , . •>
МАТРИЦА ПРЕДШЕСТВОВАНИЯ :
|
+ |
* |
/ |
. |
Eps |
+ |
> |
< |
|
< |
> |
* |
> |
> |
|
< |
> |
/ |
|
|
< |
> |
|
. |
> |
> |
< |
= |
> |
|
< |
< |
|
< |
|
Построение функций “ перенос-свертка” см. в. Вариант №7 (4)