Dynamic 是否有可以动态修改解释器的解释语言?

Dynamic 是否有可以动态修改解释器的解释语言?,dynamic,language-agnostic,interpreter,Dynamic,Language Agnostic,Interpreter,我一直在想,在这本书中,他开始用英语写作,但在整本书中,他对拼写规则进行了修改,因此,到最后,他可能会得到最好的描述,即伪德语 这让我想知道,是否有一种已建立的语言的解释器,在这种语言中,人们可以访问解释器本身,以便在进行过程中更改语言的语法和结构。例如,通常,if子句是一个关键字;有没有一种语言可以让你即时更改或重新定义它?想象一下用一种语言开始一个控制台会话,最后用另一种语言工作 显然,我们可以编写一个解释器并运行它,也许这样做和修改解释器之间没有具体的区别。我对此不确定。您可以动态地对任何

我一直在想,在这本书中,他开始用英语写作,但在整本书中,他对拼写规则进行了修改,因此,到最后,他可能会得到最好的描述,即伪德语

这让我想知道,是否有一种已建立的语言的解释器,在这种语言中,人们可以访问解释器本身,以便在进行过程中更改语言的语法和结构。例如,通常,
if
子句是一个关键字;有没有一种语言可以让你即时更改或重新定义它?想象一下用一种语言开始一个控制台会话,最后用另一种语言工作

显然,我们可以编写一个解释器并运行它,也许这样做和修改解释器之间没有具体的区别。我对此不确定。您可以动态地对任何给定的解释器进行修改,这可能是有限制的


抛开这些更开放的问题不谈,我只想知道是否有任何已知的口译员允许这样做?或者,也许,这种能力只是程度的问题,我的问题提出得很糟糕。

在某些语言中,在语言语法本身的层面上,这种自我修改行为是可能的,它允许动态创建新的控件结构,以至于依赖于大量宏编程的两个Lisp程序看起来几乎像是用两种不同的语言编写的。Forth在某种程度上类似于必须以问题领域的语言构建程序(通常是某种必须以编程方式精确完成的真实世界交互,如工业机器人)。第四个程序员创建一个解释器,该解释器理解他或她试图解决的问题的特定语言,然后用该语言编写高级程序

一般来说,这里的共同想法是,语言或系统处理并给予用户与其他语言或系统同等的修改能力。例如,每个Lisp程序都是一个Lisp数据结构。这与Java之类的语言形成了对比,在Java中,程序代码和它所处理的数据之间存在着明显的区别


一个相关的主题是of,这是在的时代汇编语言程序员中相当常见的一种技术,并在早期的8位和16位微型计算机世界中有所传播。在这种编程习惯用法中,为了提高速度或节省内存,编写程序时应“意识到”其编译或解释的指令将存储在内存中的位置,并可逐字节更改实际的机器级指令,以影响其动态行为

第四是我能想到的最明显的事情。它是级联的,基于堆栈的,基本原子是一个字。因此,您编写一个字流,并按照写入顺序执行,堆栈被显式操纵,以影响参数传递、结果等。因此,一个简单的Forth程序可能如下所示:

6 3 + .
这是单词
6
3
+
。这两个数字将其值推送到堆栈上。加号从堆栈中弹出最后两项,将它们相加并推送结果。完全停止输出堆栈顶部的任何内容

Forth的一个基本部分是定义自己的词语。由于所有单词都是运行时的一流成员,因此实际上您构建了一个特定于应用程序的语法。定义了相关单词后,您可能会得到如下代码:

red circle draw
那会画一个红色的圆圈

福思解释每一个单词序列,当它遇到它们时。然而,它区分了编译时和普通单词。编译时单词可以做一些事情,比如将一系列单词编译并存储为新词。这相当于用经典的过程语言定义子程序。它们也是实现控制结构的手段。但您也可以定义自己的编译时单词

作为最终结果,Forth程序通常定义其整个语法,包括相关的控制字

您可以阅读。

Prolog是一种,允许以多种方式拒绝元解释器(MIs)。元解释器(解释解释器)是Prolog中常见且有用的本机结构

有关此论点的介绍,请参见。部分执行是一种有趣且实用的技术:

使用MIs实现这些东西所产生的开销可以使用部分评估技术进行编译

是另一种具有可延展语法的连接语言。不过,它的语义更像Lisp而不是Forth。