首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >元循环解释器的确切定义是什么?

元循环解释器的确切定义是什么?
EN

Stack Overflow用户
提问于 2009-09-26 11:46:27
回答 4查看 5.7K关注 0票数 19

调用用C编写的C编译器或用PHP元循环编写的PHP解释器合法吗?这个定义是否只对特定类型的语言有效,比如Lisp?简而言之,一个解释器应该满足哪些条件才能被称为Metacircular?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-09-26 12:40:11

元循环解释器是用同一种语言的实现(可能更基本)编写的解释器。这通常是为了尝试向一种语言添加新功能,或者创建一种不同的方言。

这个过程与Lisp相关的原因是因为高度清晰的论文"The Art of the Interpreter",它展示了几个基于方案的元循环解释器。(这篇论文是SICP一书的核心,它的第四章通过创建例如懒惰评估的方案的其他章节来工作。)

在“类图标”语言(一种其代码可以在运行时作为数据操作的语言)中,这也要容易得多,比如Lisp、Prolog和Forth。

关于你直接的问题--C编译器根本就不是一个解释器。用自己的语言编写的编译器是“自托管”的,这是一个类似的属性,但更多的是与引导有关。PHP中的PHP解释器可能不算数,因为您可能会在进程中重新实现大量的语言。传统元循环解释器的主要优点是不需要这样做-您可以插入现有的解析器、垃圾收集(如果有的话)等,只需编写具有不同语义的顶级计算器。在Scheme或Prolog中,它通常不到一页代码。

票数 27
EN

Stack Overflow用户

发布于 2009-09-26 11:58:11

以下是维基百科对metacircular的定义

元循环计算器是自解释器的一个特例,在这种情况下,父解释器的现有工具直接应用于被解释的源代码,而不需要任何额外的实现。

所以在这两种情况下,答案都是否定的:

  • A C编译器不是解释器(计算器)。它将一个程序从一种形式翻译成另一种形式,而不需要执行它。
  • 用PHP编写的一个(假设) PHP解释器可以是一个自解释程序,但不一定是元循环的。
票数 7
EN

Stack Overflow用户

发布于 2009-09-26 13:20:56

为了补充上面的答案:http://www.c2.com/cgi/wiki?MetaCircularEvaluator

用Lisp编写的

Lisp通过调用"eval“实现"eval”。但是在许多其他语言中没有"eval“(如果有,它具有不同的语义),因此必须编写一个全新的语言系统,该系统给出"eval”的详细算法--这在元循环的情况下是不必要的。这就是MetaCircularEvaluators的魔力:它们反映了语言的一种潜在魔力,使它们成为可能。

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

https://stackoverflow.com/questions/1481053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档