我怎样才能告诉pess.rs 扁平化语法?

问题描述

假设我有一个规则,

key = { ASCII_ALPHA ~ ( ASCII_ALPHA | "_" )+ }
value = { (!NEWLINE ~ ANY)+ }
keyvalue = { key ~ "=" ~ value?  }
option = { key }

支持一个

K=V
K=
K

想要设置/取消设置 key 并指定 option,我不喜欢的是 option 的语法,它会产生这样的 AST,

rule: option,span: Span {
    str: "check_local_user",start: 302,end: 318,},inner: [
    Pair {
        rule: key,span: Span {
            str: "check_local_user",inner: [],],

我不喜欢我的 option 有内在的 key。我只是想让 option 具有与 key 相同的语法。在 pest.rs 中是否有任何方法可以编写这样的语法:

inner { myStuff }
outer = { inner }

变得扁平化

outer = { myStuff }

解决方法

使用 Atomic Parsing Token @,我可以做到这一点。

option = @{ key }

记录为,

原子规则调用的任何规则不生成令牌对。