- •Лабораторная работа.
- •Вариант 1.
- •Вариант 2.
- •Вариант 3.
- •Вариант 4.
- •Вариант 5.
- •Вариант 6.
- •Вариант 7.
- •Вариант 8.
- •Вариант 9.
- •Вариант 10.
- •Вариант 11.
- •Вариант 12.
- •Вариант 13.
- •Вариант 14.
- •Вариант 15.
- •Вариант 16.
- •Вариант 17.
- •Вариант 18.
- •Вариант 19.
- •Вариант 20.
- •Вариант 21.
- •Вариант 22.
- •Вариант 23.
- •Вариант 24.
- •Вариант 25.
Вариант 7.
Написать программу синтаксического анализа автоматного языка операторов описания констант языкаTurbo Pascal, имеющего вид:
CONST<описание>;
<идентификатор>=<выражение>
<описание>:: =
<идентификатор>:<тип>=<значение>
<выражение>:: =<операнд><операнд><операция><операнд><текст>
<операнд>:: =<идентификатор><константа>
+
-
<операция >:: = /
*
div
mod
<тип>:: =STRINGWORDREALINTEGERCHAR
<значение>:: =<текст><константа>
<идентификатор>- идентификатор языкаTurbo Pascal, начинается с буквы или знака подчеркивания, включает буквы, цифры, подчеркивание, не допускает пробелы и специальные символы, ввести ограничение на длину (не более 8 символов) и не может быть зарезервированным словом (CONST, STRING, WORD, REAL, INTEGER, CHAR, DIV, MOD);
<константа >- целое число или число с фиксированной точкой.
Семантика:
Сформировать и вывести на печать таблицы идентификаторов и констант. Учесть перечисленные выше ограничения на идентификаторы и константы.
Для простых типизированных констант проверить правильность <значения>(соответствие типу, т.е. дляSTRING, CHAR-<текст>, дляWORD, INTEGER- целая константа, дляREAL- числа с фиксированной точкой.
Сообщать об ошибках при анализе цепочек языка, указывая курсором место ошибки и ее содержание.
Примеры правильных цепочек:
CONST A = ‘описание’;
CONST V : WORD = 1998;
CONST _min : REAL = 0.01;
CONST B_C = L + 12;
Вариант 8.
Написать программу синтаксического анализа автоматного языка операторов выбора языкаTurbo Pascal, имеющего вид:
CASE <идентификатор>OF <список выбора>[ELSE <оператор присваивания>] END;
<список выбора>:: =<константа выбора>[,<константа выбора>]:<оператор присваи-вания>;[<константа выбора>[,<константа выбора>]:<оператор присваивания>;]
<константа выбора>:: =<текст><константа любая>
<оператор присваивания>:: =<левая часть>:=<правая часть>
<правая часть>:: =<операнд>[<операция><операнд>]
<идентификатор>
<операнд>:: =<идентификатор><идентификатор><константа
<целая константа> любая>
<идентификатор>
<левая часть>:: =<константа целая>
<идентификатор>
<идентификатор>
+
-
<операция>:: = /
*
div
mod
<идентификатор>- идентификатор языкаTurbo Pascal, начинается с буквы или знака подчеркивания, включает буквы, цифры, подчеркивание, не допускает пробелы и специальные символы, ввести ограничение на длину (не более 8 символов) и не может быть зарезервированным словом (CASE, OF, ELSE, END, DIV, MOD);
<константа>- целое число в диапазоне -32768+32767.
<константа любая>- целое число,число с фиксированной точкой, число с плавающей точкой.
Семантика:
Построить и вывести на печать таблицы идентификаторов и констант. Учесть перечисленные выше ограничения на идентификаторы и константы.
Сообщать об ошибках при анализе цепочек языка, указывая курсором место ошибки и ее содержание.
Не должно быть дублирования идентификаторов.
Примеры правильных цепочек:
case _oper of ‘A’, ‘B’ : C := x + y; ‘L’ : Z := x / y; end;
case A_B of 12 : A = 14.3 + C; 13 : B := 0.3 end;
case prim of 14.3 : A [-1] := _A_L; else C := 8.3E - 3 end;