
    daf	3                     N   d dl mZ d dlZg dZh dZ G d d      Z G d de      Z G d	 d
e      Z G d de      Z G d de      Z	 G d de      Z
 G d de      Z G d de      Z G d de      Zd Zd Z G d d      Z edd      Z G d de      Zd Z G d  d!      Zy)"    )
namedtupleN)builtin_typesparseASTModuleTypeConstructorFieldSumProductVisitorBaseCheckcheck>   intstringconstant
identifierc                       e Zd Zd Zy)r   c                     t         N)NotImplementedErrorselfs    "/root/Python-3.12.4/Parser/asdl.py__repr__zAST.__repr__'   s    !!    N)__name__
__module____qualname__r    r   r   r   r   &   s    "r   r   c                       e Zd Zd Zd Zy)r   c                 ~    || _         || _        |D ci c]  }|j                   |j                   c}| _        y c c}w r   )namedfnsvaluetypes)r   r#   r$   types       r   __init__zModule.__init__+   s2    		8<=dii+=
=s   :c                 $    dj                  |       S )NzModule({0.name}, {0.dfns})formatr   s    r   r   zModule.__repr__0   s    +22488r   Nr   r   r   r(   r   r    r   r   r   r   *   s    >
9r   r   c                       e Zd Zd Zd Zy)r   c                      || _         || _        y r   )r#   r%   )r   r#   r%   s      r   r(   zType.__init__4   s    	
r   c                 $    dj                  |       S )NzType({0.name}, {0.value})r*   r   s    r   r   zType.__repr__8   s    *11$77r   Nr,   r    r   r   r   r   3   s    8r   r   c                       e Zd ZddZd Zy)r	   Nc                 (    || _         |xs g | _        y r   )r#   fields)r   r#   r2   s      r   r(   zConstructor.__init__<   s    	lr   c                 $    dj                  |       S )Nz!Constructor({0.name}, {0.fields})r*   r   s    r   r   zConstructor.__repr__@   s    299$??r   r   r,   r    r   r   r	   r	   ;   s    #@r   r	   c                        e Zd ZddZd Zd Zy)r
   Nc                 <    || _         || _        || _        || _        y r   )r'   r#   seqopt)r   r'   r#   r6   r7   s        r   r(   zField.__init__D   s    		r   c                     | j                   rd}n| j                  rd}nd}dj                  | j                  || j                        S )N*? z{}{} {})r6   r7   r+   r'   r#   r   extras     r   __str__zField.__str__J   s<    88EXXEE		5$))<<r   c                     | j                   rd}n| j                  rd}nd}| j                  dj                  | |      S dj                  | |      S )Nz
, seq=Truez
, opt=Truer;   zField({0.type}{1})zField({0.type}, {0.name}{1}))r6   r7   r#   r+   r<   s     r   r   zField.__repr__T   sO    88 EXX EE99'..tU;;188uEEr   )NFF)r   r   r   r(   r>   r   r    r   r   r
   r
   C   s    =
Fr   r
   c                       e Zd ZddZd Zy)r   Nc                 (    || _         |xs g | _        y r   )r&   
attributes)r   r&   rB   s      r   r(   zSum.__init__a   s    
$*r   c                 ^    | j                   rdj                  |       S dj                  |       S )NzSum({0.types}, {0.attributes})zSum({0.types})rB   r+   r   s    r   r   zSum.__repr__e   s+    ??3::4@@#**400r   r   r,   r    r   r   r   r   `   s    +1r   r   c                       e Zd ZddZd Zy)r   Nc                 (    || _         |xs g | _        y r   )r2   rB   )r   r2   rB   s      r   r(   zProduct.__init__l   s    $*r   c                 ^    | j                   rdj                  |       S dj                  |       S )Nz#Product({0.fields}, {0.attributes})zProduct({0.fields})rD   r   s    r   r   zProduct.__repr__p   s+    ??8??EE(//55r   r   r,   r    r   r   r   r   k   s    +6r   r   c                       e Zd ZdZd Zd Zy)r   zGeneric tree visitor for ASTs.c                     i | _         y r   )cacher   s    r   r(   zVisitorBase.__init__~   s	    
r   c                    |j                   }| j                  j                  |      }|+d|j                  z   }t	        | |d       }|| j                  |<   |r	  ||g|  y y # t
        $ r}t        d|d|        d }~ww xY w)NvisitzError visiting z: )	__class__rJ   getr   getattr	Exceptionprint)r   objargsklassmethmethnamees          r   rL   zVisitorBase.visit   s    zz~~e$</H440D $DJJuS 4    a89s   	A# #	B,A>>BN)r   r   r   __doc__r(   rL   r    r   r   r   r   |   s    (r   r   c                   F     e Zd ZdZ fdZd Zd Zd Zd Zd Z	d Z
 xZS )	r   zgA visitor that checks a parsed ASDL tree for correctness.

    Errors are printed and accumulated.
    c                 T    t         t        |           i | _        d| _        i | _        y )Nr   )superr   r(   conserrorsr&   )r   rM   s    r   r(   zCheck.__init__   s%    eT#%	
r   c                 H    |j                   D ]  }| j                  |        y r   )r$   rL   )r   moddfns      r   visitModulezCheck.visitModule   s     88 	CJJsO	r   c                 b    | j                  |j                  t        |j                               y r   )rL   r%   strr#   )r   r'   s     r   	visitTypezCheck.visitType   s    

