语法内部(在Perl 6中是什么意思?

问题描述 投票:5回答:1

我在此~中找到了波浪号Config::INI Perl 6 Grammar

token header { ^^ \h* '[' ~ ']' $<text>=<-[ \] \n ]>+ \h* <.eol>+ }

我正在处理的文本中没有波浪号~。我知道'[' ~ ']'很重要,因为省略'['~']'中的任何一个或全部会使语法不再与我的文字匹配。

因为我知道我要匹配的模式,所以我对其进行了更改,以便方括号放在文本表达式的周围,因此:

token header   { ^^ \h* '[' $<text>=<-[ \] \n ]>+ ']' \h* <.eol>+ }

因此,在我看来'[' ~ ']'的确在这里说要匹配一个方括号,然后再期待右方括号。

[无论如何,我知道在正常的Perl 6语法中,波浪号~用于连接字符串。但这显然意味着this Grammar内部有些不同。 (在Perl 6中,可以使用文法从文本中提取复杂的数据结构。它们就像带到下一级的正则表达式一样。)

无论如何,我在documentation中搜索了Grammars,并在Regular Expressions中搜索了一个~,但是我在语法或正则表达式中都找不到。


cross posted on StackOverflow en español

parsing grammar perl6 raku
1个回答
6
投票

您可以在设计文档中找到说明:https://github.com/perl6/roast/blob/master/S05-metachars/tilde.t#L6-L81

它主要完成您所发现的事情:将代字号替换为右括号后的表达式,并在括号字符之间进行搜索。但是,它增加了一些额外的魔力,以帮助表达式识别终止括号,并在找不到最终括号时提供更有用的错误消息。因此,您将通常通过两种方式(但并非总是如此)获得相同的结果。

© www.soinside.com 2019 - 2024. All rights reserved.