Исходя из предложения Криса Додда:
L1 = {a^m b^n c^k | m >= n && k = m - n}
= {a^m b^n c^k | m >= n && m = k + n}
= {a^k a^n b^n c^k | m >= n}
Переставляя условие, мы преобразуем вычитание в сложение. Затем мы разделяем a^m
, чтобы сделать структуру грамматики более понятной. Поэтому грамматика:
S := aSc | X | e
X := aXb | e
Правило S
обрабатывает внешнюю часть, а правило X
- внутреннюю.
L2 = {a^m b^n c^k | m < n && k = n - m}
= {a^m b^n c^k | m < n && n = m + k}
= {a^m b^m b^k c^k | m < n}
Аналогичная процедура, хотя структура немного отличается, и в итоге получается что-то вроде:
S' := X'Y'
X' := aX'b | e
Y' := bY'c | e
Объединение их дает грамматику для союза:
S := S' | S''
S' := aS'c | X | e
X := aXb | e
S'' := X'Y'
X' := aX'b | e
Y' := bY'c | e