任何语言都没有解释器或编译器吗?

时间:2010-07-13 09:13:46

标签: compiler-construction interpreter

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


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

我理解最简单的定义是编译器只是将代码从语言a转换为语言b,然后你有一台机器与输入一起运行它,而解释器只是需要输入和语言代码的东西。 a并运行它。如果某些东西有解释器或编译器,那么通过立即运行编译器的输出或者使用源代码嵌入编译器来获取解释器,可以很容易地获得另一个定义。

那么忽略哪些语言没有编译器(编译A到B中的源代码,最好是中间语言)和运行大块代码而不编译它们的解释器?

11 个答案:

答案 0 :(得分:9)

有几个esoteric languages缺少编译器或解释器,因为它们仅被设计为智力练习,并且正在等待某人实际实现它们。

答案 1 :(得分:6)

拉丁语和亚拉姆语。两种语言与翻译,但现场发言人不足以保证任何口译员。你可以添加克林贡语,但我怀疑现在还有解释器。

答案 2 :(得分:5)

基于翻译的语言怎么样?示例:几乎所有机器装配。汇编程序只是translates代码进入机器操作码。

答案 3 :(得分:3)

如果解释器是指一种以交互方式执行部分代码的工具, 那么硬件描述语言(VHDL,Verilog,...)我认为没有这些。 大多数人将VHDL和Verilog描述模拟为整体,以检查净(ahem)效应。 Verilog和VHDL 最终被编译成门(用于FPGA)和 用作芯片的晶体管电路。

同样,我认为你找不到很多交互式约束求解器语言。 与硬件设计语言一样,约束程序主要是执行的 作为巨石,因为部分约束会产生太多答案。 约束求解器语言通常被编译为较低级别的表示 除了通过传播约束解释之外,它被“处理” 基于依赖性。

作为一般规则,这些都不会产生“机器指令”。

答案 4 :(得分:2)

  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 http://web.cs.wpi.edu/~gpollice/cs544-f05/CourseNotes/maps/Class1/NotesImages/Topic42NotesImage1.jpg

答案 5 :(得分:2)

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

祝你好运!

参考:Programmable logic controller on Wikipedia

答案 6 :(得分:1)

所以我在前面加上一个主张:任何具有可以表达可计算函数的固定语义的语言都是可实现的。我在这里对冲我的赌注,没有具体说明“语义”的含义,但我通常指的是一种操作语义(大或小步),指称语义或公理语义。

因此,除此之外,还有两个问题:是否存在根本没有任何语义的语言(因此无法通过任何常用方法实现),或者是否有语言可以避开尽管有可能这样做,但是已经实施了吗?

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

前一种情况更有趣。有些语言实际上是逻辑,并且(通过Curry-Howard correspondence)这些逻辑中的证明也是程序(反之亦然)。如果逻辑不是可判定的,或者如果语言包含某些非强规范化的高阶构造(例如一些非常富有表现力的类型系统),那么编译或解释就会变得有些可怕。这可能开始濒临“不编译解释”的领域,但这是一个有点虚假的主张,因为如果我们可以让计算机操纵这些符号,我们就可以编写一个解释器。类似地,如果它没有语义,那么它可能不会在可计算函数上运行 - 它可能只是某种自然语言,不再是“编程语言”。

这一点尤其正确,因为我们可以说Church-Turing thesis表示总是可以为图灵完备语言编写解释器,即使该解释器最终成为另一个图灵机。

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

符合条件的语言可能是没有执行语义的语言,即它们不表示可计算的函数。以下是一些我知道的具有固定语义的语言,这些语言不能直接由解释器执行,也不能将它们编译为其他任何,而不会使用其他信息丰富这些程序

答案 7 :(得分:0)

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

答案 8 :(得分:0)

我的一个同学可以通过APPLE ][之后的所有十六进制代码,在CALL -151上编写一个完整的麦克风输入扬声器程序。所以答案可能是:机器代码。

答案 9 :(得分:0)

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

自然语言,例如英语,具有大量且不断增加的语法,并且不总是以正式表示法(例如BNF)表达,除非您使用精确,精确的形式。我想。

所以我说你不能真正为英语建立一个翻译,许多自然语言,基于它总是在不断发展的事实 - 甚至可以看到聊天语和文本语。

基于此,我不认为所有语言都有编译器。

答案 10 :(得分:-1)

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