【问题标题】:What language features are required in a programming language to make a compiler?编程语言中需要哪些语言特性来制作编译器?
【发布时间】:2023-04-09 18:16:01
【问题描述】:

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

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

【问题讨论】:

标签: language-agnostic compiler-theory


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    理论上,很少。 computability theorist 会说你只需要mu-recursionTuring machine 或类似的。

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

    【讨论】:

    • "理论上,理论和实践没有区别,实践中是有区别的。" -- 我忘了是谁。
    • 所有你只需要一台图灵机”让我笑了,因为它基本上是已知的最强大的“合理”计算模型 :-)
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      我假设装配工会进行切割。

      【讨论】:

        【解决方案5】:

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

        除了编译本身之外,没有要求该语言对其他任何事情都有用吗?我向您介绍Useless,在这种语言中,每个文本都是一个适当的程序,意思是“一个接受任何输入并自行生成的程序”(这也称为Useless 编译器)。

        【讨论】:

        • 我更喜欢 Jon Skeet 的语言。但是为了争论,让我们确保该语言至少是图灵完备的。
        • 那肯定是 Useless 编程语言。
        • @Brad:是的,是的。 @Matthew:你确定 Jon Skeet 的语言可以自己编译吗?
        • @Rafal:你得问问他;我很确定这正是他想要的,出于恐惧。
        猜你喜欢
        • 2011-07-17
        • 2011-02-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-14
        • 2010-12-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多