generators.ET0LTreeGrammar("tile (b)"):
  (
    { AV0, AV1, BV0, BV1, AVf0, AVf1, BVf0, BVf1, D, Df },
    { startb:24, flipX:1, F+:4, G+:3, ZTileA:0, ZTileB:0, empty:0 },
    {
      {
        D -> AV1 ,
        Df -> AVf1 ,
        AV1 -> F+[ZTileA, ZTileB, AV0,BV0],
        AV0 -> F+[ZTileA, flipX[ZTileA], AVf1,BVf1],
        AVf1 -> F+[flipX[ZTileB], flipX[ZTileA], AVf0,BVf0],
        AVf0 -> F+[flipX[ZTileB], ZTileB, AV1,BV1] ,
        BV1 -> G+[ZTileA, ZTileB, BV0] ,
        BV0 -> G+[ZTileA, flipX[ZTileA], BVf1],
        BVf1 -> G+[flipX[ZTileB], flipX[ZTileA], BVf0],
        BVf0 -> G+[flipX[ZTileB], ZTileB, BV1]
      },
      {
        D -> empty,
        Df -> empty,
        AV1 -> ZTileA,
        AV0 -> ZTileA,
        AVf1 -> flipX[ZTileB],
        AVf0 -> flipX[ZTileB],
        BV1 -> ZTileA,
        BV0 -> ZTileA,
        BVf1 -> flipX[ZTileB],
        BVf0 -> flipX[ZTileB]
      }
    },
    startb[AV1,AV1,AV1,AV1,AV1,D,
           D,D,D,D,D,D,
           AVf1,AVf1,AVf1,AVf1,AVf1,Df,
           Df,Df,Df,Df,Df,Df]
  )
