Задачи к главе II-1 1
Задача № 10. 1. Построить SDTS, которая определяет транс- ляцию = {(x, y) | x — выражение из a, +, *, ^, унарный – и скобок ( и ), а y — эквивалентное выражение без лишних скобок}. Пояснение. Скобки лишние, если они восстановимы по приоритетам операций или с учетом того, что операции одного приоритета выполняются слева направо. 2
Задача № 10. 1. Решение: Выходная грамматика SDTS уже была построена при решении задачи 2. 8: A 1 : : = F 1 F 2 F 3 F 4 a F 1 : : = A 1 + A 2 : : = (F 1) F 2 F 3 F 4 a F 2 : : = A 2 * A 3 A 3 : : = (F 1) ( F 2 ) F 3 F 4 a F 3 : : = A 3 ^ A 4 A 4 : : = (F 1) ( F 2 ) (F 3 ) F 4 a F 4 : : = – A 4 A 1 — начальный нетерминал. Положим T = (N, , , R, S), где N = {A 1, A 2, A 3, A 4, F 1, F 2, F 3, F 4}, = = {a, +, *, ^, –, (, )}, S = A 1, R = {A 1 : : = (A 1), A 1 (новое) F 1 , F 1 F 2 , F 2 F 3 , F 3 F 4 , F 4 a, a A 2 : : = (A 2), A 2 (новое) (F 1) , (F 1) F 2 , F 2 F 3 , F 3 F 4 , F 4 a, a A 3 : : = (A 3), A 3 (новое) (F 1) , (F 1) (F 2) , (F 2) F 3 , F 3 F 4 , F 4 a, A 4 : : = (A 4), A 4 (новое) (F 1) , (F 1) (F 2) , (F 2) (F 3 ) , (F 3 ) F 4 , F 4 a, a F 1 : : = A 1 + A 2 , A 1 + A 2 F 3 : : = A 3 ^ A 4 , A 3 ^ A 4 F 2 : : = A 2 * A 3 , A 2 * A 3 F 4 : : = – A 4 , – A 4}. 3
Задача № 10. 2. Построить pdt P, который реализует трансляцию e (P) = (T), где T — SDTS, построенная в задаче № 10. 1 (удаление “лишних” скобок). 4
Задача № 10. 2. Решение: Имеем T = (N, , , R, S), где N = {A 1, A 2, A 3, A 4, F 1, F 2, F 3, F 4}, = = {a, +, *, ^, –, (, )}, S = A 1, R = {A 1 : : = (A 1), A 1 (новое) (старые) F 1 , F 1 F 2 , F 2 F 3 , F 3 F 4 , F 4 a, a A 2 : : = (A 2), A 2 (новое) (старые) (F 1) , (F 1) F 2 , F 2 F 3 , F 3 F 4 , F 4 a, a A 3 : : = (A 3), A 3 (новое) (старые) (F 1) , (F 1) (F 2) , (F 2) F 3 , F 3 F 4 , F 4 a, a A 4 : : = (A 4), A 4 (новое) (старые) (F 1) , (F 1) (F 2) , (F 2) (F 3 ) , (F 3 ) F 4 , F 4 a, a F 1 : : = A 1 + A 2 , A 1 + A 2 F 3 : : = A 3 ^ A 4 , A 3 ^ A 4 F 2 : : = A 2 * A 3 , A 2 * A 3 F 4 : : = – A 4 , – A 4}. 5
Задача № 10. 2. Положим P = ({q}, , , q, A 1 , ), где = = {a, +, *, ^, –, (, )}, = {A 1, A 2, A 3, A 4, F 1, F 2, F 3, F 4 , a, +, *, ^, –, (, ), a', +', *', ^', –', (', )'}, (q, , A 1) = {(q, (A 1), ), (q, F 1, ), (q, F 2, ), (q, F 3, ), (q, F 4, ), (q, aa', )}, (q, , A 2) = {(q, (A 2), ), (q, (('F 1))', ), (q, F 2, ), (q, F 3, ), (q, F 4, ), (q, aa', )}, (q, , A 3) = {(q, (A 3), ), (q, (('F 1))', ), {(q, (('F 2))', ), (q, F 3, ), (q, F 4, ), (q, aa', )}, (q, , A 4) = {(q, (A 4), ), (q, (('F 1))', ), {(q, (('F 2))', ), (q, (('F 3))', ), (q, F 4, ), (q, aa', )}, (q, , F 1) = {(q, A 1 + +'A 2 , )}, (q, , F 2) = {(q, A 2 * *'A 3 , )}, (q, , F 3) = {(q, A 3 ^ ^'A 4 , )}, (q, , F 4) = {(q, – –'A 4 , )}, (q, b, b) = {(q, , )}, если b {a, +, *, ^, –, (, )}, (q, , с') = {(q, , с)}, если с {a, +, *, ^, –, (, )}, 6
Задача № 10. 2. Посмотрим, как действует dpt P на входной цепочке a + (a): (q, a + (a), A 1, ) (q, a + (a), F 1, ) (q, a + (a), A 1 + +'A 2 , ) (q, a + (a), aa' + +'A 2 , ) (q, +(a), a' + +'A 2 , ) (q, + (a), + +'A 2 , a) (q, (a), A 2 , a+ ) (q, (a), (A 2), a + ) (q, a), A 2), a + ) (q, a), aa'), a +) (q, ), a'), a +) (q, ), ), a + a) (q, , , a + a). Получили: a + (a) a + a. 7
Задача № 10. 3. По pdt P, построенному в задаче № 10. 2, восстановить SDTS T, такую что (T) = e(P). 8
Задача № 10. 3. Имеем P = ({q}, , , q, A 1 , ), где = = {a, +, *, ^, –, (, )}, = {A 1, A 2, A 3, A 4, F 1, F 2, F 3, F 4 , a, +, *, ^, –, (, ), a', +', *', ^', –', (', )'}, (q, , A 1) = {(q, (A 1), ), (q, F 1, ), (q, F 2, ), (q, F 3, ), (q, F 4, ), (q, aa', )}, (q, , A 2) = {(q, (A 2), ), (q, (('F 1))', ), (q, F 2, ), (q, F 3, ), (q, F 4, ), (q, aa', )}, (q, , A 3) = {(q, (A 3), ), (q, (('F 1))', ), {(q, (('F 2))', ), (q, F 3, ), (q, F 4, ), (q, aa', )}, (q, , A 4) = {(q, (A 4), ), (q, (('F 1))', ), {(q, (('F 2))', ), (q, (('F 3))', ), (q, F 4, ), (q, aa', )}, (q, , F 1) = {(q, A 1 + +'A 2 , )}, (q, , F 2) = {(q, A 2 * *'A 3 , )}, (q, , F 3) = {(q, A 3 ^ ^'A 4 , )}, (q, , F 4) = {(q, – –'A 4 , )}, (q, b, b) = {(q, , )}, если b {a, +, *, ^, –, (, )}, (q, , с') = {(q, , с)}, если с {a, +, *, ^, –, (, )}. 9
Задача № 10. 3. Положим T = (N, , , R, S), где N = {S, [A 1], [ A 2] , [A 3] , [A 4] , [F 1] , [F 2] , [F 3] , [F 4], [a], [+], [*], [^], [–], [ ( ], [)], [a'], [+'], [*'], [^'], [–'], [('], [)']}, = = {a, +, *, ^, –, (, )}, Заметим, что вместо обозначений для нетерминалов вида [q. Aq] мы используем просто [A]. R = { S [A 1] , [A 1] [(] [A 1] [)] , [(] [A 1] [)] | [F 1] , [F 1] [F 2] , [F 2] [F 3] , [F 3] [F 4] , [F 4] [a] [a'] , [a] [a'] [A 2] [(] [A 2] [)] , [(] [A 2] [)] | [(] [('] [F 1] [)'] , [(] [('] [F 1] [)'] [F 2] , [F 2] [F 3] , [F 3] [F 4] , [F 4] [a] [a'] , [a] [a'] 10
Задача № 10. 3. [A 3] [(] [A 3] [)] , [(] [A 2] [)] | [(] [('] [F 1] [)'] , [(] [('] [F 1] [)'] [(] [('] [F 2] [)'] , [(] [('] [F 2] [)'] [F 3] , [F 3] [F 4] , [F 4] [a] [a'] , [a] [a'] [A 4] [(] [A 4] [)] , [(] [A 4] [)] | [(] [('] [F 1] [)'] , [(] [('] [F 1] [)'] [(] [('] [F 2] [)'] , [(] [('] [F 2] [)'] [(] [('] [F 3] [)'] , [(] [('] [F 3] [)'] [F 4] , [F 4] [a] [a'] , [a] [a'] 11
Задача № 10. 3. [F 1 ] [A 1] [ +] [+'] [A 2] , [A 1] [+'] [A 2] [F 2] [A 2] [*'] [A 3] , [A 2] [*'] [A 3] [F 3] [A 3] [^'] [A 4] , [A 3] [^'] [A 4] [F 4] [–] [–'] [A 4] , [–] [–'] [A 4] [a] a , [a'] , a [+] + , [+'] , + [*] * , [*'] , * [^] ^ , [^'] , ^ [–] – , [–'] , – [(] ( , [('] , ( [)] ) , [)'] , ) 12
Задача № 10. 3. Эквивалентные преобразования построенной SDTS: [A 2] ( [A 2] ) , [A 2] | [A 1] ( [A 1] ) , [A 1] | ( [F 1] ), ( [F 1] ) [F 1] , [F 1] [F 2] , [F 2] [F 3] , [F 3] [F 4] , [F 4] a , a [A 3] ( [A 3] ) , [A 2] | ( [F 1] ), ( [F 1] ) ( [F 2] ), ( [F 2] ) [F 3] , [F 3] [F 4] , [F 4] a , a [A 4] ( [A 4]) , [A 4]| ( [F 1]), ( [F 1]) ( [F 2]), ( [F 2]) ( [F 3]), ( [F 3]) [F 4] , [F 4] a , a 13
Задача № 10. 3. [F 1 ] [A 1] + [A 2] , [A 1] + [A 2] [F 2] [A 2] * [A 3] , [A 2] * [A 3] [F 3] [A 3] ^ [A 4] , [A 3] ^ [A 4] [F 4] – [A 4] , – [A 4] Как видим, правило S [A 1] , [A 1] порождает то же, что и правила для [A 1], и оно может быть удалено вместе с нетерминалом S. После этого построенная SDTS отличается от исходной схемы (см. задачу № 10. 1) только представлениями нетерминалов. 14
Задача № 10. 4. Дана cfg G = (VN, VT, P, S), где VN = {E, T, F}, VT = {a, +, *, (, )}, S = E, P = { (1) E E + T, (2) E T, (3) T T * F, (4) T F, (5) F (E), (6) F a} Годится ли эта грамматика для построения 1 предсказывающего алгоритма анализа? Если нет, то найти грамматику, эквивалентную данной. 15
Задача № 10. 4. Return to 11. 2 Решение: данная грамматика леворекурсивна, и потому не LL(k) ни при каком k. Преобразуем ее, исключив их нее леворекурсивные правила по образцу: A A заменить на A A' , A' . (1) E E + T и (2) E T заменим на: (1. 1) E TE' , (1. 2) E' +TE' , (1. 3) E' . (3) T T * F и (4) T F заменим на: (2. 1) T FT' , (2. 2) T' *FT' , (2. 3) T' . (3. 1) F (E), (3. 2) F a оставим без изменения. Не трудно убедиться, что это LL(1)-грамматика. 16
Задача № 10. 5. Построить SDTS, определяющую трансляцию = {(x, y) где x — инфиксная, а y — постфиксная форма арифметического выражения, составленного из символов a, +, *, и скобок ( и )}. Пояснение. Использовать LL(1)-грамматику, построенную в задаче № 10. 4, в качестве входной грамматики схемы. 17
Задача № 10. 5. Решение: Достаточно определить, что порождает правые операнды формул, и не выдавать на выход скобок. (1) E TE' , TE' (2) E' +TE' , T +E' (3) E' , (4) T FT' , FT' (5) T ' *FT' , F * T' (6) T ' , (7) F (E) , E (8) F a , a 18
Задача № 10 -6* Построить простую SDTS, порождающую трансляцию = e(P), где P = ({q, p}, {a, b}, {Z, A, B}, {a, b}, , q, Z, ), (1) ( q, a, X) = (q, AX, ) для всех X { Z, A, B } (2) ( q, b, X) = (q, BX, ) для всех X { Z, A, B } (3) ( q, , A) = (p, A, a) (4) ( p, b, B) = (p, , b) (5) (p, a, A) = (p, , b) (6) ( p, , Z) = (q, , a) 19
Задача № 10 -7* Дана грамматика G = ( VN, VT, P, S ), где VN = {S, A, B}, VT = {a, b}, P = {(1) S a. B (2) S b. A (3) A a (4) B b (5) A b. AA (6) B a. BB (7) A a. S (8) B b. S }. Является ли данная грамматика LL(1)-грамматикой? Какова структура цепочек языка, порождаемого этой грамматкой? 20
Задача № 10 -8* Покажите, что LL(0)-язык содержит не более одной цепочки. 21
Задача № 10 -9* Дана грамматика с правилами: S S a b. Является ли эта грамматика LLграмматикой? Является ли язык, порождаемый этой грамматикой, LL-языком? 22
Задача № 10 -10* Показать, что КС-грамматика с правилами: S a. Aa. B S b. Ab. B A ab B a. B является LL(3), но не LL(2)-грамматикой. 23
Задача № 10 -11* Построить SDTS, которая определяет трансляцию логических выражений с операциями , , , круглыми скобками и операндами b в эквивалентные постфиксные выражения. 24
Задача № 10 -12* Покажите, что если КС-грамматика содержит два правила вида: A a a , где A VN, a VT, , (VN VT)*, , то она не может быть LL(1)-грамматикой. 25


