我怎样才能让 pest.rs 扁平化语法?
How can I tell pest.rs to flatten grammar?
假设我有这样的规则,
key = { ASCII_ALPHA ~ ( ASCII_ALPHA | "_" )+ }
value = { (!NEWLINE ~ ANY)+ }
keyvalue = { key ~ "=" ~ value? }
option = { key }
这支持一个
K=V
K=
K
想要 set/unset 一个 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",
start: 302,
end: 318,
},
inner: [],
},
],
我不喜欢我的 option
与 key
有内在关系。我只是想让 option
具有与 key
相同的语法。 Pest.rs 中是否有任何方法可以编写这样的语法
inner { myStuff }
outer = { inner }
扁平化为
outer = { myStuff }
使用Atomic Parsing Token @
,我可以做到这一点。
option = @{ key }
记录为,
Any rules called by atomic rules do not generate token pairs.
假设我有这样的规则,
key = { ASCII_ALPHA ~ ( ASCII_ALPHA | "_" )+ }
value = { (!NEWLINE ~ ANY)+ }
keyvalue = { key ~ "=" ~ value? }
option = { key }
这支持一个
K=V
K=
K
想要 set/unset 一个 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",
start: 302,
end: 318,
},
inner: [],
},
],
我不喜欢我的 option
与 key
有内在关系。我只是想让 option
具有与 key
相同的语法。 Pest.rs 中是否有任何方法可以编写这样的语法
inner { myStuff }
outer = { inner }
扁平化为
outer = { myStuff }
使用Atomic Parsing Token @
,我可以做到这一点。
option = @{ key }
记录为,
Any rules called by atomic rules do not generate token pairs.