Perl 6是否对使用顺序变更做出任何承诺?

问题描述 投票:5回答:2

考虑到/(foo|foobar|foobaz)/这样的替代,Perl 6是否对将首先使用这三个中的哪一个作出任何保证,如果在文档中的哪个地方做出了保证,则做出了该保证?

请参阅相关问题Does Perl currently (5.8 and 5.10) make any promises about the order alternations will be used?

perl6 rules raku
2个回答
13
投票

仅需说几句话:备选方案应(至少在概念上)并行匹配,最长的匹配获胜。如果要顺序交替,可以使用双杠||,它保证从左到右的顺序就像|。在Perl 5正则表达式中执行。


10
投票

S05

为此,Perl 6中的每个正则表达式都必须能够从其操作中区分出其“纯”模式,并返回其初始令牌模式列表(可传递地包括“纯”所调用的任何子规则的令牌模式)。正则表达式的一部分,但不包含任何子规则超过一次,因为这将涉及自我引用,这是传统正则表达式所不允许的)。使用|的逻辑替代然后从这些列表中选择两个或多个,然后分派到与最长令牌前缀匹配的备用列表。这可能不是词首出现的替代方法。

但是,如果两个备选方案的长度相同,则领带首先会因特异性而断裂。以最长的固定字符串开头的替代方案为赢;也就是说,精确匹配比使用字符类进行的匹配更接近。如果这不起作用,则按两种方法之一打平领带。如果替代方法采用不同的语法,则标准MRO(方法解析顺序)将确定首先尝试哪种方法。如果替代项在同一个语法文件中,则文本上较早的替代项优先。 (如果在多个文件中定义了语法规则,则顺序未定义,并且如果首先尝试使用错误的断言,则必须使用显式断言来强制失败。)

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

© www.soinside.com 2019 - 2024. All rights reserved.