2016-11-11 24 views
9

我最近决定看看Perl,并且在面对Perl 5和6时,由于其成熟和广泛的支持,我选择了5。如何在Perl 5中定义解析语法?

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

现在我已经解决了Perl 5,Perl 5中是否存在与Perl 6的grammar关键字(或用于构建语法的其他功能)中的任何大致相同的内容?

+0

https://metacpan.org/pod/Regexp::Grammars是一个类似的CPAN模块。作者Damian Conway在SO上有一些答案,广泛使用它。但不幸的是,您的问题是无关紧要的,因为您要求提供工具建议。 – simbabque

+1

@simbabque你可以稍微改写一下这个问题,使它成为话题:“我如何定义一个在Perl 5中解析文本的语法?” – ThisSuitIsBlackNot

+0

我知道。但我认为OP有足够的经验可以做到@ThisSuitIsBlackNot;) – simbabque

回答

10

有没有核心的支持,但你可以看看Parse::RecDescentMarpa::R2Regexp::Grammars,或简单的任务,只是在一个正则表达式使用(DEFINE)(见perlre)。

+0

它们看起来都很好,特别是'Regexp :: Grammars'。请介意一下关于“(DEFINE)”的内容吗? * perlre * docs对于初学者来说似乎有点混淆。 –

+0

@ OrangeFlash81:查看[JSON解析器作为单个Perl正则表达式](http://www.perlmonks.org/?node_id=995856)为例。 – choroba

+0

很酷,谢谢。我会在3分钟内接受。 –

1

尽管我自己并没有太多使用它,但我相信Acmeist软件Pegex已经接近Perl 6语法。