【问题标题】:Can Marpa be used to speed up Perl interpreter's parsing?可以用 Marpa 来加速 Perl 解释器的解析吗?
【发布时间】:2013-05-01 21:55:11
【问题描述】:

现有的Marpa 解析器能否用于改进 Perl 5 的解析(例如,替换现有 Perl 解释器的全部或部分解析器)?

我在理论上问,例如忽略诸如“如果可以,将花费 10,000 工时”等实际考虑因素。

如果不是,阻碍使用 Marpa 的具体问题是什么? (同样,最好是理论上的)。

关于为什么这很有趣的背景,Jeffrey Kegler(Marpa 的作者)在 2008 年在 PerlMonks 上发表了一篇颇有名气的文章 "Perl Cannot Be Parsed: A Formal Proof",这篇文章受到了他当时在 Marpa 上的工作的影响。

【问题讨论】:

  • 作为警告,如果可能的话,我更喜欢超越琐碎的“no parser can parse Perl code because you can execute BEGIN code blocks during compile phase”的答案。例如。展示 Marpa 如何以及为什么不能像 perl 的当前解析器似乎基于我的外行理解那样与词法分析器纠缠在一起;或者为什么 - 即使它可以 - Marpa 会不如现有的解析器。
  • 我已将此问题的链接发送到 Jeffrey Kegler 的 Marpa Google 群组,希望他有兴趣根据他的 PerlMonks 旧文章“Perl Cannot Be Parsed: A Formal Proof”进行回答
  • 不试怎么知道?
  • @ikegami - 大概是熟悉 Marpa 和 Perl 解析器的人(理想情况下是 Kegler 先生)可以对适用性做出判断。我感兴趣的是是否存在阻止这种情况的深层架构问题,而不是需要进行一些小的黑客攻击来对齐边缘。
  • 我在评论标题中的问题。

标签: perl parsing marpa


【解决方案1】:

感谢您的提问。 perlmonks 帖子和我当前的解析工作解决了两个不同的相关问题。问题 1:Perl 解析是否可以由图灵机确定?问题 2:实际上,Marpa 可以解析 Perl 5 吗?

您可以比较这两个问题:“每个 C 程序的行为都是可判定的吗?”和“机器 X 可以运行用 C 编译的程序吗?”对于所有实际目的和 X 的合理选择,答案分别是“否”和“是”。所以我的 perlmonks 帖子(更新 here)是关于 Perl 程序的语法是否完全通用的理论问题。请注意,在这种情况下 Perl 解析的可判定性与 Marpa、递归下降、野牛等无关——它与图灵机有关。

问题 2 是“Marpa 可以驱动一个实用的 Perl 5 解析器吗?”当前的 Perl 5 解析器是 LALR,具有单独的词法分析器和大量的程序辅助。 Marpa 比 LALR 更强大,允许单独的词法分析器,并且比 LALR 提供更多的程序代码帮助。我在a recent blog post 中解决了速度问题:“Earley 解析速度够快吗?”我刚才所说的内容非常笼统——但我希望它能够概述我如何证明我对问题 2 的“是”回答是合理的。

Marpa 驱动的 Perl 5 解析器没有任何深层架构问题。在这一点上,这确实是一个舒适度的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-19
    • 2011-01-27
    • 1970-01-01
    • 1970-01-01
    • 2013-07-08
    • 1970-01-01
    • 1970-01-01
    • 2010-10-02
    相关资源
    最近更新 更多