
    }fK                    t    d dl mZ d dlZddlmZ ddlmZmZ ddlm	Z	 ddl
mZ  G d d	      Z G d
 d      Zy)    )annotationsN   )SemanticError)BASE_CLASS_TOKENNode)
synthesizesimplify_listc                  $    e Zd Zd Zd Zd Zd Zy)ASTSemanticsc                    t        |      S Nr	   selfastargss      N/var/www/feuerwehr-webapp/venv/lib/python3.12/site-packages/tatsu/semantics.pygroupzASTSemantics.group       S!!    c                    t        |      S r   r	   r   s      r   elementzASTSemantics.element   r   r   c                    t        |      S r   r	   r   s      r   sequencezASTSemantics.sequence   r   r   c                >    t        |      dk(  rt        |d         S |S )Nr   r   )lenr
   r   s      r   choicezASTSemantics.choice   s!    s8q= Q((
r   N)__name__
__module____qualname__r   r   r   r    r   r   r   r      s    """r   r   c                  6    e Zd ZdZdedfdZd Zd Zd Zd Z	y)ModelBuilderSemanticszIntended as a semantic action for parsing, a ModelBuilderSemantics creates
    nodes using the class name given as first parameter to a grammar
    rule, and synthesizes the class/type if it's not known.
    Nc                f    || _         || _        i | _        |xs dD ]  }| j                  |        y )Nr!   )ctx	base_typeconstructors_register_constructor)r   contextr&   typests        r   __init__zModelBuilderSemantics.__init__!   s9    "" 	*A&&q)	*r   c                8    || j                   |j                  <   |S r   )r'   r   )r   constructors     r   r(   z+ModelBuilderSemantics._register_constructor*   s    2=+../r   c           
         t         }|j                  d      D ]  }	 t        |      }||v r||   }d } |S  |S # t        $ r-}t	        d| dt        |      j                   d|      |d }~ww xY w)N.zCould not find constructor for z (z): )builtinssplitvars	Exceptionr   typer   )r   typenamer.   namer)   es         r   _find_existing_constructorz0ModelBuilderSemantics._find_existing_constructor.   s    NN3' 	D{+
 w%dm"	   #5hZr${BSB\B\A]]`ab`efs   9	A/(A**A/c                    t        |      }|| j                  v r| j                  |   S | j                  |      }|st        ||      }| j	                  |      S r   )strr'   r9   r   r(   )r   r6   baser.   s       r   _get_constructorz&ModelBuilderSemantics._get_constructor>   sZ    x=t((($$X..55h?$Xt4K))+66r   c                   |s|S |d   j                  t              }|d   }|ddd   }| j                  }|D ]  }| j                  ||      } | j                  ||      }		 t	        |	t
              r%t        |	t              r |	d|| j                  d|S  |	|g|dd  i |S # t        $ r}
t        d| d|
      |
d }
~
ww xY w)Nr   )r   r%   r   zCould not call constructor for z: r!   )r2   r   r&   r=   
isinstancer5   
issubclassr   r%   r4   r   )r   r   r   kwargstypespecr6   basesr<   base_r.   r8   s              r   _defaultzModelBuilderSemantics._defaultJ   s    J7==!12A;Ab!~~ 	6E((5D	6 ++Hd;	+t,K1N"CsCFCC"3<ab<V<< 	1(2aUC	s   "4B& B& &	C/CC)
r   r   r    __doc__r   r,   r(   r9   r=   rF   r!   r   r   r#   r#      s)    
  $t4 * 
7r   r#   )
__future__r   r1   
exceptionsr   objectmodelr   r   synthr   utilr
   r   r#   r!   r   r   <module>rM      s-    "  % /    D Dr   