Haskell - Обработка программ
Рассматривается простой императивный язык программирования для вычислений в целых числах, содержащий следующие конструкции: выражения, состоящие из целых констант, переменных целого типа и операций; присваивание; последовательное выполнение операторов (присваивания). Абстрактный синтаксис этого языка выражен описанием следующих типов данных:
data Expression = Constant Integer |
Variable String |
Unary Char Expression |
Binary Expression Char Expression
data Operator = Assignment Expression Expression |
-- в левой части присваивания может быть только переменная
Sequence [Operator]
Программа - это значение типа Operator.
Написать следующую функцию для обработки программ:
invert :: Operator -> Operator
Переставляет в заданной программе все присваивания таким образом, чтобы они шли в обратном порядке. Для вывода результата работы можно использовать стандартное представление программы (deriving Show) или написать свою собственную функцию для более "симпатичного" представления программы.