使用 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
.
我有以下 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
.