语法中空格方法的默认定义

问题描述 投票:6回答:1

根据the documentation,语法中ws方法的默认定义是匹配零个或多个空白字符,只要该点不在单词内:

regex ws { <!ww> \s* }

这个定义和以下内容有什么区别:

regex ws { \s+ }

我想知道为什么使用零宽度断言<!ww>而不是更简单的\s+?我还注意到默认定义允许匹配零空格,但什么时候会发生?是不是更清楚它是否使用\s+而不是\s*

grammar perl6
1个回答
9
投票

ww断言意味着在当前点的任一侧存在匹配\w的字符。 !反转它,意味着<!ww>匹配:

  • 在字符串的开头
  • 在字符串的末尾
  • 当前位置之前有非\w字符时(例如“+”和“a”之间)
  • 当前位置后面有非\w字符时(例如“a”和“+”之间)

实际上,这意味着永远不会认为在两个单词字符之间出现空格。但是,在非单词字符之间,或在单词字符和非单词字符之间,可以考虑空格。

这遵循我们可能希望解析的许多语言。例如,考虑ab+cd。默认的ws将匹配+的任一侧,但不会,例如,在标识符内匹配。

对于那些不适合的语言,只需要覆盖默认的ws,无论语言需要什么。

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