首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >是否可以创建一个独立于原始解释器的“引导”解释器?

是否可以创建一个独立于原始解释器的“引导”解释器?
EN

Software Engineering用户
提问于 2017-05-06 10:50:43
回答 1查看 2.5K关注 0票数 24

根据维基百科,在编写编译器的上下文中,“引导”一词的意思是维基百科,在编写编译器的上下文中,“引导”一词的意思是的说法:

在计算机科学中,引导是用它要编译的源程序语言编写编译器(或汇编程序)的过程。应用此技术将导致自托管编译器。

我能理解这是怎么回事。然而,对于口译员来说,情况似乎有点不同。当然,现在可以编写一个自托管解释器了。这不是我要问的。我实际上想问的是:是否有可能使一个独立于最初的第一个解释器的自我托管的解释器。为了解释我的意思,考虑一下这个例子:

您用X语言编写您的第一个解释器版本,解释器用于您正在创建的一种新语言,名为Y。您首先使用语言X的编译器创建一个可执行文件。现在,您可以使用用X语言编写的解释器来解释用新语言Y编写的文件。

现在,据我所知,要想“引导”你用X语言编写的解释器,你需要用Y语言重写解释器。但这里有一个问题:即使你用Y语言重写了整个解释器,你仍然需要用X语言编写的原始解释器。因为要用Y语言运行解释器,就必须解释源文件。但是,究竟什么才能解释源文件呢?当然,这不可能什么都不是,所以你不得不继续使用第一个解释器。

无论您用Y语言编写了多少新的解释器,您都必须使用用X编写的第一个解释器来解释后续的解释器。这似乎是一个问题,仅仅是因为口译员的性质。

然而,另一方面,这篇维基百科关于口译员的文章实际上谈到了自我托管的解释器。这篇维基百科关于口译员的文章实际上谈到了自我托管的解释器。。以下是一个与此相关的小摘录:

自我解释器是用一种程序设计语言编写的能够自我解释的语言解释器;一个例子是用BASIC编写的基本解释器。自解释器与自托管编译器有关。如果不存在用于解释语言的编译器,则创建自我解释器需要用宿主语言(可能是另一种编程语言或汇编程序)实现该语言。通过拥有这样的第一个解释器,可以引导系统,并且可以用语言本身开发新版本的解释器。

但我仍然不清楚,这到底是如何做到的。看起来,无论如何,您总是会被迫使用用宿主语言编写的解释器的第一个版本。

现在,上面提到的文章指向另一篇文章的链接,其中维基百科给出了一些假设的自托管解释器示例。。然而,仔细研究后发现,许多自托管解释器(特别是一些更常见的解释器,如PyPy或Rubinius)的主要“口译”部分实际上是用其他语言编写的,比如C++或C。

那么我上面描述的可能吗?一个自我托管的解释器能独立于它原来的主机吗?如果是这样的话,究竟是怎样做的呢?

EN

回答 1

Software Engineering用户

发布于 2017-05-06 11:26:11

您正确地注意到,自托管解释器仍然需要一个解释器来运行自己,并且不能像编译器那样引导。

然而,自托管语言与自我托管的解释器并不是一回事.构建解释器通常比构建编译器容易。因此,为了实现一种新的语言,我们可能首先用一种无关的语言实现一个解释器。然后我们可以使用那个解释器来为我们的语言开发一个编译器。因为编译器是被解释的,所以语言是自托管的.然后编译器可以自己编译,然后可以被认为完全引导。

这方面的一个特例是自托管JIT编译运行时。它可以从主机语言的解释器开始,然后使用新语言实现JIT编译,然后JIT编译器可以自己编译。这感觉就像一个自我托管的解释器,但避免了无限解释器问题。这种方法是使用的,但还不是很普遍。

另一个相关的技术是一个可扩展的解释器,在这里我们可以在被解释的语言中创建扩展。例如,我们可以在语言中实现新的操作码。只要我们避免循环依赖,这就可以将基本解释器转换为功能丰富的解释器。

实际发生的情况通常是语言影响自己解析的能力,例如解析时间评估的宏。由于宏语言与正在处理的语言是相同的,它往往比专用或受限的宏语言更丰富的特性。但是,正确地指出,执行扩展的语言与扩展后的语言略有不同。

当使用“真正”的自我托管口译员时,这通常是出于教育或研究的原因。例如,在Scheme中实现一个解释器是教授编程语言的一种很酷的方法(参见SICP)。

票数 7
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/348476