4::s499~.r   c                 J    |j                   D ]  }| j                  ||        y r   )r&   rL   )r   sumr#   ts       r   visitSumzCheck.visitSum   s#     	 AJJq$	 r   c                 b   t        |j                        }| j                  j                  |      }||| j                  |<   nJt	        dj                  |             t	        dj                  ||             | xj                  dz  c_        |j                  D ]  }| j                  ||        y )NzRedefinition of constructor {}zDefined in {} and {}   )	rc   r#   r\   rN   rQ   r+   r]   r2   rL   )r   r\   r#   keyconflictfs         r   visitConstructorzCheck.visitConstructor   s    $))n99==%!DIIcN299#>?(//$?@KK1K 	AJJq#	r   c                     t        |j                        }| j                  j                  |g       }|j	                  |       y r   )rc   r'   r&   
setdefaultappend)r   fieldr#   rk   ls        r   
visitFieldzCheck.visitField   s0    %**oJJ!!#r*	r   c                 J    |j                   D ]  }| j                  ||        y r   )r2   rL   )r   prodr#   rm   s       r   visitProductzCheck.visitProduct   s#     	 AJJq$	 r   )r   r   r   rX   r(   ra   rd   rh   rn   rt   rw   __classcell__)rM   s   @r   r   r      s+    / 

 r   r   c                 @   t               }|j                  |        |j                  D ]h  }|| j                  vs|t        vs|xj                  dz  c_        dj                  |j                  |         }t        dj                  ||             j |j                   S )zCheck the parsed ASDL tree for correctness.

    Return True if success. For failure, the errors are printed out and False
    is returned.
    rj   z, zUndefined type {}, used in {})r   rL   r&   r   r]   joinrQ   r+   )r_   vrg   usess       r   r   r      s     	AGGCLWW CCIIa=&8HHMH99QWWQZ(D188DAB	C
 xx<r   c                     t        | d      5 }t               }|j                  |j                               cddd       S # 1 sw Y   yxY w)zFParse ASDL from the given file and return a Module node describing it.zutf-8)encodingN)open
ASDLParserr   read)filenamerm   parsers      r   r   r      s<    	h	) &Q||AFFH%& & &s   )AA
c                   P    e Zd ZdZ ed      \  ZZZZZ	Z
ZZZZZeee	e
eeeeed	Zy)	TokenKindz9TokenKind is provides a scope for enumerated token kinds.   )	=,r:   |()r9   {}N)r   r   r   rX   rangeConstructorIdTypeIdEqualsCommaQuestionPipeAsteriskLParenRParenLBraceRBraceoperator_tabler    r   r   r   r      sF    C',Ry%]FFE8T8VVV %f(@Nr   r   Tokenzkind value linenoc                       e Zd ZddZd Zy)ASDLSyntaxErrorNc                 (    || _         |xs d| _        y )Nz	<unknown>)msglineno)r   r   r   s      r   r(   zASDLSyntaxError.__init__   s    +r   c                 $    dj                  |       S )Nz(Syntax error on line {0.lineno}: {0.msg}r*   r   s    r   r>   zASDLSyntaxError.__str__   s    9@@FFr   r   )r   r   r   r(   r>   r    r   r   r   r      s    ,Gr   r   c              #     K   t        | j                         d      D ]  \  }}t        j                  d|j	                               D ]  }|j                  d      }|d   j                         rO|d   j                         rt        t        j                  ||       Xt        t        j                  ||       v|dd dk(  r 	 t        j                  |   }t        |||         y# t        $ r t        d|z  |      w xY ww)z/Tokenize the given buffer. Yield Token objects.rj   z\s*(\w+|--.*|.)r   N   z--zInvalid operator %s)	enumerate
splitlinesrefinditerstripgroupisalphaisupperr   r   r   r   r   KeyErrorr   )bufr   linemcop_kinds         r   tokenize_asdlr      s     !#.."2A6 0/> 	0A
At||~Q4<<>	 7 7FCC	 0 0!V<<2A$M'66q9G GQ//#	00    M)*?!*CVLLMs   CDC/D/DDc                       e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zej                   ej"                  fZd Zd Zy)r   zParser for ASDL files.

    Create, then call the parse method on a buffer containing ASDL.
    This is a simple recursive descent parser that uses tokenize_asdl for the
    lexing.
    c                      d | _         d | _        y r   )
