Perl 6是否会对订单更改作出任何承诺?

Cha*_*ens 5 rules perl6 raku

考虑到像/(foo|foobar|foobaz)/Perl 6 这样的替代方案,会对三者中的哪一个首先使用做出任何承诺,如果它在文档中的哪个地方做出了承诺呢?

请参阅相关问题Perl目前(5.8和5.10)是否会使用有关订单替换的任何承诺?.

mor*_*itz 13

仅举几个字:替代方案应该并行匹配(至少在概念上),并且最长的匹配获胜.如果你想要顺序交替,你可以使用双栏||,它提供从左到右的顺序,就像| 在Perl 5正则表达式中.


Cha*_*ens 10

S05

为此目的,在Perl 6每正则表达式需要能够从它的动作辨别其"纯"的模式,并返回它的初始令牌图案(传递地包括由"纯"部分调用的任何子规则的令牌模式列表那个正则表达式,但不包括任何一个子规则,因为这将涉及自引用,这在传统的正则表达式中是不允许的).使用|的逻辑交替 然后将这些列表中的两个或多个以及调度发送到与最长令牌前缀匹配的备选项.这可能是也可能不是词汇首先出现的替代方案.

但是,如果两个替代方案在相同长度上匹配,则首先按特异性打破平局.从最长的固定字符串开始的替代方案获胜; 也就是说,精确匹配计数比使用字符类进行的匹配更接近.如果这不起作用,则由两种方法中的一种破坏.如果备选方案使用不同的语法,则标准MRO(方法解析顺序)决定首先尝试哪一个.如果备选方案位于相同的语法文件中,则文本上较早的备选方案优先.(如果在多个文件中定义了语法规则,则该顺序未定义,如果首先尝试错误,则必须使用显式断言强制失败.)

这似乎与Perl 5中的承诺完全不同.