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

标签 c lisp scheme interpreter self-interpreter

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

最佳答案

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

这个过程与 Lisp 相关联的原因是因为高度清晰的论文 "The Art of the Interpreter" ,其中显示了几个基于 Scheme 的元循环解释器。 (这篇论文是 SICP 一书的核心,它的第四章通过其他人创建了一个延迟评估的方案。)

这在 Lisp、Prolog 和 Forth 等“同象”语言(一种代码可以在运行时作为数据进行操作的语言)中大大更容易做到。

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

关于c - 元循环解释器的确切定义是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1481053/

相关文章:

c - 为什么在创建链接列表节点的函数中传递结构指针参数不起作用?

list - 使用 Scheme 递归添加到列表

clojure - Clojure 中 print 函数的方案等效项

c - fork 后退出子进程

c - 在汇编中实现矩阵 vector 乘法

Emacs 中的 Java 模式参数缩进

lisp - 使用 lisp 简化一个简单的 bool 表达式

Racket 中的 Lambda 解释

lambda - 在Scheme中使用lambda表达式来定义函数的原因是什么?

c++ - 带有截断下溢的字符减法