Вы должны иметь возможность создавать дерево разбора из всех языков ввода.
Для каждого выходного языка вам нужно будет создать набор грамматических преобразований дерева.
Вам также может потребоваться библиотека времени выполнения, чтобы помочь переводить подпрограммы, которые недоступны на вашем языке вывода.