【问题标题】:What front-end can I use with RPython to implement a language?我可以在 RPython 中使用什么前端来实现一种语言?
【发布时间】:2011-11-14 22:57:10
【问题描述】:

对于使用 RPython 工具链实现一种语言的示例,我已经看了很多,但到目前为止,我唯一能找到的是this,作者在其中编写了一个简单的 BF 解释器。因为语法很简单,所以他不需要使用解析器/词法分析器生成器。是否有支持在 RPython 中开发语言的前端?

谢谢!

【问题讨论】:

    标签: parsing bison lex pypy


    【解决方案1】:

    我不知道有任何专门针对 RPython 的通用词法分析器或解析器生成器。一些带有 Python 输出的 可能 工作,但我不会打赌。不过rlib.parsing中有一套解析工具。看起来还蛮好用的。 OTOH,文档中有一条警告:据报道,它仍处于开发阶段、实验阶段,目前仅用于 Prolog 解释器。

    或者,您可以手动编写前端。词法分析器可能很烦人且不自然,这是理所当然的(您可能会删除 Python 实现使用的 DFA 的实用程序模块)。但是如果你知道正确的算法,解析器就是小菜一碟。我是“自上而下运算符优先级解析器”又名“Pratt 解析器”的超级粉丝,它们相当简单(递归下降),但让所有表达式解析问题(嵌套、优先级、关联性等)变得轻而易举。令人沮丧的是,关于它们的信息很少,但几篇博文对我来说已经足够了:

    • Crockford 的一个(虽然不推荐,它会将大量不相关的东西扔到解析器中,从而使解析器变得模糊),
    • 另一个effbot.org(使用 Python),
    • 第三个是由一个自己开发语言的名不见经传的小伙子写的,Robert Nystrom

    【讨论】:

    • 感谢您的意见。对于一个如此成功的项目,它表示有兴趣帮助人们编写他们的语言而不是简单的词法分析/解析过程,这似乎很奇怪。我将进入 rlib 模块——因为我的目标范围很小,所以我可能不再需要任何东西。非常感谢!
    • fdik.org/pyPEG 这样的东西会起作用吗?我对构建一门语言也很感兴趣......
    • @mamcx 如果不​​检查代码,我可以告诉你,任何 Python 库(解析或其他方式)都不太可能在不经过严格修改的情况下作为 RPython 运行。
    【解决方案2】:

    Alex Gaynor 向 RPython 提供了 ported David Beazley 的出色 PLY。它的documentation 相当不错,他甚至在 PyCon US 2013 上给出了一个 talk 用于实现解释器。

    【讨论】:

    • 第一次尝试使用:Rply 在源代码级别与 Ply 不兼容:与 Ply 模板 import ply.lex as lex 相比需要一些词法分析器,并在使用 python parser.py 启动时调用一些 RPython 生成
    猜你喜欢
    • 2018-08-04
    • 1970-01-01
    • 2011-05-07
    • 1970-01-01
    • 2010-10-30
    • 2014-03-17
    • 2018-02-14
    • 1970-01-01
    • 2010-10-20
    相关资源
    最近更新 更多