【问题标题】:How can I define a parsing grammar in Perl 5?如何在 Perl 5 中定义解析语法?
【发布时间】:2017-03-25 23:33:25
【问题描述】:

我最近决定研究 Perl,当面对 Perl 5 与 6 时,我选择了 5,因为它的成熟度和广泛的支持。

然而,Perl 6 真正让我感兴趣的特性之一是grammar keyword,它允许定义一种可用于解析复杂文本的语言语法。在其他语言中,通常需要外部库或手动解析实现。

既然我已经选择了 Perl 5,那么 Perl 5 中是否有任何粗略的等效于 Perl 6 的 grammar 关键字(或用于构建语法的其他功能),内置或其他?

【问题讨论】:

  • metacpan.org/pod/Regexp::Grammars 是做类似事情的 CPAN 模块之一。作者 Damian Conway 在 SO 上有一些答案,广泛使用它。但不幸的是,您的问题是题外话,因为您要求工具推荐。
  • @simbabque 您可以稍微改写一下这个问题以使其成为主题:“如何定义用于在 Perl 5 中解析文本的语法?”
  • 我知道。但我认为 OP 有足够的经验自己做这件事@ThisSuitIsBlackNot ;)
  • @ThisSuitIsBlackNot Done.

标签: perl parsing raku


【解决方案1】:

没有核心支持,但您可以查看Parse::RecDescentMarpa::R2Regexp::Grammars,或者对于更简单的任务,只需在正则表达式中使用(DEFINE)(请参阅perlre)。

【讨论】:

  • 它们看起来都很不错,尤其是Regexp::Grammars。你介意解释一下(DEFINE)吗? perlre 文档对于初学者来说似乎有点混乱。
  • @OrangeFlash81:例如,请参阅 JSON parser as a single Perl Regex
【解决方案2】:

虽然我自己用的不多,但我相信Acmeist软件Pegex已经接近Perl 6 Grammars了。

【讨论】:

    猜你喜欢
    • 2018-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-05
    • 2015-04-06
    • 2018-06-14
    相关资源
    最近更新 更多