Вроде не по теме, но вы можете довольно легко разбить грамматику на подпрограммы, которые вы можете анализировать самостоятельно.
Во-первых, правило E
появляется только в одном месте в RHS, так что вы можететривиально подставьте его и избавьтесь от него, сделав правило S
S→A|C|Z
.Каждый из этих нетерминалов приводит к независимому подъязыку (язык A, состоящий только из правил для A
и B
, язык C с просто C
и D
и язык Z с просто Z
.язык G является просто объединением этих трех подъязыков.
Язык А тривиально регулярен (из-за того, что все нетерминалы находятся в конце RHS правил) и может быть тривиально преобразован в состояние 2E-NFA, который сводится к регулярному выражению (0 | 011 * 10) *
Язык C аналогично сводится к регулярному выражению (1 | 100 * 01) *
Язык Z является единственным нерегулярный подраздел и является языком {0 i 1 i | i ≥ 0}
Объединение этих трех является языком G и на самом деле не имеет каких-либохороший способ описать это, кроме грамматики.