- •Лабораторная работа.
- •Вариант 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.
Вариант 16.
Написать программу синтаксического анализа автоматного языка операторов формата (ограниченного) языка Fortran - 77, имеющих вид:
FORMAT (<список элементов>)
<элемент>
<список элементов>:: =
<список элементов>,<элемент>
<константа>X
’текст’
<элемент>:: =/
I<константа>
F<константа 1>.<константа 2>
<константа>,<константа 1>,<константа 2>- константы;
Семантика:
Сообщать об ошибках, если текст более 50 символов, знаков перевода строки не превышает 3 и <константа 1>больше<константа 2>+ 2.
Осуществить вывод на печать по заданному формату:
/- переход на новую строку;
’текст’- текст;
X- обозначить подчеркиванием (провалы);
F - знак числа;
I- целые цифры.
Примеры правильных цепочек:
FORMAT ( 2X, ‘ALMN’, 12X, F10.4, ///, ‘lm’, /, I6)
Результат будет выглядеть следующим образом:
_ _ A L M N_ _ _ _ _ _ _ _ _ _ _ _F I I I I.I I I I
l m
F I I I I I
Вариант 17.
Написать программу синтаксического анализа автоматного языка операторов заголовка цикла языка Modula-2,имеющих вид:
FOR<параметр>:=<начальные значения>TO<конечные значения>[BY<шаг>]DO
<параметр>:: =<идентификатор>|<идентификатор>[<список индексов>]
<список индексов>:: =<индекс>|<список индексов>,<индекс>
<индекс>:: =<идентификатор>|<константа целая>
<начальные значения>:: =<константа целая>
<конечные значения>:: =<константа целая>
<шаг>:: =<константа целая>
<идентификатор>- идентификатор не может быть зарезервированным словом (FOR, TO, BY, DO), не допускать дублирование идентификаторов.
Семантика:
Построить и вывести на печать массивы идентификаторов и констант.
Сообщать об ошибках, если неверен идентификатор и если длина идентификатора более 8 символов.
Определить сколько раз выполняется цикл.
Примеры правильных цепочек:
FOR I := 10 TO 20 BY 2 DO
FOR ABC1D [ I, 25, J, 75 ] := -100 TO -120 BY 5 DO
FOR A3 := 1 TO 200 DO
Вариант 18.
Написать программу синтаксического анализа автоматного языка операторов ветвления языка Modula-2,имеющих вид:
IF<условие>THEN<присваивание>
ELSIF<условие>THEN<присваивание>
ELSE<присваивание>END
<условие>:: =<левая часть><условная операция><правая часть>
<присваивание>:: =<левая часть>:=<правая часть>
<идентификатор>
<левая часть>:: =<константа целая>
<идентификатор>
<идентификатор>
&
OR
NOT
AND
#|<>
<условная операция>:: = <
>
<=
>=
=
~
<идентификатор>(<идентификатор>)|(<константа целая>)
<правая часть>:: =
<константа любая>
<идентификатор>- идентификатор должен быть не более 8 символов;
<константа любая>- целое число в диапазоне -32768+32767, либо число с фиксированной точкой.
Семантика:
Сформировать и вывести на печать таблицы идентификаторов и констант. Константы индексов в массиве - CARDINAL, произвольные константы -REAL.
Сообщать об ошибках, когда число цифр в мантиссе более 15, при ошибках в идентификаторах.
Примеры правильных цепочек:
IF R1 THEN S1 := G
ELSIF R2 < 0 THEN D [10] := GFD [ I ]
ELSIF R6 = R5 THEN S4 := 15.3
ELSE GF := DCSX15
END;
IF X = 0 THEN S := 0 END;
IF K > 10 THEN F := 500E - 3 ELSE h := f END;