
    Ng	                     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                    dz  dz
  }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.
    N   )startsysgetrecursionlimit_generate_all	itertoolsislice)grammarr   depthniters        O/var/www/html/ai-engine/env/lib/python3.11/site-packages/nltk/parse/generate.pygenerater      sh       }&((A-2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      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	   )   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   9   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/   M   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>r3      s        



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