I hadn't. The most obvious difference is that I enumerate the strings rather than generate a random one. After taking a quick look, it's also not clear to me that your grammar language supports context-sensitive checks. (e.g. In an sentence grammar, have a check that ensures that the direct object of a sentence can't be the same as the noun if the verb is "distrusts"--i.e. disallow "David distrusts David")