ТеорФЯзиГр. Вариант Задание 1
Скачать 15.38 Kb.
|
Вариант 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; |