如何在Raku语法令牌中提交到交替分支



假设我有一个带有以下标记的语法

token paragraph {
(
|| <header>
|| <regular>
)
n
}
token header { ^^ '---' '+'**1..5 ' ' N+ }
token regular { N+ }

问题是以CCD_ 1开头的一行将被解析为常规段落;Foo";。在这种情况下,我希望解析失败,即以某种方式"失败";提交";例如,在看到---之后,我想要么成功解析报头,要么完全失败匹配。

我该怎么做?我看到的唯一方法是在<regular>之前使用一个否定的前瞻断言来检查它是否以---开头,但考虑到我实际的语法不止这两个分支,这看起来相当丑陋和不切实际。有更好的方法吗?提前感谢!

如果我正确理解你的问题,你可以这样做:

token header {
^^ '---' [
|| '+'**1..5 ' ' N+
|| { die "match failed near position $/.pos()" }
]
}

最新更新