Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Compiler construction 获取Delphi源代码,然后将其转换为Objective-C代码的程序是编译器吗?还是源代码转换器?_Compiler Construction_Terminology - Fatal编程技术网

Compiler construction 获取Delphi源代码,然后将其转换为Objective-C代码的程序是编译器吗?还是源代码转换器?

Compiler construction 获取Delphi源代码,然后将其转换为Objective-C代码的程序是编译器吗?还是源代码转换器?,compiler-construction,terminology,Compiler Construction,Terminology,我在工作中卷入了这场争论。我的同事告诉我,生成机器代码的东西就是编译器。然后(在我提到谷歌闭包编译器之后)他改变了主意:显然,对他来说,编译器是用任何语言生成优化的源代码的东西(这没有意义,因为优化是编译器的可选步骤。)他说,一个程序生成,例如,Objective-C代码是源代码转换器,而不是编译器 据我所知,一个用一种语言获取源代码并将其转换成任何语言(不仅仅是机器代码)的程序就是一个编译器。因此,源代码转换器==编译器 那么,什么是编译器?我在其他任务中构建 我们使用的定义是,当您从一种语言

我在工作中卷入了这场争论。我的同事告诉我,生成机器代码的东西就是编译器。然后(在我提到谷歌闭包编译器之后)他改变了主意:显然,对他来说,编译器是用任何语言生成优化的源代码的东西(这没有意义,因为优化是编译器的可选步骤。)他说,一个程序生成,例如,Objective-C代码是源代码转换器,而不是编译器

据我所知,一个用一种语言获取源代码并将其转换成任何语言(不仅仅是机器代码)的程序就是一个编译器。因此,源代码转换器==编译器

那么,什么是编译器?

我在其他任务中构建

我们使用的定义是,当您从一种语言“转换”到同一种语言时,您所做的就是构建一个优化器。从这个角度来看,“闭包编译器”的名称是错误的

当您从一种语言转换到另一种语言时,两种翻译中使用的概念大致处于同一级别(赋值语句、if-then-else、显式过程等,大多数语言的典型情况),您正在执行翻译(例如,COBOL到Java)

当您从一种语言转换到另一种语言,但在目标端生成较低级别的语言结构(例如,PASCAL到机器指令,APL[矩阵语言]到标量C代码)时,您正在编译

它们之间的界限并不总是整齐的。如果您从APL矩阵运算转换为APL标量运算,您将从同一种语言转换为另一种语言,因此是“优化”,但也将从高级概念转换为低级概念,因此是“编译”。在我看来,抽象级别的改变胜过了同样的langauge目标,所以我将APL矩阵称为APL标量“编译”

在实践中,当你在两种语言之间进行翻译时,你会发现有时你可以用同样的动作水平来完成,有时你不能(或不想)完成。因此,真正的事实是,每一种翻译都倾向于在某种程度上从高到低改变抽象层次。您拥有多少编译器取决于操作级别更改的程度


我们的引擎通过您所谓的方式完成所有这些功能。

您使用过谷歌吗?请尝试“定义:编译器”,这里有一个链接: