Файл: Вариант Задание 1.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 09.01.2024

Просмотров: 11

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Вариант 7.


Задание 1.

Постройте КС-грамматику языка, определяющего индексные переменные. Индексы – идентификаторы могут быть в свою очередь индексированными. Примеры правильных цепочек:

  1. A(1, 2, c(2, 4), d(s(1), 2))

  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 <описание>;

<описание> ::= <идентификатор>=<выражение>|<идентификатор>:<тип>=<константа>

<выражение> :: = <операнд>{<операция><операнд>}

<операнд> :: = <идентификатор><константа>

< операция > :: = +  -  /  *

<тип> :: = INTEGERCHAR
<идентификатор> - обозначаем @; <константа> - обозначаем k;

Цепочка для свертки: CONST B = L + 12;
Задание 4.
Переведите в ПОЛИЗ инфиксную запись
while (a > b) and (j < a*b + i) do j:=(a+b) * 10; end;