|
Транслятор
Рассматриваются два алгоритмических языка: Beta и Psi (описания
языков прилагаются ниже). Требуется перевести программу с языка
Beta на язык Psi. Результирующая программа на языке Psi должна
реализовывать тот же самый алгоритм, что и исходная программа
на языке Beta. Пример:
10 N=5
20 SUM=SUM+N
35 N=N-1
40 IF N> 0 THEN WALKTO
70 TYPE Sum
999 END
Результат:
DEF N, Var, C;
START
Var := 0; c := 1;
WHILE c < 6 DO
IF c = 1 THEN N:= 5; c:=c+1; FI;
IF c = 2 THEN Var:=Var+N; c:=c+1;
FI;
IF c = 3 THEN N:=N-1; c := c+1; FI;
IF c = 4 THEN
IF N> 0 THEN c := 1; FI;
c := c+1;
FI;
IF c = 5 THEN Print (Var);
c := c+1;
FI;
OD;
FINISH
Примечания:
1. Текст исходной программы состоит не более, чем из 100 строк, а
каждая строка содержит не более 80 символов.
2. Текст исходной программы не содержит синтаксических ошибок.
3. Программы на языке Psi, содержащие синтаксические ошибки, на
соответствие исходной программе проверяться не будут.
4. Задача оценивается из 40 баллов. Решения задачи для случая,
когда в исходной программе отсутствуют операторы WALKTO, также
будут оцениваться.
5. Время тестирования программы ограничено.
Описание языка Beta:
Программа на языке Beta состоит из последовательности
операторов; каждый оператор располагается в отдельной
строке и ему всегда предшествует метка (натуральное
число <= 10000). Все метки различны и упорядочены по
возрастанию, оператор отделяется от метки пробелами.
Имя переменной состоит из одной или нескольких латинских
букв (не более 8 букв), большие и маленькие буквы
неразличимы. Имена переменных не могут совпадать с
ключевыми словами, из которых строятся операторы.
Исполнение программы начинается с первого оператора.
Последним в тексте программы всегда является оператор END.
Значения переменных, константы и значения выражений в
языке являются целочисленными и находятся в диапазоне
от -32768 до 32767. В начале работы программы значения
всех переменных равны нулю. Программа может содержать
лишние разделительные пробелы. Имена переменных, имена
операторов, метки и константы записываются без пробелов.
Текст программы не содержит пустых строк.
Ниже перечислены операторы языка Beta:
Название оператора |
Форма записи оператора |
Комментарий |
Оператор присваивания |
Переменная=Выражение |
Выражение - это арифметическое выражение, содержащее
переменные, целочисленные константы, круглые скобки
и знаки арифметических операций: +, -, *. Оператор
присваивает переменной из левой части значение
выражения. |
Оператор перехода |
WALKTO метка |
Оператор передает управление оператору, начинающемуся
с указанной метки. Метка задается константой и не
может содержать арифметических операций. |
Условный оператор |
IF условие THEN оператор присваивания или оператор перехода |
Условие - это два выражения, разделенные одним из знаков
сравнения: "=", "<", "> ", "< > " (не равно). Оператор
проверяет условие, и, если оно истинно, то выполняется
оператор, следующий за словом THEN в этой же строке. |
Оператор печати |
TYPE Выражение |
Оператор выводит с новой строки значение выражения. |
Оператор завершения |
END |
Всегда записывается последним оператором в программе и
завершает ее исполнение. |
Описание языка Psi:
Программы на языке Psi состоит из описания переменных и
тела программы.
Описание переменных начинается со слова DEF, за которым
следуют имена всех переменных, используемых в программе.
Переменные в списке разделяются запятыми и не могут
повторяться, после последней переменной ставится символ ;
(точка с запятой).
Тело программы состоит из последовательности операторов,
заключенных между словами START и FINISH.
Операторы разделяются символом ; (точка с запятой).
Понятия переменной, константы, выражения и условия
совпадают с соответствующими понятиями в языке Beta.
Программа может содержать пустые строки и лишние
разделительные пробелы.
Имена переменных, имена операторов, метки и константы
записываются без пробелов. Имена переменных не могут
совпадать с ключевыми словами, из которых строятся
операторы. Переменные в начале работы программы
принимают случайные значения.
Ниже перечислены операторы языка Psi:
Название оператора |
Форма записи оператора |
Комментарии |
Оператор присваивания |
Переменная:=Выражение |
Оператор присваивает переменной из левой части значение выражения. |
Условный оператор |
IF условие THEN оператор; ...; FI |
Оператор проверяет условие, и, если оно истинно, то выполняются
операторы, находящиеся между словами THEN и FI. Между THEN и FI
может находиться и один оператор. |
Оператор печати |
PRINT (выражение) |
Оператор выводит с новой строки значение выражения. |
Оператор цикла |
WHILE Условие DO оператор; ,...; OD |
Повторяет выполнение операторов, находящихся между словами DO и OD,
пока истинно условие. Между DO и OD может находиться и один оператор. |
|
.:Реклама |
|
|
|