Compiler construction 有任何语言既没有解释器也没有编译器吗?

Compiler construction 有任何语言既没有解释器也没有编译器吗?,compiler-construction,interpreter,Compiler Construction,Interpreter,注意:我不是指一些没有任何实现的理论问题,只是指没有两种实现的语言 现在有一个c/c++解释器(cint)和一个python编译器(用于python字节码) 我知道最简单的定义是,编译器只是将代码从a语言转换为b语言,然后你有一台机器将其与输入一起运行,而解释器只是将输入加上a语言中的代码并运行它。如果某个东西有一个解释器或编译器,那么使用这些定义就相当容易获得另一个解释器,方法是立即运行编译器的输出或嵌入编译器和源代码以获得解释器 因此,忽略那些既没有编译器(用a到B最好是中间语言编译源代码

注意:我不是指一些没有任何实现的理论问题,只是指没有两种实现的语言


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

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


因此,忽略那些既没有编译器(用a到B最好是中间语言编译源代码)又没有解释器(不用编译就可以运行大块代码)的语言吗?

基于翻译的语言呢?示例:几乎所有的机器组件。汇编程序只是将代码转换成机器操作码。

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

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

  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
口译员特征:

* 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


(来源:)

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

我的一位同学可以在
苹果上编写一个完整的麦克风到扬声器程序][
通过在调用-151后打孔所有十六进制代码。因此答案可能是:机器代码。

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

祝你好运


参考资料:

因此,我在前言中声明:任何具有固定语义的语言都可以实现,可以表达可计算函数。我在这里避险,没有明确说明我所说的“语义”是什么意思,但我通常指的是操作语义(大步或小步)一种指称语义学或公理语义学

因此,排除了这一点,仍然存在两个问题:是否有一些语言根本没有任何语义(因此无法通过任何常规方法实现),或者是否有一些语言尽管可以实现,但尚未实现

后一种情况显然是正确的,但它不是很有趣。仅仅因为人们想出了一种语言并不意味着它是一个好主意。我现在可以想到一种语言,它不会有编译器或解释器。不是很有趣

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

这一点尤其正确,因为我们可以争辩说,即使解释器最终是另一台图灵机,也可以为图灵全语言编写解释器

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

符合您标准的语言可能是没有执行语义的语言,即它们不表示可计算的函数。我知道有两种具有固定语义的语言,它们既不能由解释器直接执行,也不能通过将它们编译为任何其他语言而不使用其他语言来丰富这些程序资料:


拉丁语和亚拉姆语。两种死了的语言,有翻译,但没有足够的现场演讲者来保证任何翻译。你可以添加克林贡语,但我怀疑现在确实有翻译。如果你所说的翻译是指执行部分代码的工具