- •Лабораторная работа.
- •Вариант 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.
Лабораторная работа.
СИНТАКСИЧЕСКИЙ АНАЛИЗ АВТОМАТНЫХ ЯЗЫКОВ.
Вариант 1.
Написать программу синтаксического анализа автоматного языка условного оператора языка Turbo Pascal, имеющего вид:
IF <условие>THEN <оператор присваивания 1> [ ELSE <оператор присваивания 2>];
<условие>:: =<левая часть>[<условная операция><правая часть>]
<оператор присваивания>:: =<левая часть>: = <правая часть>
[ <идентификатор>]
<левая часть>:: =<идентификатор>
[<целая константа>]
<константа любая>
<правая часть>:: =
<идентификатор>[[<идентификатор>][<константа целая>]]
<константа любая>:: =<константа целая><число с фиксированной точкой>;
=
<>
<
<условная операция>:: = >
<=
>=
in
<идентификатор>- идентификатор языкаTurbo Pascal, начинается с буквы или знака подчеркивания, за которым могут следовать буквы или цифры и знак подчеркивания, ввести ограничение на длину (не более 8 символов); не допускать использования зарезервированных слов (IF, THEN, ELSE, IN); пробелы и специальные символы не входят в идентификатор;
<константа целая>- целое число, возможно со знаком, в диапазоне -32768+32767;
Семантика:
Построить и вывести на печать по завершении анализа таблицы идентификаторов и констант.
Учесть перечисленные ограничения на идентификаторы и константы.
Сообщать об ошибках при анализе, указывая курсором место ошибки и ее содержание.
Примеры правильных цепочек:
IF A_B IN MN THEN C:=B;
IF E=3.14 THEN A1[5]:=ABC[I] ELSE A1[-1]:=0;
IF _E_1<=CD[18] THEN B12:=-0.081;
Вариант 2.
Написать программу синтаксического анализа автоматного языка операторов присваивания языка Turbo Pascal, имеющих вид:
[<метка>:]<левая часть>:=<правая часть>;
<метка>:: =<идентификатор><целое число без знака>
[ <идентификатор>]
<левая часть>:: =<идентификатор><идентификатор>
[<целая константа>]
<левая часть>
<константа любая>
<правая часть>:: =<левая часть><операция><правая часть>
<константа любая><операция><правая часть>
<константа любая><операция><константа любая>
<левая часть><операция><константа любая>
+
-
<операция>:: = /
*
div
mod
<константа любая>:: =<константа целая><число с фиксированной точкой><число с плавающей точкой>.
<идентификатор>- идентификатор языкаPascal, начинается с буквы или подчеркивания, включает последовательность букв и цифр, не допускает пробелы и специальные знаки, ввести ограничение на длину идентификатора до 8 символов; не может быть зарезервированным словом(div, mod);
<константа целая>- целое число, возможно со знаком, из диапазона -32768+32767;
Семантика:
Построить и вывести на печать по завершении анализа таблицы констант, идентификаторов и меток.
Учесть ограничения на идентификаторы и константы.
Сообщать об ошибках, указывая курсором место возникновения ошибки и содержание ошибки. Идентификатор метки не должен совпадать с идентификатором переменной и переменной-массивом.
Примеры правильных цепочек:
Met : A[I] := 355 + f;
10 : Peremen := i div j;
Al := B * 42.18;
M_16 := 45.8E-1 + i [-12];