o
    ÓmÆi´  ã                   @   sb   d Z ddlmZmZ defdd„Zdedee fdd	„Zeeed
 f Zdee defdd„ZdS )zãParse 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                 C   s   t t| ƒƒS )zäRead 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   © r   ú[/home/kim/smarthome/.venv/lib/python3.10/site-packages/phonemizer/backend/festival/lispy.pyÚparse   s   r	   ÚcharsÚreturnc                 C   s   |   dd¡  dd¡ ¡ S )z5Convert a string of characters into a list of tokens.ú(z ( ú)z ) )ÚreplaceÚsplit)r
   r   r   r   r   *   s   r   ÚExprÚtokensc                 C   sr   t | ƒdkr
tdƒ‚|  d¡}|dkr/g }| d dkr(| t| ƒ¡ | d dks|  d¡ |S |dkr7t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Úexprr   r   r   r   2   s   
ÿ
r   N)	Ú__doc__Útypingr   r   Ústrr	   r   r   r   r   r   r   r   Ú<module>   s   	