验证以下答案是否正确?

Verify wether the following answer is correct?

我被要求编写在字母表 Z={a,b} 上生成以下语言的语法 M={w | w 中 b 的个数是 3 模 4}

我的答案是

S->bP| bJ | aS

P->bQ | bK | AP

Q->bR | bL | Q

R->bS |电子 | aS

L->e

这行得通吗? 我们可以做得更好吗?

不确定 J、K 和 L 是什么。但是,是的,您可能会做得更好;具有 4 个状态的 DFA 可以识别您的语言,因此肯定存在具有四个非终结符的常规语法:

S -> aS | bR
R -> aR | bT
T -> aT | bU | b
U -> aU | bS | a

这是有效的,因为状态 S、R、T 和 U 对应于看到 b 的 0、1、2 和 3 个实例,模 4。 b 带你到下一个状态。因为状态 u 正在接受我们添加 U -> e,然后以通常的方式删除空产生式。