Compilation 编译程序与解释器的关系

Compilation 编译程序与解释器的关系,compilation,interpreter,compile-time,execution-time,pythoninterpreter,Compilation,Interpreter,Compile Time,Execution Time,Pythoninterpreter,**在执行pgm期间,解释是否遵循编译阶段?**简单地说,当我们运行程序时会发生什么?如果这些是不同的事情,那么在解释之前,什么将执行语法检查。正如我所了解的,python是一种解释语言,那么通过什么来检查语句?您有两个选项: * target_platform == native_platform (native-compiler) * target_platform != native_platform (cross-compiler). 编译语言 解释语言 在编译语言中,您需要一个

**在执行pgm期间,解释是否遵循编译阶段?**简单地说,当我们运行程序时会发生什么?如果这些是不同的事情,那么在解释之前,什么将执行语法检查。正如我所了解的,python是一种解释语言,那么通过什么来检查语句?

您有两个选项:

* target_platform == native_platform (native-compiler)
* target_platform != native_platform (cross-compiler). 
  • 编译语言
  • 解释语言
在编译语言中,您需要一个编译器,该编译器将源代码作为输入,并生成一个可在给定目标平台上运行的二进制文件。例如,C、C++或java是编译语言。编译器生成二进制文件后,在目标平台上执行该二进制文件。生成二进制文件的编译过程中涉及的主要步骤是词汇、语法和语义分析以及代码生成

编译器是在本机平台上运行并为给定目标平台生成代码的程序(二进制)。您有两个选择:

* target_platform == native_platform (native-compiler)
* target_platform != native_platform (cross-compiler). 
如果您有一台x86_64台式PC,则您的编译器在x86_64上运行,并生成在x86_64上运行的代码,则您有一台本机编译器。在这种情况下,编译器生成本机代码

如果您有一台x86_64台式PC,您的编译器在x86_64上运行,并生成在不同平台(如JVM)上运行的代码,则您有一个交叉编译器。您应该了解,Java语言使用一个交叉编译器,该编译器将Java语言作为输入,并生成在JVM(而不是x86_64机器)上运行的字节码作为输出

其他交叉编译器,如arm linux gcc、mips linux gcc、ppc linux gcc等,获取C源代码作为输入,并生成二进制代码以在适当的目标平台(arm、mips、ppc)上运行

在解释语言中,生成代码不需要编译器,因此在过程结束时不会生成二进制文件。bash和python是解释语言。该语言的解释器(安装在您的PC中的二进制文件,如/bin/bash或/usr/bin/python)接收输入源代码,对其进行解释,然后执行以生成输出。解释源代码所遵循的步骤与编译器所遵循的步骤完全相同,只是解释程序不生成代码,只是在分析后执行

不久前我写了一篇文章,解释了如何使用python编写自定义语言的解释器。这篇文章是用西班牙语写的,但是整个过程是一步一步地解释的,所以如果你对它感兴趣,你可以学到很多东西。在文章的末尾,您可以找到要下载和测试的源代码。源代码在github中提供。这篇文章可以在这个网站上找到

希望有帮助!:)

您有两个选择:

* target_platform == native_platform (native-compiler)
* target_platform != native_platform (cross-compiler). 
  • 编译语言
  • 解释语言
在编译语言中,您需要一个编译器,该编译器将源代码作为输入,并生成一个可在给定目标平台上运行的二进制文件。例如,C、C++或java是编译语言。编译器生成二进制文件后,在目标平台上执行该二进制文件。生成二进制文件的编译过程中涉及的主要步骤是词汇、语法和语义分析以及代码生成

编译器是在本机平台上运行并为给定目标平台生成代码的程序(二进制)。您有两个选择:

* target_platform == native_platform (native-compiler)
* target_platform != native_platform (cross-compiler). 
如果您有一台x86_64台式PC,则您的编译器在x86_64上运行,并生成在x86_64上运行的代码,则您有一台本机编译器。在这种情况下,编译器生成本机代码

如果您有一台x86_64台式PC,您的编译器在x86_64上运行,并生成在不同平台(如JVM)上运行的代码,则您有一个交叉编译器。您应该了解,Java语言使用一个交叉编译器,该编译器将Java语言作为输入,并生成在JVM(而不是x86_64机器)上运行的字节码作为输出

其他交叉编译器,如arm linux gcc、mips linux gcc、ppc linux gcc等,获取C源代码作为输入,并生成二进制代码以在适当的目标平台(arm、mips、ppc)上运行

在解释语言中,生成代码不需要编译器,因此在过程结束时不会生成二进制文件。bash和python是解释语言。该语言的解释器(安装在您的PC中的二进制文件,如/bin/bash或/usr/bin/python)接收输入源代码,对其进行解释,然后执行以生成输出。解释源代码所遵循的步骤与编译器所遵循的步骤完全相同,只是解释程序不生成代码,只是在分析后执行

不久前我写了一篇文章,解释了如何使用python编写自定义语言的解释器。这篇文章是用西班牙语写的,但是整个过程是一步一步地解释的,所以如果你对它感兴趣,你可以学到很多东西。在文章的末尾,您可以找到要下载和测试的源代码。源代码在github中提供。这篇文章可以在这个网站上找到


希望有帮助!:)

这个二进制是什么意思?是字节码吗?那么谁来检查语法呢?如果我们写了一个错误的语法,它会显示一些错误,对吗?字节码是在JVM上运行的机器代码,所以Java为JVM生成代码。尝试直接在x86_64上运行字节码而不安装JVM,看看会发生什么…如果转储二进制文件的内容(使用hexdump工具),它总是包含0和1。。。但是这些位有一个内部格式。。。在linux上,二进制文件使用ELF()进行编码。Windows有自己的二进制格式。编译步骤包括:词典分析器、语法分析器、语义分析器、代码优化器和代码生成。每一步的输出就是下一步的输入。代码优化程序(-O带gcc)为responseAB