如何在 lbnf / bnfc 语法中调试 'no production for X'?

How to debug 'no production for X' in lbnf / bnfc grammar?

在使用 lbnf/bnfc 时,在某些情况下我希望它可以选择性地允许复数形式。但是,它总是说“规则中出现的 'Plural' 没有生产”,我不明白为什么。 相关行如下。 SomeOther 和 SomeToken 基本上都是字符串。

HeadAuthors. Authors::= "AUTHOR" [Plural] ":" SomeOther SomeToken ;

Plural. Plural::= "S" ;

我会跳过列表,将复数变成这样的规则

rules Plural ::= "S" | ;

有关 rules 宏的文档,请参阅 https://bnfc.readthedocs.io/en/latest/lbnf.html#rules

如果你想保留列表,那么你需要给复数一个分隔符或结束符,见这里https://bnfc.readthedocs.io/en/latest/lbnf.html#terminator,否则它不会成为一个列表。你可以只写

terminator Plural "" ;