ó
ù`]c           @  sˆ   d  d l  m Z d  d l Z d  d l Z d  d l m Z d d d d „ Z d „  Z d „  Z	 d Z
 d d	 „ Z e d
 k r„ e ƒ  n  d S(   iÿÿÿÿ(   t   print_functionN(   t   Nonterminalc         C  sa   | s |  j  ƒ  } n  | d k r- t j } n  t |  | g | ƒ } | r] t j | | ƒ } n  | S(   sm  
    Generates an iterator of all sentences from a CFG.

    :param grammar: The Grammar used to generate sentences.
    :param start: The Nonterminal from which to start generate sentences.
    :param depth: The maximal depth of the generated tree.
    :param n: The maximum number of sentences to return.
    :return: An iterator of lists of terminal tokens.
    N(   t   startt   Nonet   syst   maxsizet   _generate_allt	   itertoolst   islice(   t   grammarR   t   deptht   nt   iter(    (    s2   lib/python2.7/site-packages/nltk/parse/generate.pyt   generate   s    
c         c  s˜   | r yO xH t  |  | d | ƒ D]0 } x' t |  | d | ƒ D] } | | Vq= Wq  WWq” t k
 r‹ } | j d k r… t d ƒ ‚ qŒ ‚  q” Xn g  Vd  S(   Ni    i   s    maximum recursion depth exceededs7   The grammar has rule(s) that yield infinite recursion!!(   t   _generate_oneR   t   RuntimeErrort   message(   R	   t   itemsR
   t   frag1t   frag2t   _error(    (    s2   lib/python2.7/site-packages/nltk/parse/generate.pyR   (   s    
c         c  sv   | d k rr t  | t ƒ rg xQ |  j d | ƒ D]2 } x) t |  | j ƒ  | d ƒ D] } | VqQ Wq. Wqr | g Vn  d  S(   Ni    t   lhsi   (   t
   isinstanceR   t   productionsR   t   rhs(   R	   t   itemR
   t   prodt   frag(    (    s2   lib/python2.7/site-packages/nltk/parse/generate.pyR   :   s    #sš   
  S -> NP VP
  NP -> Det N
  PP -> P NP
  VP -> 'slept' | 'saw' NP | 'walked' PP
  Det -> 'the' | 'a'
  N -> 'man' | 'park' | 'dog'
  P -> 'in' | 'with'
i   c         C  s‡   d d l  m } t d |  f ƒ t t ƒ | j t ƒ } xF t t | d |  ƒd ƒ D]) \ } } t d | d j | ƒ f ƒ qV Wd  S(   Niÿÿÿÿ(   t   CFGs3   Generating the first %d sentences for demo grammar:R   i   s   %3d. %st    (   t   nltk.grammarR   t   printt   demo_grammart
   fromstringt	   enumerateR   t   join(   t   NR   R	   R   t   sent(    (    s2   lib/python2.7/site-packages/nltk/parse/generate.pyt   demoO   s    
(t   __main__(   t
   __future__R    R   R   R   R   R   R   R   R   R    R&   t   __name__(    (    (    s2   lib/python2.7/site-packages/nltk/parse/generate.pyt   <module>
   s   		
