
- •Лабораторная работа.
- •Вариант 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.
Вариант 22.
Написать программу синтаксического анализа автоматного языка операторов начала итерационного цикла языка PL/1,имеющих вид:
DO WHILE (<условие>);
<условие>:: =<выражение>[<сравнение><выражение>]
<выражение>:: =<операнд>[<операция><операнд>]
**
+
<операция>:: = -
/
*
<
>
<сравнение>:: = <=
>=
#
<константа>
<операнд>:: =
<идентификатор>[(<идентификатор>)|(<константа>)]
Семантика:
Построить массив идентификаторов и констант и вывести их на печать.
Сообщать об ошибках, если число символов в идентификаторе или константе более 8.
Массив констант должен быть типа WORD.
Примеры правильных цепочек:
DO WHILE ( ABC );
DO WHILE ( A ( I ) + B (10) >= XX131Y ** 15 );
DO WHILE ( INX / ABC ( IJKLMN ) # B4 / X ( I ) );
DO WHILE ( 15 );
Вариант 23.
Написать программу синтаксического анализа автоматного языка операторов заголовков процедуры языка PL/1,имеющих вид:
PROC
<идентификатор>:[(<список параметров>)][RETURNS(<атрибут>)];
PROCEDURE
<идентификатор>
<список параметров>:: =
<список параметров>,<идентификатор>
BIN FIXED
<атрибут>:: = FLOAT
CHARACTER ( K )
Семантика:
Построить и вывести на печать таблицу идентификаторов с указанием номера параметра.
Сообщать об ошибках, если число символов в идентификаторе больше 8, имя процедуры совпадает с именем параметра, если неверен идентификатор (начинается не с буквы, содержит недопустимые символы).
Примеры правильных цепочек:
ABCD10 : PROC;
ABCD20 : PROC ( A );
PRIMER : PROC ( A, B, CD, DEF );
PRIMER1 : PROC ( A, B ) RETURNS ( FLOAT );
PRIMER2 : PROC RETURNS ( BIN FIXED );
PRIMER3 : PROCEDURE ( A, B ) RETURNS ( CHARACTER (20) );
Вариант 24.
Написать программу синтаксического анализа автоматного языка описания типов языка Модула - 2, имеющего вид:
TYPE <идентификатор>=<простой тип>|<тип массив>|<тип запись>| <тип множество>|<тип указатель>;
<простой тип>::=CARDINAL | INTEGER | REAL | CHAR | BOOLEAN | [ 1..N ] | ( C1,..,C2 )
<тип множество>:: =SET OF <простой тип>
<тип массив>:: =ARRAY <диапазоны> OF<простой тип>
<диапазоны>:: =<диапазон>|<диапазоны>,<диапазон>
<диапазон>:: =[ K1 .. K2 ]
<тип запись>:: =RECORD <идентификатор>[,<идентификатор>]: <простой тип> END
<тип указатель>:: =POINTER TO <простой тип>| POINTER TO<идентификатор>
Семантика:
Сформировать и вывести на печать таблицы идентификаторов и констант. Константы индексов в массиве - INTEGER.
Сообщать об ошибках при дублировании имен, указать размер памяти под тип (CHAR - 1; REAL - 4; INTEGER, CARDINAL - 2 байта).
Примеры правильных цепочек:
TYPE er = SET OF CARDINAL;
TYPE GF = ARRAY [ 7 .. 78 ], [ 98 .. 566 ] OF CHAR;
TYPE G = POINTER TO gvl;
TYPE gvf = RECORD g : INTEGER, FD : BOOLEAN END;
TYPE FR = [ 1 .. 25 ];
TYPE YGTFRE = ( 6, 3, 2, 4, 1, 980 );