The semantics may be very, very different. Let's take an example with two similar languages, Java and C++. You have the AST for a piece of code which creates a struct, zeroes its memory, calls a function pointer, then calls Qt library functions to display a GUI with a few signal/slots to handle user input. How does a program 'easily' translate this into Java?
Now, imagine a similar problem with Haskell, Prolog, Factor or 8-bit assembly...