在perl6语法中放宽空格的最佳方法是什么?

时间:2019-06-08 13:58:19

标签: perl6

我想要一个语法,它是否存在空格...我想匹配:

this                '   <foo>    <bar>    <baz>    '
and also this       '<foo><bar><baz>'

这有效:

token TOP     { \s* <foo> \s* <bar> \s* <baz> \s* }

但是,在阅读了有关:sigspace, <。ws> rule 的全部知识之后,我可以想象有一种方法可以做到重复的* \ s。 (即How do I match a hex array in per6 grammar

请问有人可以用perl6语法告诉我更好的方法吗?

NB。这不能通过简单地将 token 声明符更改为 rule 来解决-当我尝试这种方法时,我最终会匹配空间或没有空间的 (但是而不是都是)。

1 个答案:

答案 0 :(得分:11)

也许您的问题是这三个规则“ gotchyas”之一:

  • 如果要在规则的开始匹配空白/令牌边界,请在第一个原子之前 ,您必须明确地提供它(通常带有明确的<.ws>)。

  • 如果要在量化的原子的每个匹配项之间 (例如{{1 }}),您必须在原子和量词(例如<foo>*)之间包含空格。

  • 默认的<foo> *定义为<ws>。如果您希望特定语法中的regex ws { <!ww> \s* }使用不同的模式,请在该语法中定义自己的语法。 (timotimo ++)

有关上述内容的进一步讨论,请参阅我对How do I match a hex array in per6 grammar的更新答复。


以下四个正则表达式匹配您的两个示例字符串:

rule