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

时间:2015-12-13 02:09:05

标签: parsing grammar perl6

我在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搜索GrammarsRegular Expressions搜索了一个~,但我没有在语法中找到任何内容,也没有在正则表达式中找到

cross posted on StackOverflow en español

1 个答案:

答案 0 :(得分:6)

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

它主要执行您发现的操作:使用右括号后面的表达式替换波浪号,并在括号字符之间搜索它。但是,它增加了一些额外的魔力来帮助表达式识别终止括号,并在找不到最终括号时提供更有用的错误消息。因此,通常 通常以相同的方式获得相同的结果,但并非总是如此。