
    daf#,                     @   d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZ d dlm	Z	m
Z
mZmZmZmZmZmZmZ d dlmZmZmZ  ed      Z edd      Z ed	e
d
e	f         ZdedefdZdedefdZde
egee   f   de
egee   f   fdZ G d d      Zdee   ddfdZy)    N)abstractmethod)	AnyCallableClassVarDictOptionalTupleTypeTypeVarcast)Mark	Tokenizerexact_token_typesTPParser)boundF.methodreturnc                 ~      j                   dt        dt        dt        f fd} |_        t        t        |      S )zFor non-memoized functions that we want to be logged.

    (In practice this is only non-leader left-recursive functions.)
    selfargsr   c           
      \   | j                   s	 | g| S dj                  d |D              }d| j                  z  }t        |  d| d| j	                          d       | xj                  dz  c_         | g| }| xj                  dz  c_        t        | d d| d	|d
       |S )N,c              3   2   K   | ]  }t        |        y wNrepr.0args     7/root/Python-3.12.4/Tools/peg_generator/pegen/parser.py	<genexpr>z1logger.<locals>.logger_wrapper.<locals>.<genexpr>        3sc3     (z) .... (looking at )   ... z) --> .200)_verbosejoin_levelprintshowpeek)r   r   argsrfilltreer   method_names        r#   logger_wrapperzlogger.<locals>.logger_wrapper   s    }}$&&&3d33dkk!{m1UG+>t}}>OqQRqd"T"qd;-qvdT]CD    __name__r   objectr   __wrapped__r   r   )r   r6   r5   s   ` @r#   loggerr<      s?    
 //K
Q 
v 
! 
 "(N>""r7   c                 ~      j                   dt        dt        dt        f fd} |_        t        t        |      S )zMemoize a symbol method.r   r   r   c           
         | j                         }|
|f}|| j                  v r1| j                  s%| j                  |   \  }}| j                  |       |S | j                  }dj	                  d |D              }d| j
                  z  }|| j                  vr|r$t        | 
 d| d| j                          d       | xj
                  dz  c_         	| g| }| xj
                  dz  c_        |rt        | d
 d| d	|d
       | j                         }||f| j                  |<   |S | j                  |   \  }}|rt        | 
 d| d	|d
       | j                  |       |S )Nr   c              3   2   K   | ]  }t        |        y wr   r   r    s     r#   r$   z3memoize.<locals>.memoize_wrapper.<locals>.<genexpr>6   r%   r&   r'   r(   z) ... (looking at r)   r*   r+   z) -> r,   )_mark_cacher-   _resetr.   r/   r0   r1   )r   r   markkeyr4   endmarkverboser2   r3   r   r5   s            r#   memoize_wrapperz memoize.<locals>.memoize_wrapper,   sk   zz|K%$++dmm KK,MD'KK K--3d33dkk!dkk!{m1UG3EdmmoEVVWXYKK1K$&&DKK1Kd;-quTDMJKjjlG#W}DKK 	 !KK,MD'{m1UG5FGKK r7   r8   )r   rG   r5   s   ` @r#   memoizerH   (   s=    //Ka  1 : #)O?##r7   c                 d      j                   dt        dt        t           f fd} |_        |S )z'Memoize a left-recursive symbol method.r   r   c                    | j                         }|df}|| j                  v r1| j                  s%| j                  |   \  }}| j                  |       |S | j                  }d| j                  z  }|| j                  vr|r!t        |  d| j                          d       | xj                  dz  c_        d |f| j                  |<   d |}}d}	|rt        | d d| d	|	        	 | j                  |       | xj                  dz  c_        	  |       }
