如何解决使用 Pest.rs,如何向树添加捕获?
假设我有这样的规则,
conf = { SOI ~ ("FOO" ~ "BAR"?) ~ NEWLINE ~ EOI }
这将产生一个不区分“FOO”和“FOOBAR”的树,
Pair {
rule: conf,span: Span {
str: "FOOBAR\n",start: 0,end: 7,},inner: [
Pair {
rule: EOI,span: Span {
str: "",start: 7,inner: [],],}
然而,这不是我想要的,我想要的是这样一棵树,
Pair {
rule: conf,inner: [
Pair {
rule: term,span: Span {
str: "FOOBAR",end: 6,Pair {
rule: EOI,}
我可以用这个制作,
term = { "FOO" ~ "BAR"? }
conf = { SOI ~ term ~ NEWLINE ~ EOI }
但我实际上并不想为此指定 term
,我希望能够内联规范。我想这样做是因为本质上我试图模拟这些条件,ifdef
,ifndef
,elifdef
,elifndef
,else
,and endif
。并且更干净地说,
conditional = {
( "ifndef" | "ifdef" ) ~ conditional_block
( ( "elifndef" | "elifdef" ) ~ conditional_block )?
( "else" ~ conditional_block )?
}
然后对每个ifdef
、ifndef
进行建模;和 elifdef
、elifndef
作为两个单独的标记,只会在那里使用。
_if = { ".ifndef" | ".ifdef" }
_elseif = { ".elifndef" | ".elifdef" }
_else = { ".else" }
_endif = { ".endif" }
conditional = {
_if ~ conditional_block
~ ( _elseif ~ conditional_block )?
~ ( _else ~ conditional_block )?
~ _endif
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。