Ваш подход хорош - разбейте его на более простые подзадачи, основанные на дизъюнкции в «не равны», а затем присоединитесь к ним:
S -> L | G
Теперь, как нам сделать грамматику, чтобы дать ^ i b ^ j c ^ k, где j
L -> BC
B -> aBb | e
C -> bCc | e
Теперь, как мы можем изменить это, чтобы обеспечить j aB и C -> Cc, чтобы разрешить больше a и c, но не применять их. Мы можем применить хотя бы одно из двух условий, изменив L -> BC, чтобы учесть обе возможности (мы могли бы добавить L -> aBCc для ясности, но это не обязательно).
L -> aBC | BCc
B -> aBb | aB | e
C -> bCc | Cc | e
Для G мы начинаем так же:
G -> DE
D -> aDb | e
E -> bEc | e
Теперь нам нужно принудительно добавить дополнительный b. Мы можем сделать это, разрешив больше b правил для D и E, а затем потребовав это в правиле для G:
G -> DbE
D -> aDb | Db | e
E -> bEc | bE | e
Сочетание этих слов должно дать грамматику для желаемого языка:
S -> L | G
G -> DE
D -> aDb | e
E -> bEc | e
G -> DbE
D -> aDb | Db | e
E -> bEc | bE | e