
    rHJj                     d    d Z ddlmZmZ defdZdedee   fdZeeed   f   Zd	ee   defd
Zy)zParse a Scheme expression as a nested list

The main function of this module is lispy.parse, other ones should be
considered private. This module is a dependency of the festival
backend.

From http://www.norvig.com/lispy.html

    )ListUnionprogramc                 *    t        t        |             S )zRead a Scheme expression from a string

    Return a nested list

    Raises an IndexError if the expression is not valid scheme
    (unbalanced parenthesis).

    >>> parse('(+ 2 (* 5 2))')
    ['+', '2', ['*', '5', '2']]

    )_read_from_tokens	_tokenize)r   s    k/Users/ahmed/devFolder/claude-voice/.venv/lib/python3.12/site-packages/phonemizer/backend/festival/lispy.pyparser
      s     Yw/00    charsreturnc                 b    | j                  dd      j                  dd      j                         S )z5Convert a string of characters into a list of tokens.(z ( )z ) )replacesplit)r   s    r	   r   r   *   s)    ==e$,,S%8>>@@r   Exprtokensc                    t        |       dk(  rt        d      | j                  d      }|dk(  r@g }| d   dk7  r#|j                  t	        |              | d   dk7  r#| j                  d       |S |dk(  rt        d      |S )z,Read an expression from a sequence of tokensr   zunexpected EOF while readingr   r   zunexpected ))lenSyntaxErrorpopappendr   )r   tokenexprs      r	   r   r   2   s    
6{a899JJqME|Qi3KK)&12 Qi3

1|.))Lr   N)	__doc__typingr   r   strr
   r   r   r    r   r	   <module>r       sa    13 1AS AT#Y A
 S$v,d3i D r   