Vij*_*hew 18 c lisp scheme interpreter self-interpreter
调用用C编写的C编译器或用PHP metacircular编写的PHP解释器是否合法?这个定义是否仅对特定类型的语言有效,比如Lisp?简而言之,口译员被称为Metacircular应满足的条件是什么?
sil*_*cle 25
metacircular interpreter是一种用同一种语言(可能更基本)实现的解释器.这通常用于尝试向语言添加新功能或创建不同的方言.
这个过程与Lisp相关的原因是由于高度清晰的论文"翻译的艺术",其中显示了几个基于Scheme的元外解释器.(本文是SICP一书的核心,第四章通过其他人创作,例如一个懒惰评估的方案.)
这也极大地更容易在"homoiconic"语言(语言其代码可以被操纵,因此在运行时的数据),如Lisp的,Prolog的,来回做.
至于你的直接问题 - C编译器根本就不是解释器.用自己的语言编写的编译器是"自托管",这是一个类似的属性,但与bootstrapping更相关.PHP中的PHP解释器可能不会计算,因为您可能会在此过程中重新实现一些非常重要的语言.传统的metacircular解释器的主要好处是不需要这样做 - 你可以插入现有的解析器,垃圾收集(如果有的话)等,然后编写一个具有不同语义的顶级求值器.在Scheme或Prolog中,它通常不到一页代码.
以下是维基百科页面中对metacircular的定义:
元循环求值器是自解释器的一种特殊情况,其中父解释器的现有设施直接应用于被解释的源代码,而无需额外的实现.
所以在这两种情况下答案都是否定的: