假设我有一个带有以下标记的语法
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()" }
]
}