复制
相关文章
python解释器与编译器_pycharm python解释器
什么是Python?Python的起源和发展。Python的优势。
全栈程序员站长
2022/09/27
1.2K0
python解释器与编译器_pycharm python解释器
pycharm指定解释器_pycharm如何设置解释器
弹出下图界面,选择左边红色圈,Project Python -> Project Interpreter
全栈程序员站长
2022/09/25
1.2K0
pycharm指定解释器_pycharm如何设置解释器
解释器模式
解释器模式(Interpreter Pattern)是一种行为型设计模式,用于定义一个语言的文法表示,并提供一个解释器来处理该语言中的语句或表达式。它可以让语法规则和解释逻辑分离,从而轻松地扩展和维护。
码事漫谈
2024/12/20
1260
解释器模式
解释器模式
一、简介 1、解释器模式给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。 2、类成员 (1)AbstractExpression(抽象表达式):声明一个抽象的解释操作,这个接口为抽象语法树中所有的节点所共享。 (2)TerminalExpression(终结符表达式):实现与文法中的终结符相关联的解释操作。实现抽象表达式中所要求的接口,主要是一个interpreter()方法。文法中每一个终结符都有一个具体终结表达式与之相对应。 (3)NonterminalE
用户1215536
2018/02/05
9750
解释器模式
解释器模式
解释器模式Interpreter Pattern提供了评估语言的语法或表达式的方式,它属于行为型模式,这种模式实现了一个表达式接口,该接口解释一个特定的上下文,解释器模式通常被用在SQL解析、符号处理引擎等。
WindRunnerMax
2020/11/24
7250
解释器模式
给定一个语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。(其中语言就是我们需要解释的对象,文法就是这个语言的规律,解释器就是翻译机,通过文法来翻译语言。)
提莫队长
2019/02/21
8100
以问答的方式解释编译器与解释器
编译器是一种计算机程序,它可以将源代码转换成目标代码。编译器通常包括一个词法分析器、一个语法分析器和一个代码生成器。
2024/04/30
1940
以问答的方式解释编译器与解释器
python解释器找不到_python解释器路径
暑假放假两周,两周没写代码,打开PyCharm发现解释器找不到了(Python Interpreter Nothing to show),程序自然也无法运行,如图:
全栈程序员站长
2022/09/26
1.7K0
python解释器找不到_python解释器路径
解释器模式
解释器模式,简单来讲就是一个简版的编译器,如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。解释器模式能对一些较频率执行的文法转换为一种特定的文法类型,不过解释器模式也有其不足,就是如果文法较为复杂的话,就得需要将每一个文法转换成至少一个类,如果包含许多规则的文法可能难以维护和管理。这个时候就需要其他的技术,就是我们最开始提到的语法分析程序或编译器来处理。 解释器模式的基本类结构图很简单,最基本的实现也很简单。 image.png 1 package d
用户1148394
2018/01/09
8990
解释器模式
解释器模式
本科软件工程专业有这么一门课叫《编译原理》,课程内容已经忘了七七八八,但尤为清楚的是上机大作业是拷贝的,课程分数92。
mingmingcome
2023/05/26
3210
解释器模式
Ipython 解释器
通常我们并不使用Python自带的解释器,而是使用另一个比较方便的解释器——ipython解释器,命令行下输入:
py3study
2020/01/03
1.2K0
解释器模式
解释器模式: 解释器模式是类的行为模式。给定一个语言之后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器。客户端可以使用这个解释器来解释这个语言中的句子。 组成 模式所涉及到4个角色: 抽象表达式(Expression)角色:声明一个所有的具体表达式角色都需要实现的抽象接口。这个接口主要是一个interpret()方法,称做解释操作。 终结符表达式(Terminal Expression)角色:实现了抽象表达式角色所要求的接口,主要是一个interpret()方法;文法中的每一个终结符都有一个
xiangzhihong
2018/02/05
8400
解释器模式
Shell解释器
就像不同地区有不同方言一样,不同的Linux/Unix系统使用着不同类型的shell
栗筝i
2022/12/01
1.3K0
解释器模式
@派大星
2023/06/28
1370
解释器模式
实现一个 BrainFuck 解释器
BrainFuck是一门非常简单的图灵完备的编程语言,只有 8 个指令: Brainfuck 包含一个有 30,000 个单元为 0 的数组,和一个数据指针指向当前的单元。
杜逸先
2023/04/13
6610
设置pycharm的python解释器_pycharm安装后无解释器
弹出下图界面,选择左边红色圈,Project Python -> Project Interpreter
全栈程序员站长
2022/09/27
1.1K0
设置pycharm的python解释器_pycharm安装后无解释器
实现一个Brainfuck解释器
Brainfuck 包含一个有 30,000 个单元为 0 的数组,和一个数据指针指向当前的单元。
杜逸先
2023/04/06
5990
pycharm添加解释器失败_pycharm更新python解释器
求大神告知: Pycharm添加Python解释器提示: Cannot set up a python SDK at Python 3.8 (untitled5) (H:\Python\python-3.8.2-amd64.exe). The SDK seems invalid. 并且Python一直出现Modify Setup怎么解决?
全栈程序员站长
2022/09/27
1.5K0
pycharm添加解释器失败_pycharm更新python解释器
java解释器虚拟机-【Java解释器和编译器】解释器和编译器的深入理解
  作为一个看过JVM虚拟机的小白,不懂解释器和编译器之间的区别的,那就是糗大了~
宜轩
2022/12/26
5180
手机python 3.8解释器_Python 3.8 解释器安装教程
Python是一个门面向对象的解释型编程语言,如果要完成Python程序的开发,需要有Python解释器的支持,所以首先需要配置好Python解释器(本教程选择最新的 Python 3.8.3 版本),没有安装的小伙伴,可以跟着一起操作哦。
全栈程序员站长
2022/09/15
1.2K0

相似问题

是否可以为任何动态/脚本/解释器语言制作编译器?

20

理解解释器模式

10

如何简化编译器/解释器?

20

改进AST解释器的方向

20

函数编程:编写一个小型解释器

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文