使用 Pest.rs,如何在关键字后允许无意义的空格?

Using Pest.rs, how can I allow non-significant whitespace after a keyword?

我有以下 Pest (https://pest.rs) 语法

name = {ASCII_ALPHA+}
fragment = { "fragment" ~ name }

当我尝试使用它解析 fragment name 时,我得到了这个错误:

 --> 1:9
  |
1 | fragment name
  |         ^---
  |
  = expected name

这个问题是Pest对白色的处理造成的space。首先请注意,如果将额外的 space 添加到 fragment 关键字,则上述方法有效。

name = {ASCII_ALPHA+}
fragment = { "fragment " ~ name }

然而,这不是最理想的解决方案,因为它只能处理一个 space。在我的特定用例中,用户可以在 fragment 关键字和名称之间放置任意数量的 space。原来已经有解决办法了

来自文档:

using the special rule WHITESPACE. If defined, it will be implicitly run, as many times as possible, at every tilde ~ and between every repetition (for example, * and +).

初读时,我错过了这句话的重要部分:“如果已定义”。

这是一个可选的东西,必须在语法中启用一次(定义多次,因为所有 Pest 规则都是无效的)。

WHITESPACE = _{ " " }
name = {ASCII_ALPHA+}
fragment = { "fragment " ~ name }

请注意,前导下划线 _{ " " } 很重要,因为这将其标记为隐式规则,因此当您从 Rust 程序对其进行操作时,它不会显示为 Pair .