generators.ET0LTreeGrammar("DT0L grammar"):
(
  { kite, square1, square2 },
  { inv:1, o:8, K1:4, K2:3, sq:4, -:0, .:2,
    kite:0, square1:0, square2:0,
    c0-0:1, c001:1, c051:1, c100:1, c150:1, c010:1, c101:1 },
  {
    {
      kite -> K1[c001[kite],c100[kite],c100[square1],c0-0[square2]],
      square1 -> sq[c001[square1],c001[square1],c100[square1],c100[square1]],
      square2 -> sq[c101[square2],c051[square2],c150[square2],c010[square2]]
    },
    {
      kite -> K2[c100[kite],c010[kite],inv[kite]],
      square1 -> sq[c001[square1],c001[square1],c100[square1],c100[square1]],
      square2 -> sq[c101[square2],c051[square2],c150[square2],c010[square2]]
    },
    {
      kite -> K2[c100[kite],c010[kite],-],
      square1 -> sq[c001[square1],c001[square1],c100[square1],c100[square1]],
      square2 -> sq[c101[square2],c051[square2],c150[square2],c010[square2]]
    }
  },
  o[kite,kite,kite,kite,kite,kite,kite,kite]
)
