Parsing 你能修改这个BNF语法,使它总是包含奇数只狗吗?

Parsing 你能修改这个BNF语法,使它总是包含奇数只狗吗?,parsing,syntax,bnf,Parsing,Syntax,Bnf,你能修改这个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 您希望在概念上拥有一个状态机。你处于两种状

你能修改这个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

您希望在概念上拥有一个状态机。你处于两种状态中的一种:你见过奇数条狗,或者你见过偶数条狗

尝试:

//0只或更多猫
:=猫
//1只狗可能被猫包围
狗
::=    | 
::=  

它可能需要一些清理,但它应该能工作。需要注意的关键是,和将不匹配。生产中唯一必须有标记的东西是

这更适合于解析后分析或语义谓词。到目前为止,您尝试了什么?把你的想法贴出来,我们可以给你一些帮助。
// 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>