Задачи по разделам курса
Элементы теории перевода
Атрибутные грамматики
5.3.1. Дополнить грамматику до атрибутной так, чтобы вычислялась максимальная длина непрерывной последовательности единиц в порожденном слове.
5.3.2. Дополнить грамматику до атрибутной так, чтобы вычислялась максимальная длина непрерывной последовательности из 1 в порожденном слове.
5.3.3. Дополнить грамматику до атрибутной так, чтобы вычислялось число сочетаний 01 в порожденном слове.
5.3.4. В грамматике терминал d имеет атрибут 0 или 1. Определить атрибуты так, чтобы нетерминал [целое] имел атрибут, равный восьмеричному значению выводимого числа.
5.3.5. Построить атрибутные грамматики для следующих переводов:
5.3.6. Привести пример атрибутной грамматики с некорректно заданными семантическими правилами
5.3.7. Привести пример атрибутной грамматики, вычисление атрибутов для которой нельзя выполнить параллельно с LL(1) -анализом.
5.3.8. Привести пример атрибутной грамматики, вычисление атрибутов для которой нельзя выполнить параллельно с LR(1) -анализом.
Генерация кода
Трансляция арифметических выражений
9.1.1. Для следующих арифметических выражений с помощью алгоритма Сети-Ульмана сгенерировать программу и изобразить атрибутированное дерево:
а) A*B + C*(D + E)*F; б) A*(B + C)*(D + E)*F; в) A + B + C*D + E*F; г) A + B*C*D*E + F; д) A + B*(C*D + E*F).
Трансляция логических выражений
9.2.1. Для следующих логических выражений сгенерировать код на командах перехода и изобразить атрибутированное дерево
а) A and not (B or C) or (D and E); б) A and B and C or not (D or E); в) A and (B or not (C and D) and E); г) not (A and B or C or D) and E; д) A and B or C or D and not E.
Генерация оптимального кода методами синтаксического анализа
9.3.1. Для следующих операторов присваивания сгенерировать оптимальный код методом сопоставления образцов:
а) a = b[i] + j; б) a = b[i+5]; в) a = b[i] + c[2]; г) a = b[i+2+j]; д) a = b[2+c[1]]; е) a = b[i+j]; ж) a = b[i+2] + 3; з) a =j+ b[i+3]; и) a = b[i+j+1]; к) a = b[i+j] + 1.