编程语言需要哪些语言功能才能生成编译器?

时间:2009-10-05 07:14:05

标签: language-agnostic compiler-theory

编程语言似乎经历了几个阶段。首先,有人想出了一种新语言Foo Language。编译器/解释器是用另一种语言编写的,通常是C语言或其他一些低级语言。在某些时候,FooL会成熟并且成长,最终某人会在FooL本身为FooL编写编译器和/或解释器。

我的问题是:语言功能的最小子集是什么,以至于某人可以自己实现该语言?

5 个答案:

答案 0 :(得分:7)

即使使用Turing machine也可以编写编译器 - Universal Turing Machine基本上是任何图灵机的编译器/解释器,因此任何Turing-complete语言都应该足够:)

答案 1 :(得分:4)

理论上,令人惊讶的是很少。 computability theorist会说您需要的只是mu-recursionTuring machine等。

但是,从实际的角度来看,尝试在图灵机中实现编程语言并不是很乐意。我想说,至少,你会希望拥有所有常用的控制流结构,原始数据类型,子程序,以及数组和结构。这应该足以让你在语言本身中实现该语言的子集 - 然后你可以从那里自我引导。

答案 2 :(得分:2)

一个选项是read-eval-print loop。这可以用于构建许多更高级别的构造。我相信这是LISP采取的路径 我不确定C的开头,但我认为它开始于一些系统调用来实现分支,循环,赋值和单字符I / O,并从那里构建。

答案 3 :(得分:0)

我假设汇编程序会进行削减。

答案 4 :(得分:0)

  

我的问题是:语言功能的最小子集是什么,以至于某人可以自己实现该语言?

除了编译本身之外,没有要求该语言有用吗?我向你展示Useless,每种文本都是正确程序的语言,意思是“一个接受任何输入并产生自身的程序”(这也称为Useless编译器)。