generators.ET0LTreeGrammar("unsymmetric knots"):
( { L, TLR, TL, TR, UD, U, U2, EU, ED  },
  { inner1:0, inner2:0, h-breakline:0, edge:0, corner:0, init:4, left:2, right:2, left-right:3, up:2, down:2,
    up-down:3, rot:1, mir:1, empty:0 },
  {
    { % horizontal extension
      %
      L -> left[UD, L],
      TLR -> left-right[U2, TL, TR],
      TL -> left[U2, TL],
      TR -> right[U2, TR]
    },
    { % vertical extension
      %
      L -> up-down[edge, EU, ED],
      EU -> up[edge, EU],
      ED -> down[edge, ED],
      TL -> up[inner2, TL],
%        TL -> up[h-breakline, TL] weight .1,
%        TL -> up[rot[h-breakline], TL] weight .1,
      TR -> up[inner2, TR],
%        TR -> up[h-breakline, TR] weight .1,
%        TR -> up[rot[h-breakline], TR] weight .1,
      UD -> up-down[inner1, U, rot[rot[U]]],
        UD -> up-down[h-breakline, U, rot[rot[U]]] weight .1,
        UD -> up-down[rot[h-breakline], U, rot[rot[U]]] weight .1,
      U -> up[inner1, U],
        U -> up[h-breakline, U] weight .1,
        U -> up[rot[h-breakline], U] weight .1,
      U2 -> up[inner2, U2],
        U2 -> up[h-breakline, U2] weight .1,
        U2 -> up[rot[h-breakline], U2] weight .1
    },
    { % termination
      %
      ED -> mir[corner],
      EU -> corner,
      U -> inner1,
      U2 -> rot[edge],
      TL -> rot[mir[corner]],
      TR -> rot[corner]
    }
  },
  init[TLR, TLR, L, L],
  1+ 2+ 3
  )
