Сначала докажите, что эта грамматика генерирует все строки из сбалансированных фигурных скобок.
(Подсказка: начните с доказательства, что S -> S{S} | null
генерирует все такие строки.)
Затем просто напишите функцию для генерации всех этих:
function generate(num_opens, num_closes, string_so_far, N)
if (num_opens + num_closes == N)
print string_so_far;
return;
if (num_opens > num_closes)
generate(num_opens, num_closes+1, string_so_far . '}', N)
generate(num_opens+1, num_closes, string_so_far . '{', N)
generate(0, 0, N)
Это может или не может быть в "духе" вопроса.