2011-03-01 36 views
4

Accorging到wikipedia你什么时候可以声称你的程序是一个“编译器”?

编译器是一个计算机程序(或程序组),该变换用编程语言源代码(源语言)到另一个计算机语言(目标语言,通常具有二进制形式称为目标代码)。想要转换源代码的最常见原因是创建一个可执行程序。

但是下面这段代码可以被认为是编译器吗?

class S { 
    public static void main(String ... args) { 
    if("1".equals(args[0])) { 
     System.out.println("echo Hi"); 
    } 
    } 
} 

我知道这是一个过于简单化,但是,你什么时候可以说一个给定的程序实际上是一个“编译器”?

+0

一个非常简单的编译器...不是很通用;) – Oded 2011-03-01 22:11:39

+0

如果你的源语言只包含一个有效的计划 - “1”,和您的目标语言是你自己的shell脚本的子集,用一个命令 - 呼应“嗨” - 好的。否则,不。 – Tesserex 2011-03-01 22:12:02

+1

这是一个很好的问题,但也许它应该是社区wiki? – 2011-03-01 22:17:35

回答

3

语言是由字符串“1”与打印语义“Hi!”组成的语言一种编程语言?我不会说,所以这不是一个编译器。

当它接受真正的编程语言并将其转换为另一种不同的语言时,则称它为编译器。这通常涉及解析源语言以提供语义,然后将其改为其他语言。

1

有人可能会使用Turing-completeness作为标准,但这有点严格(特殊用途的编程语言可能不是图灵完整版),所以我会选择一些不太严格的东西。

我认为关键的是,输出是一个一系列指令,并且存在是输出和输入之间的一些非平凡对应。您提供的示例违反了后者的标准,因为无论输入有多复杂,只有两种可能的输出:"echo Hi",而不是任何内容。

对应关系可以非常接近(如FORTRAN和程序集之间)或更远(Prolog或Lisp和程序集),但只要可以通过一致的输入语言生成大量行为,它就是一个编译器。

+0

图灵完整性不帮助 - 你会排除,例如,SQL查询编译器。 – 2011-03-10 11:28:35

+0

谢谢,这就是我所说的“专用编程语言”的一个很好的例子。 – 2011-03-10 18:23:17

相关问题