Python元循环评估器

时间:2011-05-29 00:17:40

标签: python self-interpreter

介绍编程类编写Lisp metacircular评估器的情况并不少见。有没有试图为Python做这个?

是的,我知道Lisp的结构和语法非常适合于元认证评估者等等.Python很可能会更难。我只是好奇是否已经做出这样的尝试。

2 个答案:

答案 0 :(得分:8)

对于那些不知道元循环评估器是什么的人来说,它是一个用要解释的语言编写的解释器。例如:用Lisp编写的Lisp解释器,或者在我们的例子中,用Python编写的Python解释器。有关详细信息,请read this chapter from SICP

作为JBernardo saidPyPy就是一个。但是,PyPy的Python解释器,即元循环评估器,是在名为RPython的Python的静态类型子集中实现的。

您会很高兴知道,从1.5版本开始,PyPy完全符合官方Python 2.7规范。更重要的是:PyPy nearly always beats Python在性能基准测试中。

有关详细信息,请参阅PyPy docsPyPy extra docs

答案 1 :(得分:0)

我想我写了一个here

"""
Metacircular Python interpreter with macro feature.
By Cees Timmerman, 14aug13.
"""

import re
re_macros = re.compile("^#define (\S+) ([^\r\n]+)", re.MULTILINE)

def meta_python_exec(code):
    # Optional meta feature.
    macros = re_macros.findall(code)
    code = re_macros.sub("", code)
    for m in macros:
        code = code.replace(m[0], m[1])

    # Run the code.
    exec(code)

if __name__ == "__main__":
    #code = open("metacircular_overflow.py", "r").read()  # Causes a stack overflow in Python 3.2.3, but simply raises "RuntimeError: maximum recursion depth exceeded while calling a Python object" in Python 2.7.3.
    code = "#define 1 2\r\nprint(1 + 1)"
    meta_python_exec(code)