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

时间:2010-10-18 13:09:49

标签: compiler-construction terminology

我在工作中加入了这个论点。我的同事告诉我,生成机器代码的东西就是编译器。然后(在我提到Google Closure Compiler之后)他改变主意:显然,对他而言,编译器可以生成任何语言的优化源代码(这是没有意义的,因为优化是编译器的可选步骤。)据他介绍,生成Objective-C代码的程序是源变换器,而不是编译器。

据我所知,一个程序可以获得一种语言的源代码,并将其转换为任何语言,而不仅仅是机器代码,它是一个编译器。所以,源代码转换器==编译器。

那么,什么是编译器?

1 个答案:

答案 0 :(得分:0)

我在其他任务中构建tools that can transform code from one language to another

我们使用的定义是,当您从一个语言“转换”为相同的语言时,您正在做的是构建优化器。从这个角度来看,“Closure编译器”被错误命名。

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

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

这些之间的界限并不总是很整洁。如果从APL矩阵运算转换为APL标量运算,那么您将从同一种语言转到另一种语言,即“优化”,但也从高级概念转向低级别概念,因此“编译”。从我的观点来看,抽象变换级别胜过同样的目标,因此我将APL-matrix称为APL-scalars“编译”。

在语言之间进行翻译时,您会发现在有时您可以使用相同级别的抽象来执行此操作,有时您不能(或不想)。所以真正的事实是,每次翻译都会将抽象级别从高级变为低级。您拥有多少编译器取决于抽象级别更改的程度。

我们的引擎通过您所谓的source code transformation来完成所有这些。