~ 在语法中是什么意思(在 Perl 6 中)?
What does ~ mean inside a Grammar (in Perl 6)?
我在这个 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 中,您可以使用 Grammars 从文本中提取复杂的数据结构。它们就像更上一层楼的正则表达式。)
无论如何,我在 documentation for Grammars and for Regular Expressions 中搜索了一个 ~
,但我没有在语法或正则表达式中找到任何内容。
您可以在此处的设计文档中找到解释:https://github.com/perl6/roast/blob/master/S05-metachars/tilde.t#L6-L81
它主要执行您发现的操作:用右括号后面的表达式替换波浪号,并在括号字符之间搜索它。但是,它添加了一些额外的魔法来帮助表达式识别终止括号,并在未找到最后一个括号时提供更有用的错误消息。因此,无论哪种方式,您通常 都会得到相同的结果,但并非总是如此。
我在这个 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 中,您可以使用 Grammars 从文本中提取复杂的数据结构。它们就像更上一层楼的正则表达式。)
无论如何,我在 documentation for Grammars and for Regular Expressions 中搜索了一个 ~
,但我没有在语法或正则表达式中找到任何内容。
您可以在此处的设计文档中找到解释:https://github.com/perl6/roast/blob/master/S05-metachars/tilde.t#L6-L81
它主要执行您发现的操作:用右括号后面的表达式替换波浪号,并在括号字符之间搜索它。但是,它添加了一些额外的魔法来帮助表达式识别终止括号,并在未找到最后一个括号时提供更有用的错误消息。因此,无论哪种方式,您通常 都会得到相同的结果,但并非总是如此。