generators.ET0LTreeGrammar("EDT0L variant"):
  ( { SN, AN, BN, SQN },
    { F:4, F2:3, c1:1, c2:1, c3:1, .:2, G:4, l:1, m:1, d:1, square:0 },
    {
      {
        SN -> F[c1[SN],c2[SQN],c3[AN],c3[SN]],
        AN -> F2[c1[AN],c2[SQN],c3[AN]],
        BN -> G[d[BN],m[BN],m[BN],l[BN]]
      },
      {
        SN -> square,
        AN -> square,
        BN -> square,
        SQN -> square
      }
    },
    (BN . SN)
  )
