generators.ET0LTreeGrammar:
( { S00,S0,S,centre },
  { FL:5, C:1, cc:1, F:4, G:4, sq:0, c1:1, c2:1, c3:1, set:1,
    choose1:1, choose2:1, choose3:1, choose4:1, choose5:1, empty:0, .:2,
    T1:1, T2:1, T3:1, T4:1, S1:1, S2:1, S3:1, S4:1, R1:1, R2:1, R3:1, R4:1, DIV:4 },
  {
    % subdivide to create a square grid of blossoms
    {
      S00 -> DIV[S00,S00,S00,S00]
    },
    % translate, scale, and rotate nondeterministically
    {
      S00 -> T1[S00],
      S00 -> T2[S00],
      S00 -> T3[S00],
      S00 -> T4[S00],
      S00 -> S1[S00],
      S00 -> S2[S00],
      S00 -> S3[S00],
      S00 -> S4[S00],
      S00 -> R1[S00],
      S00 -> R2[S00],
      S00 -> R3[S00],
      S00 -> R4[S00],
      S00 -> empty
    },
    % choose destination values for colour
    {
      S00 -> (S0 . centre),
      S0  -> choose1[S0],
      S0  -> choose2[S0],
      S0  -> choose3[S0],
      S0  -> choose4[S0],
      S0  -> choose5[S0],
      centre -> C[cc[centre]]
    },
    % generate petals (choice 1) and centre of blossom
    {
      S0 -> FL[S,S,S,S,S],
      S -> F[c2[S],c2[S],c3[S],c1[S]],
      S -> G[c2[S],c2[S],c3[S],c1[S]],
      centre -> C[cc[centre]]
    },
    % generate petals (choice 2) and centre of blossom
    {
      S0 -> FL[S,S,S,S,S],
      S -> F[c2[S],c2[S],c3[S],c1[S]],
      centre -> C[cc[centre]]
    },
    % generate petals (choice 3) and centre of blossom
    {
      S0 -> FL[S,S,S,S,S],
      S -> G[c2[S],c2[S],c3[S],c1[S]],
      centre -> C[cc[centre]]
    },
    % terminate
    {
      S -> sq,
      centre -> empty
    }
  },
  set[S00],
  1 1 1 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 (4,5,6)+ 7
)
