
    zIfM	                     f    d dl Z d dlZd dlmZ d
dZd Zd ZdZddZe	d	k    r e             dS dS )    N)Nonterminalc                     |s|                                  }|t          j        }t          | |g|          }|rt	          j        ||          }|S )am  
    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maxsize_generate_all	itertoolsislice)grammarr   depthniters        G/var/www/piapp/venv/lib/python3.11/site-packages/nltk/parse/generate.pygenerater      sW       }5'511D )a((K    c              #      K   |rb	 t          | |d         |          D ]%}t          | |dd          |          D ]	}||z   V  
&d S # t          $ r}t          d          |d }~ww xY wg V  d S )Nr      z6The grammar has rule(s) that yield infinite recursion!)_generate_oner   RecursionErrorRuntimeError)r   itemsr   frag1frag2errors         r   r   r   '   s       	&wa%@@ ( (*7E!""IuEE ( (E%-''''(( (  	 	 	H 	 s   =A 
A$AA$c              #      K   |dk    rct          |t                    rG|                     |          D ].}t          | |                                |dz
            E d {V  /d S |gV  d S d S )Nr   )lhsr   )
isinstancer   productionsr   rhs)r   itemr   prods       r   r   r   6   s      qyydK(( 	+++55 I I($((**eaiHHHHHHHHHHI I &LLLLL yr   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                 ,   ddl m} t          d| fz             t          t                     |                    t                    }t          t          ||           d          D ],\  }}t          d|d                    |          fz             -d S )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.   J   s          	
?1$
FGGG	,nn\**GXg333Q77 / /4i1chhtnn--..../ /r   __main__)NNN)r"   )
r	   r   r&   r   r   r   r   r(   r.   __name__ r   r   <module>r2      s        



 $ $ $ $ $ $   .    / / / / zDFFFFF r   