| xj                  dz  c_        | j                         }|	dz  }	|rt        | d d| d	|	 d
|
dd|        |
s|rt        | d|dd|        n3||k  r|rt        | d|dd|        n|
|fx| j                  |<   \  }}| j                  |       |}| xj                  dz  c_        |rt        |  d|dd       |r| j                         }n|}| j                  |       ||f| j                  |<   |S | j                  |   \  }}|rt        |  d|dd       |r| j                  |       |S # | xj                  dz  c_        w xY w)N r'   z ... (looking at r)   r*   r   z
Recursive z at z depth : r,   z to z
Fail with zBailing with z() -> z	 [cached]z [fresh])r@   rA   r-   rB   r/   r0   r1   in_recursive_rule)r   rC   rD   r4   rE   rF   r3   
lastresultlastmarkdepthresultr   r5   s              r#   memoize_left_rec_wrapperz2memoize_left_rec.<locals>.memoize_left_rec_wrapperQ   s   zz|K#$++dmm KK,MD'KK K--dkk!dkk!{m+<T]]_<MQOPKK1K  $TzDKK#'JEjT$wugNOD!&&!+&0#D\F**a/***,
&
;-tD6rRX[_Q``deldmn jd0C4zRSh&mJ3Fd8*UV:@'/IC #7:x+ . KK!DKK1K{m6$iHI**,G$#W}DKK  !KK,MD'{m6$hGHG$G **a/*s   I   I7)r9   r   r   r   r;   )r   rR   r5   s   ` @r#   memoize_left_recrS   M   s8    //KHq HXa[ HT ,2(##r7   c                   R   e Zd ZU dZeeedf      ed<   eeedf      ed<   dddede	fd	Z
ed
efd       Zd
efdZed
eej$                     fd       Zed
eej$                     fd       Zed
eej$                     fd       Zed
eej$                     fd       Zed
eej$                     fd       Zed
eej$                     fd       Zeded
eej$                     fd       Zdeded
eej$                     fdZdedef   ded
efdZdedef   ded
e	fdZd deded
e fdZ!y)!r   zParsing base class..KEYWORDSSOFT_KEYWORDSFrF   	tokenizerrF   c                    || _         || _        d| _        i | _        d| _        | j                   j
                  | _        | j                   j                  | _        y )Nr   )	
_tokenizerr-   r/   rA   rM   rC   r@   resetrB   )r   rX   rF   s      r#   __init__zParser.__init__   sJ    #QS "#__))
oo++r7   r   c                      y r   rK   )r   s    r#   startzParser.start   s    r7   c                     | j                   j                         }|j                  d    d|j                  d    dt        j                  |j
                      d|j                  S )Nr   .r*   rL   :)rZ   peekr^   tokentok_nametypestringr   toks     r#   r1   zParser.showpeek   sS    oo""$))A,q1b1I0J!CJJ>ZZr7   c                     | j                   j                         }|j                  t        j                  k(  r2|j
                  | j                  vr| j                   j                         S y r   )rZ   rb   re   rc   NAMErf   rU   getnextrg   s     r#   namezParser.name   sI    oo""$88uzz!cjj&E??**,,r7   c                     | j                   j                         }|j                  t        j                  k(  r| j                   j                         S y r   )rZ   rb   re   rc   NUMBERrk   rg   s     r#   numberzParser.number   :    oo""$88u||#??**,,r7   c                     | j                   j                         }|j                  t        j                  k(  r| j                   j                         S y r   )rZ   rb   re   rc   STRINGrk   rg   s     r#   rf   zParser.string   rp   r7   c                     | j                   j                         }|j                  t        j                  k(  r| j                   j                         S y r   )rZ   rb   re   rc   OPrk   rg   s     r#   opz	Parser.op   s:    oo""$88uxx??**,,r7   c                     | j                   j                         }|j                  t        j                  k(  r| j                   j                         S y r   )rZ   rb   re   rc   TYPE_COMMENTrk   rg   s     r#   type_commentzParser.type_comment   s<    oo""$88u)))??**,,r7   c                     | j                   j                         }|j                  t        j                  k(  r2|j
                  | j                  v r| j                   j                         S y r   )rZ   rb   re   rc   rj   rf   rV   rk   rg   s     r#   soft_keywordzParser.soft_keyword   sK    oo""$88uzz!cjjD4F4F&F??**,,r7   re   c                    | j                   j                         }|j                  |k(  r| j                   j                         S |t        v r0|j
                  t        |   k(  r| j                   j                         S |t        j                  v r:|j
                  t        j                  |   k(  r| j                   j                         S |j
                  t        j                  k(  r)|j                  |k(  r| j                   j                         S y r   )	rZ   rb   rf   rk   r   re   rc   __dict__rt   )r   re   rh   s      r#   expectzParser.expect   s    oo""$::??**,,$$xx,T22..005>>!xx5>>$//..0088uxxCJJ$$6??**,,r7   resexpectationc                 2    || j                  d|       |S )Nz	expected )make_syntax_error)r   r~   r   s      r#   expect_forcedzParser.expect_forced   s$    ;((9[M)BCC
r7   funcr   c                 R    | j                         } || }| j                  |       |S r   r@   rB   r   r   r   rC   oks        r#   positive_lookaheadzParser.positive_lookahead   s'    zz|4[D	r7   c                 T    | j                         } || }| j                  |       | S r   r   r   s        r#   negative_lookaheadzParser.negative_lookahead   s)    zz|4[Dvr7   messagefilenamec                     | j                   j                         }t        |||j                  d   d|j                  d   z   |j                  f      S )Nr   r*   )rZ   diagnoseSyntaxErrorr^   line)r   r   r   rh   s       r#   r   zParser.make_syntax_error  sC    oo&&(7Xsyy|Q1=Msxx$XYYr7   N)z	<unknown>)"r9   
__module____qualname____doc__r   r	   str__annotations__r   boolr\   r   r   r^   r1   rH   r   tokenize	TokenInforl   ro   rf   ru   rx   rz   r}   r   r   r   r:   r   r   r   r   rK   r7   r#   r   r      s   uS#X''E#s(O,,@E 
,) 
, 
, s  [# [ hx112   !3!34   !3!34   HX//0   hx'9'9:   hx'9'9:   3 8H,>,>#?   3 8HDVDV;W 
xQ'7  1 xV'< V PT Z Z Zk Zr7   parser_classc                    t        j                         }|j                  ddddd       |j                  ddd	d
       |j                  dd       |j                         }|j                  }|dk\  }|dk(  xs |dk\  }t        j
                         }|j                  }|dk(  s|dk(  rd}t        j                  }nt        |j                        }	 t        j                  |j                        }	t        |	|      }
 | |
|      }|j                         }	 |j                         rd}n|j!                         }|t        j                  ur|j%                          	 t        j
                         }|sG|j'                  |      }t)        j*                  |j,                  |d        t        j.                  d       |j0                  st3        |       |r||z
  }|
j5                         }|j6                  d   }|j8                  t:        j<                  k(  r|dz  }t3        d|dd| dd       |rt3        d| dd       |rt3        d||z  dd        n
t3                t3        d!       t3        d"t?        |
j@                        d#       t3        d$t?        |jB                        d#       y y # t"        $ r d}Y w xY w# |t        j                  ur|j%                          w w xY w)%Nz-vz	--verbosecountr   z0Print timing stats; repeat for more debug output)actiondefaulthelpz-qz--quiet
store_truezDon't print the parsed program)r   r   r   zInput file ('-' to use stdin))r             -z<stdin>rW   r*   zTotal time: z.3fz sec; z lines)endz (z bytes)z; z.0fz
 lines/seczCaches sizes:z  token array : 10z        cache : )"argparseArgumentParseradd_argument
parse_argsrF   timer   sysstdinopenr   generate_tokensreadliner   r^   isattytellIOErrorcloser   	tracebackprint_exception	__class__exitquietr0   r   r   re   rc   	ENDMARKERlen_tokensrA   )r   	argparserr   rF   verbose_tokenizerverbose_parsert0r   filetokengenrX   parserr4   endpost1errdtdiagnliness                      r#   simple_parser_mainr   	  s   '')I?   i3S   :,KL!DllG1\1W\N	B}}H2~SyyDMM"++DMM:h0AB	i@||~	{{} syy JJL	B&&x0!!#--d;::d"W!!#!99'aKFRHF6(&9rBBvhg&B/Bv{3'z23Go Y%6%6!7 ;<= V]]!3B 789 !  	F	 syy JJL !s+   AK #J5 5K K KK %K,)r   r   r   rc   r   r   abcr   typingr   r   r   r   r   r	   r
   r   r   pegen.tokenizerr   r   r   r   r   r   r<   rH   rS   r   r   rK   r7   r#   <module>r      s     
      V V V > >CLCx CxS)*#1 # #."$A "$! "$JO$Xqc8A;&67 O$HaS(ST+EU<V O$dgZ gZTD:T&\ D:d D:r7   