如何使这个 CFG 无冲突?

How to make this CFG conflict free?

所以我有如下语法,符号(a, b, c, d, !):

S → N!
N → aNd | aMd | aNdN | aMdN
M → bM | cM | b | c

本质上'a'和'd'是括号,中间必须包含一个或多个'b'and/or'c'。可以有多个括号,只要它们仍然包含一个或多个 'b' and/or 'c'。必须以 !.

结尾

所以这个语法有效,但我正在努力使其无冲突。冲突与非终结符 N 和 M 都存在,您可以在其中移动和减少相同的字符。我试图通过引入 epsilons 和新的非终端来解决这个问题,但总是有一些阻碍。

Can reduce 'd' and shift 'd' in non terminal N, also shift/reduce 'b' and 'c' in non terminal M.

从语法派生的字符串示例:

abccdaaccdd!
aaabddd!
aabddaccd!
aabbbddabccbcd!
aacbcdacbdd!
acbbccd!

我认为我的语法没有歧义,因为我没有发现任何错误?

我怎样才能消除这种冲突?

谢谢!

你试过把规则中的bM换成Mb吗?