Compilation 为什么在编译过程中没有将源语言翻译成生成语言的独特翻译?

Compilation 为什么在编译过程中没有将源语言翻译成生成语言的独特翻译?,compilation,compiler-optimization,Compilation,Compiler Optimization,在我们编译代码时,是否有任何算法或编译器能够将源代码准确地转换为生成的代码?您已经提出了两个完全不同的问题,我将尝试一次回答一个。首先,问题是为什么在编译时没有从源代码到目标代码的唯一转换。这是因为,与自然语言一样,大多数计算机语言通常有许多方式来表达相同的想法或算法,与自然语言类似,您可以根据上下文选择措辞。因此,在编译时,通过选择在目标代码应该工作的上下文中最有效的单词,将源代码转换为目标代码。如果您的程序必须快速,您可以选择快速的目标结构;如果您的程序必须在内存受限的环境中工作,您可以选择

在我们编译代码时,是否有任何算法或编译器能够将源代码准确地转换为生成的代码?

您已经提出了两个完全不同的问题,我将尝试一次回答一个。首先,问题是为什么在编译时没有从源代码到目标代码的唯一转换。这是因为,与自然语言一样,大多数计算机语言通常有许多方式来表达相同的想法或算法,与自然语言类似,您可以根据上下文选择措辞。因此,在编译时,通过选择在目标代码应该工作的上下文中最有效的单词,将源代码转换为目标代码。如果您的程序必须快速,您可以选择快速的目标结构;如果您的程序必须在内存受限的环境中工作,您可以选择紧凑的目标结构


第二个问题的答案是,如果有任何编译器将源代码准确地翻译成目标代码,那么这就是所有编译器的目标,如果它们失败了,这是由于bug造成的。概括一下,这意味着对于简单的程序,所有编译器都会将源代码翻译成等效的目标代码,而对于使用源语言更复杂部分的代码,它们可能会失败。

生成的代码是什么意思?从技术上讲,所有编译器都是这样做的,如果你认为机器代码是代码,你到底指的是什么?你说的是什么生成的代码?也许你说的是transpiling/transcompiling-在一些书中,有人说当我们编译任何程序时,由于一些编译器的缺陷,源代码无法生成所需的输出。我想生成的代码可能指的是语义分析器在这里生成的IR。然而,你的问题过于简单化,缺乏可能帮助我们的基本细节。