printРабочее место участника

printЗадачи

1333. Транслятор для языка Basic-

Ограничения: время – 200ms/500ms, память – 32MiB Ввод: input.txt или стандартный ввод Вывод: output.txt или стандартный вывод copy
Послать решение Blockly Посылки Темы Где Обсудить (0)

Транслятор переводит программу на языке высокого уровня в программу на машинном языке. Напишите транслятор для упрощенного языка Basic-. В языке Basic- всего 26 переменных, обозначаемых прописными латинскими буквами от A до Z. Так как все переменные целые, то операторы объявления переменных отсутствуют. Для упрощения задачи в языке также отсутствуют операторы ввода-вывода, ветвления и цикла, комментарии, а также все операции и функции, кроме бинарных операций + и –. В результате программа на языке Basic- состоит из последовательности операторов присваивания вида:

<переменная> = <выражение>
где <выражение> это <операнд> или <выражение> + <операнд> или <выражение> - <операнд>
а <операнд> это <переменная> или ( <выражение> )

Каждый оператор присваивания записывается на отдельной строке, не содержит пробелов, длина оператора не превышает 80 символов. Пример программы:
A=B
D=A+(B-C)

Машинный язык, на который транслируется программа, состоит всего из 4 команд:

LOAD <переменная>
Загружает значение переменной в стек.

SAVE <переменная>
Сохраняет вершину стека в переменной.

ADD
Складывает два числа на вершине стеке, сумма помещается в стек.

SUB
Вычисляет разность на двух чисел на вершине стека, разность помещается в стек.

Результат трансляции вышеуказанной программы из двух операторов может выглядеть следующим образом:
LOAD B
SAVE A
LOAD C
LOAD A
LOAD B
ADD
SUB
SAVE D
Это не единственный вариант машинного кода. Результат вычислений не изменится, если поменять местами, например, команды LOAD A и LOAD B.
Во входном файле программа на языке Basic- (один или более операторов присваивания).
В выходной файл вывести результат трансляции программы на машинный язык. Не делайте оптимизирующий транслятор! Последовательность блоков кода для операторов присваивания должна совпадать с последовательностью этих операторов в программе на языке Basic-. Для каждого оператора присваивания должна быть команда SAVE, которая должна быть последней в соответствующем блоке кода. Каждому появлению переменной в правой части оператора присваивания должна соответствовать команда LOAD в машинном коде. В пределах блока кода порядок машинных команд может быть достаточно произвольным, требуется лишь соответствие результата вычислений выражению в правой части оператора присваивания.

Пример ввода

A=B
D=A+(B-C)

Пример вывода

LOAD B
SAVE A
LOAD A
LOAD C
LOAD B
SUB
ADD
SAVE D
loading