Interesting. What I was thinking was you could get the bounded-number-of-generations behavior by defining nonterminals with indices. Like this CFG which would rewrite for K steps.
S -> F_K
F_i -> F_{i-1} + G_{i-1} for i>0
G_i -> F_{i-1} - G_{i-1} for i>0
F_0 -> f
G_0 -> g
This kind of CFG is used for example by https://journals.aps.org/prx/pdf/10.1103/PhysRevX.14.031001