【问题标题】:What does ~ mean inside a Grammar (in Perl 6)?~ 在语法中是什么意思(在 Perl 6 中)?
【发布时间】:2015-12-13 02:09:04
【问题描述】:

我在这个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 raku


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2015-12-16
    • 1970-01-01
    • 2018-03-05
    • 2010-12-28
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 2011-09-15
    • 2011-01-22
    相关资源
    最近更新 更多