我可以在RPython中使用哪些前端实现语言?

问题描述:

我对使用RPython工具链实现一种语言的例子看起来很高低,但迄今为止我唯一能找到的是this,其中作者写了一个简单的BF解释器。因为语法非常简单,所以他不需要使用解析器/词法分析器生成器。是否有支持在RPython中开发语言的前端?我可以在RPython中使用哪些前端实现语言?

谢谢!

我不知道任何专门针对RPython的通用词法分析器或解析器生成器。有些用Python输出可能工作,但我不会赌它。但是,rlib.parsing中有一组解析工具。它似乎很有用。 OTOH,文档中有一个警告:据报道,它仍处于开发,实验阶段,目前只用于Prolog解释器。

或者,您可以手动编写前端。 Lexers可能会令人讨厌并且不自然,被授予了权限(您可能能够为Python实现所使用的DFAs撕掉实用程序模块)。但是如果你知道正确的算法,解析器是小菜一碟。我是“自上而下运算符优先级解析器”a.k.a.“普拉特解析器”的忠实粉丝,它非常简单(递归下降),但可以轻松实现所有表达式解析问题(嵌套,优先级,关联性等)。有一个关于它们的信息令人沮丧的一点,但几篇博客已经足够对我来说:

  • 一个由Crockford(不会推荐它,虽然,它抛出一大堆不相关的东西进入分析器,从而掩盖了它) ,
  • 另一个在effbot.org(使用Python),
  • 和第三由可悲的是偶数不太出名的家伙谁的发展自己的语言,Robert Nystrom
+0

感谢您的输入。对于这样一个成功的项目来说,显然有兴趣帮助人们编写他们的语言,而不是有一个简单的lexing/parsing过程,这似乎很奇怪。我将跳入rlib模块 - 因为我的目标范围很小,所以我可能不需要更多。多谢! – zslayton

+0

像http://fdik.org/pyPEG/可以工作吗?我也很有兴趣创建一种语言...... – mamcx

+0

@mamcx在没有检查代码的情况下,我可以告诉你,任何Python库(解析或其他方式)都不会像RPython那样运行,而无需进行严重修改。 – delnan

Alex Gaynor有ported David Beazley的优秀PLY到RPython。它的documentation是相当不错的,他甚至给出了一个talk关于使用它来实现PyCon US 2013的翻译。

+0

第一次使用:Rply与源代码级别的Ply不兼容:需要一些lexergenerator与Ply模板比较import ply.lex as lex ...,并且在用python parser.py启动时调用一些RPython代。 –