# Фиг знает что тут ## Задания ### Первое задание ```plain L1 = {1^n 0^m 1^m 0^n | n, m > 0} r = {(), a^m b^(n+m)} // выдать на выходе вместо 1010 aabb ``` ```plain S - 1A0 A - 1A0 | 0B1 B - 0B1 | _ ``` Переводим в другую грамматику (в скобках моменты печати слова) ```plain S - 1A(b)0 A - 1A(b)0 | 0(a)B(b)1 B - 0(a)B(b)1 | _ ``` ### Второе задание ```plain L1 = {(c/d)a^n b^n | n> 0} r = {(L1), 1^2n 0^(k+n) | k = |d|} ``` Описание языка: ```plain S - cS | dS | aAb A - aAb | _ ``` Преобразование ```plain S - cS | dS(0) | a(11)A(0)b A - a(11)A(0)b | _ ``` ### Третье задание ```plain S - bA A - aC B - aBb | _ C - Bba | _ ``` ```plain r = {(), b^k a ^ m, k = |b|, m = |a|} ``` ```plain S - (b)bA A - aC(a) B - (b)aBb(a) | _ C - (b)Bba(a) | _ ``` ## Перевод в польско-инверсную запись ```plain E - T {+T} T - F {*F<*>} F - a|b|(E) ``` ```cpp void E() { T(); while(c == '+') {gc(); T(); cout << '+';} } ``` из `a+a*b` получим `aab*+` ### Задача (тут был граф) описывающая грамматика: ```plain S - ccCa C - cCd | B B - b ``` грамматика, которая перевернёт: ```plain S - ccCa C - cCd | B B - b ``` ## Переводы записей ```plain 1) s = i * (--a+b++) &s i &a -# &b #+ + * = ; ``` ```plain 2) x = (a + b, a * b); &x a b + ; a b * = ; ``` Переход в какое-то место программы: _,! B, _, !F - переход по лжи (B == False) ```cpp if (B) p1; else pe; B 7 !F p1 8 ! p2 1 2 3 4 5 6 7 8 ``` ```cpp 1) if ((x+1) > y) x = y; else y = (x-y) * 3; 2) while (i < 9) {s = 3 + f(i), i++;} 3) do {x = z = (x + y + 5) * b - 3/f; b++;} while(-x+y>0); 4) for (i = 0; i < n; i++) {a = b - c;} ``` ```plain if ((x+1) > y) x = y; else y = (x-y) * 3; x 1 + y > !F 18 &x y = ; 22 ! &y x y - 3 * = ; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 ``` ```plain while (i < 9) {s = 3 + f(i), i++;} i 9 < 17 !F &s 3 i f = ; &i #+ ; 1 ! 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ``` ``` plain do {x = z = (x + y + 5) * b - 3/f; b++;} while(-x+y>0); &a a b < _ !F a _ ! b = ; ```