你能修改这个 BNF 语法以始终包含奇数只狗吗?

发布于 2024-10-11 02:19:46 字数 337 浏览 5 评论 0原文

你能修改这个 BNF 语法以始终包含奇数只狗吗?

<pets> ::= <pets> <pet> | <pet>
<pet>  ::= dog | cat

“宠物”的示例:

    dog cat
    cat dog
    dog dog dog
    dog dog cat cat dog
    dog cat dog dog

不是“宠物”的示例:

cat
dog cat dog
cat cat

Can you modify this BNF grammar to always contain an odd number of dogs?

<pets> ::= <pets> <pet> | <pet>
<pet>  ::= dog | cat

Examples of 'pets':

    dog cat
    cat dog
    dog dog dog
    dog dog cat cat dog
    dog cat dog dog

Not examples of 'pets':

cat
dog cat dog
cat cat

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

神经大条 2024-10-18 02:19:47

您希望在概念上拥有一个状态机。您处于两种状态之一:您看到了奇数条狗,或者您看到了偶数条狗。

尝试:

// 0 or more cats
<cats> ::= cat <cats> | ""
// 1 dog possibly surrounded by cats
<one_dog> ::= <cats> dog <cats>

<even_dogs> ::= <one_dog> <one_dog> <even_dogs> | <cats>
<odd_dogs> ::= <even_dogs> <one_dog>

它可能需要一些清理工作,但它应该可以工作。关键要注意的是<猫>并且不会匹配任何内容。唯一必须有代币的生产是< one_dog>.

You want to conceptually have a state machine. You are in one of two states: you have seen an odd number of dogs, or you have seen an even number of dogs.

Try:

// 0 or more cats
<cats> ::= cat <cats> | ""
// 1 dog possibly surrounded by cats
<one_dog> ::= <cats> dog <cats>

<even_dogs> ::= <one_dog> <one_dog> <even_dogs> | <cats>
<odd_dogs> ::= <even_dogs> <one_dog>

It could use some cleaning up, but it should work. The key thing to note that < cats > and will match against nothing. The only thing that production that must have a token is < one_dog >.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文