cfg#

Implements context-free grammars.

>>> s, n, v, vp = Ty('S'), Ty('N'), Ty('V'), Ty('VP')
>>> R0, R1 = Box('R0', vp @ n, s), Box('R1', n @ v , vp)
>>> Jane, loves = Word('Jane', n), Word('loves', v)
>>> cfg = CFG(R0, R1, Jane, loves)
>>> gen = cfg.generate(start=s, max_sentences=2, max_depth=6)
>>> for sentence in gen: print(sentence)
Jane >> loves @ Id(N) >> Jane @ Id(V @ N) >> R1 @ Id(N) >> R0
Jane >> loves @ Id(N) >> Jane @ Id(V @ N) >> R1 @ Id(N) >> R0
>>> gen = cfg.generate(
...     start=s, max_sentences=2, max_depth=6,
...     remove_duplicates=True, max_iter=10)
>>> for sentence in gen: print(sentence)
Jane >> loves @ Id(N) >> Jane @ Id(V @ N) >> R1 @ Id(N) >> R0
>>> sentence.draw(figsize=(4, 3),\
... path='docs/_static/imgs/grammar/cfg-example.png')
../_images/cfg-example.png