什么时候可以声称你的程序是“编译器”?

时间:2011-03-01 22:07:03

标签: compiler-construction language-design

评估wikipedia

  

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

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

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

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

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

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

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

对应关系可以非常接近(在FORTRAN和汇编之间)或更远(Prolog或Lisp和汇编),但只要可以通过连贯的输入语言产生大量行为,它就是编译器。