ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 09.01.2024
Просмотров: 11
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Вариант 7.
Задание 1.
Постройте КС-грамматику языка, определяющего индексные переменные. Индексы – идентификаторы могут быть в свою очередь индексированными. Примеры правильных цепочек:
-
A(1, 2, c(2, 4), d(s(1), 2)) -
B(0, f(1,2))
Для первого примера постройте дерево нисходящего разбора заданной терминальной цепочки по построенной Вами КС-грамматике.
Для второго примера постройте дерево восходящего разбора (свертку) заданной терминальной цепочки по построенной Вами КС-грамматике.
Задание 2.
Постройте детерминированную А - грамматику в виде графа состояний для языка, цепочки которого имеют заданный вид:
S :: = CASE <ид> OF <список выбора>[ELSE<оператор присваивания>] END;
<список выбора> :: = <константа выбора> :<оператор присваивания>; {<список выбора>}
<константа выбора> :: = <текст><константа>
<оператор присваивания> :: = < ид > := <правая часть>
<правая часть> :: = <операнд>{<операция><операнд>}
<операнд> :: = < ид> | <константа >
< операция > :: = + - / *
<ид> - идентификатор языка Turbo Pascal, начинается с буквы, включает буквы, цифры, подчеркивание, не допускает пробелы и специальные символы;
<константа> - целое число.
Примеры правильных цепочек:
case oper of ‘A’: C := x + y; ‘L’ : Z := x / y; end;
case B of 12 : A = 14 + C; 13 : B := 0 end;
case prim of 14: A := L; else C := E - 3 end;
Задание 3.
Заданную КС-грамматику приведите к грамматике Вирта (простого предшествования). Для этого устраните факультативные [ ] и итеративные { } скобки путем добавления новых альтернатив и праворекурсивных правил. Постройте матрицу простого предшествования. Проведите свертку указанной правильной цепочки с использованием построенных Вами отношений предшествования.
S :: = CONST <описание>;
<описание> ::= <идентификатор>=<выражение>|<идентификатор>:<тип>=<константа>
<выражение> :: = <операнд>{<операция><операнд>}
<операнд> :: = <идентификатор><константа>
< операция > :: = + - / *
<тип> :: = INTEGERCHAR
<идентификатор> - обозначаем @; <константа> - обозначаем k;
Цепочка для свертки: CONST B = L + 12;
Задание 4.
Переведите в ПОЛИЗ инфиксную запись
while (a > b) and (j < a*b + i) do j:=(a+b) * 10; end;