_tokenizer	cur_tokenr   s    r   r(   zASDLParser.__init__  s    r   c                 b    t        |      | _        | j                          | j                         S )zKParse the ASDL in the buffer and return an AST with a Module root.
        )r   r   _advance_parse_module)r   r   s     r   r   zASDLParser.parse  s(     (,!!##r   c                    | j                  d      r| j                          nCt        dj                  | j                  j
                        | j                  j                        | j                  | j                        }| j                  t        j                         | j                         }| j                  t        j                         t        ||      S )NmodulezExpected "module" (found {}))_at_keywordr   r   r+   r   r%   r   _match	_id_kindsr   r   _parse_definitionsr   r   )r   r#   defss      r   r   zASDLParser._parse_module  s    H%MMO!.55dnn6J6JK%%' ' {{4>>*I$$%&&(I$$%dD!!r   c                 \   g }| j                   j                  t        j                  k(  r| j	                         }| j                  t        j                         | j                         }|j                  t        ||             | j                   j                  t        j                  k(  r|S r   )
r   kindr   r   r   r   r   _parse_typerq   r   )r   r   typenamer'   s       r   r   zASDLParser._parse_definitions  s~    nn!!Y%5%55}}HKK	(()##%DKKXt,-	 nn!!Y%5%55
 r   c                 ^   | j                   j                  t        j                  k(  r| j	                         S t        | j                  t        j                        | j                               g}| j                   j                  t        j                  k(  r~| j                          |j                  t        | j                  t        j                        | j                                      | j                   j                  t        j                  k(  r~t        || j                               S r   )r   r   r   r   _parse_productr	   r   r   _parse_optional_fieldsr   r   rq   r   _parse_optional_attributes)r   sumlists     r   r   zASDLParser._parse_type%  s    >>)"2"22&&(( #4;;y/F/F#G#'#>#>#@B CG..%%)..8{ $I,C,C D $ ; ; = ? @ ..%%)..8 w ? ? ABBr   c                 R    t        | j                         | j                               S r   )r   _parse_fieldsr   r   s    r   r   zASDLParser._parse_product5  s!    t))+T-L-L-NOOr   c                    g }| j                  t        j                         | j                  j                  t        j
                  k(  r| j                         }| j                         \  }}| j                  j                  | j                  v r| j                         nd }|j                  t        ||||             | j                  j                  t        j                  k(  rn_| j                  j                  t        j                  k(  r| j                          | j                  j                  t        j
                  k(  r| j                  t        j                         |S )N)r6   r7   )r   r   r   r   r   r   r    _parse_optional_field_quantifierr   rq   r
   r   r   )r   r2   r   is_seqis_optids         r   r   zASDLParser._parse_fields8  s    I$$%nn!!Y%5%55}}H!BBDNFF%)^^%8%8DNN%J$--/'+ MM%"&fEF~~""i&6&66$$	7 nn!!Y%5%55 	I$$%r   c                 r    | j                   j                  t        j                  k(  r| j	                         S y r   )r   r   r   r   r   r   s    r   r   z!ASDLParser._parse_optional_fieldsH  s,    >>)"2"22%%''r   c                 f    | j                  d      r | j                          | j                         S y )NrB   )r   r   r   r   s    r   r   z%ASDLParser._parse_optional_attributesN  s+    L)MMO%%''r   c                     d\  }}| j                   j                  t        j                  k(  rd}| j	                          ||fS | j                   j                  t        j
                  k(  rd}| j	                          ||fS )N)FFT)r   r   r   r   r   r   )r   r   r   s      r   r   z+ASDLParser._parse_optional_field_quantifierU  so    %>>)"4"44FMMO v~ ^^  I$6$66FMMOv~r   c                     | j                   dn| j                   j                  }	 t        | j                        | _         |S # t        $ r d| _         Y |S w xY w)zf Return the value of the current token and read the next one into
            self.cur_token.
        N)r   r%   nextr   StopIteration)r   cur_vals     r   r   zASDLParser._advance_  sW     ..0$dnn6J6J	"!$//2DN   	"!DN	"s   A AAc                 \   t        |t              r| j                  j                  |v s| j                  j                  |k(  r(| j                  j                  }| j                          |S t        dj                  || j                  j                        | j                  j                        )a  The 'match' primitive of RD parsers.

        * Verifies that the current token is of the given kind (kind can
          be a tuple, in which the kind must match one of its members).
        * Returns the value of the current token
        * Reads in the next token
        zUnmatched {} (found {}))	
isinstancetupler   r   r%   r   r   r+   r   )r   r   r%   s      r   r   zASDLParser._matchl  s     tU#(;(;t(CNN4'NN((EMMOL!)00t~~7J7JK%%' 'r   c                     | j                   j                  t        j                  k(  xr | j                   j                  |k(  S r   )r   r   r   r   r%   )r   keywords     r   r   zASDLParser._at_keyword  s6    ##y'7'77 0$$/	1r   N)r   r   r   rX   r(   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r   r   r   r      sb    $"C P 	 (()*:*:;I'&1r   r   )collectionsr   r   __all__r   r   r   r   r	   r
   r   r   objectr   r   r   r   r   r   rP   r   r   r   r    r   r   <module>r      s   , # 	@ <" "9S 983 8@# @FC F:	1# 	1	6c 	6"& &) K ) V&&@ @ 	7/0Gi G0,D1 D1r   