代码之家  ›  专栏  ›  技术社区  ›  Roman A. Taycher

有哪种语言既没有解释器也没有编译器?

  •  3
  • Roman A. Taycher  · 技术社区  · 15 年前


    现在有一个c/c++解释器(cint)和一个python编译器(到python字节码)。

    我知道,最简单的定义是,编译器只是将代码从a语言转换为b语言,然后你就有了一台机器,它将b语言与输入一起运行,而解释器则是简单地接受a语言中的输入加上代码并运行它的东西。如果一个东西有一个解释器或编译器,那么使用这些定义就很容易得到另一个解释器,方法是立即运行编译器的输出,或者嵌入编译器和源代码来得到解释器。

    所以忽略那些既没有编译器(用a到B最好是中间语言编译源代码)又没有解释器运行大量代码而不编译它们的语言?

    11 回复  |  直到 15 年前
        1
  •  2
  •   Glorfindel Doug L.    6 年前
      Compiler vs. Interpreter
    

    解释器将某种形式的源代码翻译成目标表示,它可以立即执行和计算。解释器的结构类似于编译器的结构,但是生成可执行表示所需的时间会随着优化量的变化而变化。下图显示了差异的一种表示。 图解的 编译器特性:

    * spends a lot of time analyzing and processing the program
    * the resulting executable is some form of machine- specific binary code
    * the computer hardware interprets (executes) the resulting code
    * program execution is fast
    

    口译员特点:

    * relatively little time is spent analyzing and processing the program
    * the resulting code is some sort of intermediate code
    * the resulting code is interpreted by another program
    * program execution is relatively slow
    

    alt text
    (来源: gpollice at web.cs.wpi.edu )

        2
  •  9
  •   Paul Butcher    15 年前

    有几个 esoteric languages 它既没有编译器也没有解释器,因为它们仅仅是作为智力练习而设计的,正在等待有人真正实现它们。

        3
  •  8
  •   dwarFish    15 年前

    拉丁语和亚拉姆语。两种死了的语言,有翻译,但没有足够的现场演讲者来保证任何口译员。你可以加上克林贡语,但我怀疑现在真的有翻译。

        4
  •  5
  •   terminus    15 年前

    translates 输入机器操作码。

        5
  •  3
  •   Ira Baxter    15 年前

    然后硬件描述语言(VHDL,Verilog,…)我认为没有这些。 Verilog与VHDL 作为芯片实现的晶体管电路。

    类似地,我认为您不会发现许多交互式约束求解器语言。 与硬件设计语言一样,约束程序大多是执行的 约束求解器语言通常被编译为较低级别的表示 它的“处理”比传播约束的解释要多 基于依赖关系。

    一般来说,这两者都不会产生“机器指令”。

        6
  •  2
  •   rjobidon    15 年前

    阶梯式语言 可编程逻辑控制器(PLC)没有编译器或解释器。阶梯被转换成布尔条件来管理输入、输出和内存状态。梯形图每秒计算数千次,以便在硬件上实际运行代码。

    祝你好运!

    参考文献: Programmable logic controller on Wikipedia

        7
  •  1
  •   Gian    15 年前

    前一种情况更有趣一些。有些语言实际上是逻辑和(通过 Curry-Howard correspondence )这些逻辑中的证明也是程序(反之亦然)。如果逻辑是不可判定的,或者如果语言中包含了某种高阶结构,而这些结构不是很正规化的(比如一些非常有表现力的类型系统),那么编译或解释就成了一件有点可怕的事情。这可能开始接近“不编译”的境界 但这是一个有点虚假的说法,因为如果我们能让计算机操纵这些符号,我们就可以编写一个解释程序。类似地,如果它没有语义,那么它可能不会对可计算函数进行操作——在这一点上,它可能只是某种自然语言,不再是“编程语言”。

    Church-Turing thesis 他说,为图灵完备语言编写一个解释器总是可能的,即使这个解释器最终是另一个图灵机器。

    我看到一些关于机器语言的其他答案。机器语言没有什么神奇之处,除了它有一个非常紧凑的表示。一个人可以很容易地为它编写一个解释器,而且有许多解释器(例如,各种虚拟机忠实地在软件中实现硬件处理器的执行语义)。

    符合条件的语言可能是没有执行语义的语言,即它们不表示可计算函数。我知道有两种语言的语义是固定的,它们既不能由解释器直接执行,也不能编译成其他语言 而不是用额外的信息丰富这些程序

        8
  •  0
  •   Ignacio Vazquez-Abrams    15 年前

    一些小的RISC机器代码也没有,因为它们所做的只是将位推送。没有解释,因为不可能在较低的级别运行它,也没有编译,因为它已经是0和1了。

        9
  •  0
  •   ohho    15 年前

    我的一个同学可以在电脑上写一个完整的麦克风到扬声器程序 APPLE ][ CALL -151 . 所以答案可能是:机器代码。

        10
  •  0
  •   jamiebarrow    15 年前

    HTML是一种语言,但却是一种标记语言。我不知道浏览器是如何解析它们的,但是我假设它们逐行解释它们,构建DOM和呈现元素等等。

    自然语言,如英语,有大量且不断增长的语法,除非使用精确的形式,否则并不总是用正式的表示法(如BNF)来表示。我想。

    所以我说,你不可能真的为英语和许多自然语言建立一个解释程序,因为它总是不断发展的——看看chatspeak和textspeak。

        11
  •  -1
  •   Coding Flow    15 年前

    编译器将整个源代码转换为其他代码,通常是机器代码或某种低级中间语言,如java字节码或.net IL。解释器在执行程序时逐行转换源代码。除非你用汇编语言写,否则你必须做一件或另一件事,甚至需要把汇编语言的语法转换成二进制机器代码。