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

标签 parsing grammar raku

我找到了波浪号 ~在此 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 中,您可以使用语法从文本中提取复杂的数据结构。它们就像正则表达式更上一层楼。)。
反正我搜了documentationGrammarsRegular Expressions单个~ ,但我在语法和正则表达式中都没有找到任何内容。

cross posted on StackOverflow en español

最佳答案

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

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

关于parsing - ~ 在语法中是什么意思(在 Perl 6 中)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34247264/

相关文章:

c++ - 解析 xml 数据以使其在 Qt 中尽可能通用的最佳方法是什么

sql - ANTLR4 : ordering problem of parser rules for a keyword used in several rules (AND, 之间)

raku - 如何在 Perl 6 中删除变音符号

exception - 从 Perl 6 中的异常处理程序返回值

security - 内容安全策略报告-uri 未被识别

parsing - 为什么自底向上解析比自顶向下解析更常见?

c++ - 如何在 C++ 项目中制作宏解析器

antlr - 动态创建词法分析器规则

c++ - 为什么不能用 LR(1) 解析器解析 C++?

xemacs 的 Raku 模式?