
    /h	                     `    S SK r S SKrS SKJr  S	S jrS rS rSrS
S jr\	S:X  a  \" 5         gg)    N)Nonterminalc                     U(       d  U R                  5       nUc  [        R                  " 5       S-  S-
  n[        X/U5      nU(       a  [        R
                  " XC5      nU$ )aQ  
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.
   )startsysgetrecursionlimit_generate_all	itertoolsislice)grammarr   depthniters        K/var/www/auris/envauris/lib/python3.13/site-packages/nltk/parse/generate.pygenerater      sU     }&&(A-2'51D(K    c              #      #    U(       a4   [        XS   U5       H  n[        XSS  U5       H	  nX4-   v   M     M!     g / v   g ! [         a  n[        S5      UeS nAff = f7f)Nr      z}The grammar has rule(s) that yield infinite recursion!
Eventually use a lower 'depth', or a higher 'sys.setrecursionlimit()'.)_generate_oner	   RecursionErrorRuntimeError)r   itemsr   frag1frag2errors         r   r	   r	   )   ss     		&wa%@*7!"IuEE-' F A   	H 	s'   A!2A A!
AAAA!c              #      #    US:  aW  [        U[        5      (       a<  U R                  US9 H(  n[        XR	                  5       US-
  5       S h  vN   M*     g U/v   g g  N7f)Nr   )lhsr   )
isinstancer   productionsr	   rhs)r   itemr   prods       r   r   r   9   s_     qydK((+++5(((*eaiHHH 6 &L  Is   AA#A!A#z
  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'
c                     SSK Jn  [        SU 4-  5        [        [        5        UR	                  [        5      n[        [        X S9S5       H$  u  p4[        SUSR                  U5      4-  5        M&     g )Nr   )CFGz3Generating the first %d sentences for demo grammar:)r   r   z%3d. %s )nltk.grammarr$   printdemo_grammar
fromstring	enumerater   join)Nr$   r   r   sents        r   demor.   M   s]     	
?1$
FG	,nn\*GXg3Q7i1chhtn--. 8r   __main__)NNN)   )
r
   r   r&   r   r   r	   r   r(   r.   __name__ r   r   <module>r3      s?     
 $0 / zF r   