IMO, automatic translators have far more advantages than disadvantages. Automatic translators provide a guide for manual translators to follow. If your translator provides bad guidance then you were using the wrong translator. If your translator claims to correct or carry over high efficiency during translation then either someone had a bunch of time and money on their hands, or their claim is worthless.
An automatic translator should be used as part of a conversion process that has but one requirement: to translate the code so that it produces the same output in a different language environment. Let the translator give you somewhere to start from, but don't expect it to take you all the way there every time, and view the entire conversion effort in the same way. If you want efficiency then you should put it there after the translation is complete.
I wrote a C to Ada translator in 1987, and I am working on a C++ to Ada95 translator now. One thing that I have found through comments about the output of my translators, is that - often - the translator understands the source code better than those who find fault with its output. There is often confusion over the expression evaluation order of complex C++ expressions, for example. Complexity can be broken down easily by a translator.
Another advantage that automatic translators have is that they produce the same result for the same input; this is true in many ways. We know the shortcomings of our translator, so we can document them for the manual translators to look out for. We might also correct them, and that correction is then project wide. When the manual translator reads automatic translator output, that output always has the same style, and a common style can be a big help during code review and correction. The automatic translator is also not bothered by the mundane aspects of every translation.
Brian G. Holmes
GTE Government Systems Corporation
[log in to unmask]