generators.BSTGrammar("symmetric knots"): extended translation
(
 { 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 },
  { 1, 2 },
  2,
  { 
    table "phase1" {
      table "h" {
        L   -> left[UD<1 1>, L<1 2>],
        UD  -> UD<1 1>,
        TLR -> left-right[U2<1 1>, TL<1 2>, TR<1 2>],
        U2  -> U2<1 1>,
        TL  -> left[U2<1 1>, TL<1 2>],
        TR  -> right[U2<1 1>, TR<1 2>]
      }
    },
    table "phase2" {
      table "v" {
        L -> up-down[edge, EU<1 1>, ED<1 1>],
        EU -> up[edge, EU<1 1>],
        ED -> down[edge, ED<1 1>],
        TL -> up[inner2, TL<1 1>],
        TR -> up[inner2, TR<1 1>],
        UD -> up-down[inner1, U<1 1>, rot[rot[U<1 1>]]],
        U -> up[inner1, U<1 1>],
        U2 -> up[inner2, U2<1 1>]
      } weight 20,
      table "vh" {
        L -> up-down[edge, EU<1 1>, ED<1 1>],
        EU -> up[edge, EU<1 1>],
        ED -> down[edge, ED<1 1>],
        TL -> up[h-breakline, TL<1 1>],
        TR -> up[h-breakline, TR<1 1>],
        UD -> up-down[h-breakline, U<1 1>, rot[rot[U<1 1>]]],
        U -> up[h-breakline, U<1 1>],
        U2 -> up[h-breakline, U2<1 1>]
      },
      table "vv" {
        L -> up-down[edge, EU<1 1>, ED<1 1>],
        EU -> up[edge, EU<1 1>],
        ED -> down[edge, ED<1 1>],
        TL -> up[inner2, TL<1 1>],
        TR -> up[inner2, TR<1 1>],
        UD -> up-down[rot[h-breakline], U<1 1>, rot[rot[U<1 1>]]],
        U -> up[rot[h-breakline], U<1 1>],
        U2 -> up[rot[h-breakline], U2<1 1>]
      }
    } weight .2,
    table "terminate" {
      table "stop" {
        ED -> mir[corner],
        EU -> corner,
        U  -> inner1,
        U2 -> rot[edge],
        TL -> rot[mir[corner]],
        TR -> rot[corner]
      } weight 10,
      table "stopv" {
        ED -> mir[corner],
        EU -> corner,
        U  -> rot[h-breakline],
        U2 -> rot[edge],
        TL -> rot[mir[corner]],
        TR -> rot[corner]
      }
    } weight 0
  },
  init[TLR<1 1>, TLR<1 1>, L<1 2>, L<1 2>],
  "phase1"+ "phase2"+ "terminate"
)