
    ]j:                         d dl Z d dlmZmZ d dlmZmZmZmZ d dl	m
Z
mZmZ d dlmZ eedf   Z G d de
j"                        Z G d	 d
      Z G d d      Z G d d      ZddedefdZy)    N)IteratorSequence)IOAnyNoReturnUnion)grammartokentokenize)	TokenInfozos.PathLike[str]c                       e Zd Zy)PgenGrammarN)__name__
__module____qualname__     =/root/env/lib/python3.12/site-packages/blib2to3/pgen2/pgen.pyr   r      s    r   r   c                      e Zd ZU eed<   ee   ed<   ee   ed<   e	ee	ee
f   dz  f   ed<   d%dedee   dz  ddfdZdefdZd	ed
ede	e
e
f   fdZd	edede
fdZd&dZd
eddfdZdee	eed   f   ef   fdZddddded   fdZd
eddddddfdZd
eded   ddfdZded   ddfdZded   fdZded   fdZded   fdZded   fdZd%de
d edz  defd!Zd&d"Z d#ede!fd$Z"y)'ParserGeneratorfilenamestream	generatorNfirstreturnc                 6   d }|t        |d      }|j                  }|| _        t        j                  |j	                               | _        | j                          | j                         \  | _        | _	        | |        i | _
        | j                          y )Nzutf-8)encoding)opencloser   r   readr   gettokenparsedfasstartsymbolr   addfirstsets)selfr   r   close_streams       r   __init__zParserGenerator.__init__   s|    >(W5F!<<L !**6;;=9&*jjl#	4##N
r   c           	         t               }t        | j                  j                               }|j	                          |j                  | j                         |j                  d| j                         |D ]8  }dt        |j                        z   }||j                  |<   ||j                  |<   : |D ]  }| j                  |   }g }|D ]  }g }t        |j                  j                               D ]7  \  }	}
|j                  | j                  ||	      |j!                  |
      f       9 |j"                  r"|j                  d|j!                  |      f       |j                  |        |j$                  j                  |       || j'                  ||      f|j                  |j                  |   <    |j                  | j                     |_        |S )Nr      )r   listr#   keyssortremover$   insertlensymbol2numbernumber2symbolsortedarcsitemsappend
make_labelindexisfinalstates
make_firststart)r&   cnamesnameidfar:   stater4   labelnexts              r   make_grammarzParserGenerator.make_grammar&   s   MTYY^^%&

T%%&Q(() 	&Dc!//**A$%AOOD!!%AOOA	&  	OD))D/CF $#)%***:*:*<#= NKE4KKE!:CIIdO LMN==KKCIIe$4 56d#$ HHOOF#-3T__Q5M,NAFF1??4()	O //$"2"23r   r=   r?   c                 ~    | j                   |   }|J i }t        |      D ]  }| j                  ||      }d||<    |S N   )r   r3   r7   )r&   r=   r?   rawfirstr   rC   ilabels          r   r;   zParserGenerator.make_first?   sU    ::d####H% 	E__Q.FE&M	 r   rC   c                    t        |j                        }|d   j                         r||j                  v rX||j                  v r|j                  |   S |j                  j                  |j                  |   d f       ||j                  |<   |S t        t        |d       }t        |t              sJ |       |t        j                  v sJ |       ||j                  v r|j                  |   S |j                  j                  |d f       ||j                  |<   |S |d   dv sJ |       t        |      }|d   j                         r\|d   dk(  r|j                  }n|j                  }||v r||   S |j                  j                  t        j                  |f       |||<   |S t         j"                  |   }||j                  v r|j                  |   S |j                  j                  |d f       ||j                  |<   |S )Nr   )"'rL   )r0   labelsisalphar1   symbol2labelr6   getattrr
   
isinstanceinttok_nametokensevalsoft_keywordskeywordsNAMEr	   opmap)r&   r=   rC   rJ   itokenvaluerX   s          r   r7   zParserGenerator.make_labelI   s   QXX8'ANN*>>%00HHOOQ__U%;T$BC,2ANN5)!M !t4!&#.55./66/QXX%88F++HHOOVTN3'-AHHV$!M 8z)050)KEQx!8s? H zzH H$#E?*HHOOUZZ$78&,HUO!M !u-QXX%88F++HHOOVTN3'-AHHV$!Mr   c                     t        | j                  j                               }|j                          |D ]"  }|| j                  vs| j                  |       $ y N)r+   r#   r,   r-   r   	calcfirst)r&   r>   r?   s      r   r%   zParserGenerator.addfirstsets|   sG    TYY^^%&

 	%D4::%t$	%r   c                    | j                   |   }d | j                  |<   |d   }i }i }|j                  D ]  }|| j                   v rh|| j                  v r| j                  |   }|2t        d|      | j	                  |       | j                  |   }|J |j                  |       |||<   yd||<   |di||<    i }|j                         D ]/  \  }}	|	D ]%  }
|
|v rt        d| d|
 d| d||
          |||
<   ' 1 || j                  |<   y )Nr   zrecursion for rule rH   zrule z is ambiguous; z is in the first sets of z as well as )r#   r   r4   
ValueErrorr_   updater5   )r&   r?   rA   rB   totalsetoverlapcheckrC   fsetinverseitsfirstsymbols              r   r_   zParserGenerator.calcfirst   s^   iio

4A#%ZZ 	1E		!DJJ&::e,D|(+>th)GHHNN5)::e,D+++%&*U#"#',ajU#	1 #%+113 	(OE8" (W$$v_VH =!7,wv.?A  #((	( $

4r   DFAStatec                 d   i }d }| j                   t        j                  k7  r| j                   t        j                  k(  r.| j	                          | j                   t        j                  k(  r.| j                  t        j                        }| j                  t        j                  d       | j                         \  }}| j                  t        j                         | j                  ||      }| j                  |       |||<   ||}| j                   t        j                  k7  r|J ||fS )N:)typer
   	ENDMARKERNEWLINEr!   expectrY   OP	parse_rhsmake_dfasimplify_dfa)r&   r#   r$   r?   azrA   s          r   r"   zParserGenerator.parse   s    "&ii5??*))u}}, ))u}}, ;;uzz*DKK#&>>#DAqKK&--1%C c"DJ""# ii5??*$ &&&[  r   r<   NFAStatefinishc           
      Z   t        |t              sJ t        |t              sJ dt        dt        t        t        f   ffd}dt        dt        t        t        f   dd ffdt	         ||      |      g}|D ]  }i }|j
                  D ]2  }|j                  D ]!  \  }}	|	 |	|j                  |i              # 4 t        |j                               D ]L  \  }}
|D ]  }|j
                  |
k(  s n t	        |
|      }|j                  |       |j                  ||       N  |S )NrB   r   c                     i } | |       |S r^   r   )rB   base
addclosures     r   closurez)ParserGenerator.make_dfa.<locals>.closure   s    (*Dud#Kr   rz   c                 ~    t        | t              sJ | |v ry d|| <   | j                  D ]  \  }}|	 ||        y rG   )rR   rv   r4   )rB   rz   rC   rD   r{   s       r   r{   z,ParserGenerator.make_dfa.<locals>.addclosure   sL    eX...}DK$zz +t=tT*+r   )rR   rv   dictrS   ri   nfasetr4   
setdefaultr3   r5   r6   addarc)r&   r<   rw   r|   r:   rB   r4   nfastaterC   rD   r   str{   s               @r   rr   zParserGenerator.make_dfa   sC   
 %***&(+++	8 	Xs](; 	
	+h 	+d8S=.A 	+d 	+ 75>623 	(E35D!LL E#+== EKE4("4)CDEE "(

!5 (v  &ByyF*& "&&1BMM"%R'(	( r   c                 F   t        d|       |g}t        |      D ]  \  }}t        d|||u xr dxs d       |j                  D ]Y  \  }}||v r|j                  |      }	nt	        |      }	|j                  |       |t        d|	        It        d| d|	        [  y )NzDump of NFA for  State(final) z    ->      -> )print	enumerater4   r8   r0   r6   )
r&   r?   r<   rw   todor@   rB   rC   rD   js
             r   dump_nfazParserGenerator.dump_nfa   s    &w!$ 	1HAu)Q =I CD$zz 	1t4<

4(AD	AKK%=GA3-(DtA3/0	1	1r   rA   c           
         t        d|       t        |      D ]o  \  }}t        d||j                  xr dxs d       t        |j                  j                               D ]%  \  }}t        d| d|j                  |              ' q y )NzDump of DFA forr   r   r   r   r   )r   r   r9   r3   r4   r5   r8   )r&   r?   rA   r@   rB   rC   rD   s          r   dump_dfazParserGenerator.dump_dfa   s    &!# 	;HAu)Q ;) ArB%ejj&6&6&89 ;tUG4		$'89:;	;r   c                     d}|r`d}t        |      D ]L  \  }}t        |dz   t        |            D ],  }||   }||k(  s||= |D ]  }|j                  ||        d} L N |r_y y )NTFrH   )r   ranger0   
unifystate)r&   rA   changesr@   state_ir   state_jrB   s           r   rs   zParserGenerator.simplify_dfa   s     G'n 	
7q1uc#h/ A!!fG')F%( ?E!,,Wg>?"&	 r   )rv   rv   c                    | j                         \  }}| j                  dk7  r||fS t               }t               }|j                  |       |j                  |       | j                  dk(  rU| j	                          | j                         \  }}|j                  |       |j                  |       | j                  dk(  rU||fS )N|)	parse_altr\   rv   r   r!   )r&   rt   ru   aazzs        r   rq   zParserGenerator.parse_rhs  s    ~~1::a4KBBIIaLHHRL**#~~'1		!	 **#
 r6Mr   c                 h   | j                         \  }}| j                  dv s,| j                  t        j                  t        j
                  fv rb| j                         \  }}|j                  |       |}| j                  dv r5| j                  t        j                  t        j
                  fv rb||fS )N)([)
parse_itemr\   rl   r
   rY   STRINGr   )r&   rt   br=   ds        r   r   zParserGenerator.parse_alt!  s     1jjJ&$))

ELL7Q*Q??$DAqHHQKA jjJ&$))

ELL7Q*Q !tr   c                 z   | j                   dk(  rX| j                          | j                         \  }}| j                  t        j
                  d       |j                  |       ||fS | j                         \  }}| j                   }|dvr||fS | j                          |j                  |       |dk(  r||fS ||fS )Nr   ])+*r   )r\   r!   rq   ro   r
   rp   r   
parse_atom)r&   rt   ru   r\   s       r   r   zParserGenerator.parse_item*  s    ::MMO>>#DAqKK#&HHQKa4K??$DAqJJEJ&!tMMOHHQK|!t!tr   c                    | j                   dk(  rG| j                          | j                         \  }}| j                  t        j
                  d       ||fS | j                  t        j                  t        j                  fv rDt               }t               }|j                  || j                          | j                          ||fS | j                  d| j                   d| j                           y )Nr   )z&expected (...) or NAME or STRING, got /)r\   r!   rq   ro   r
   rp   rl   rY   r   rv   r   raise_error)r&   rt   ru   s      r   r   zParserGenerator.parse_atom>  s    ::MMO>>#DAqKK#&a4KYY5::u||44
A
AHHQ

#MMOa4K81TZZLQr   rl   r\   c           
          | j                   |k7  s|@| j                  |k7  r1| j                  d| d| d| j                    d| j                          | j                  }| j                          |S )Nz	expected r   z, got )rl   r\   r   r!   )r&   rl   r\   s      r   ro   zParserGenerator.expectP  sd    99!2tzzU7JyawfTYYKqUV

r   c                 0   t        | j                        }|d   t        j                  t        j                  fv r;t        | j                        }|d   t        j                  t        j                  fv r;|\  | _        | _        | _        | _        | _	        y )Nr   )
rD   r   r   COMMENTNLrl   r\   beginendline)r&   tups     r   r!   zParserGenerator.gettokenW  sp    4>>"!f))8;;77t~~&C !f))8;;77AD>	4:tz48TYr   msgc                     t        |t        | j                        | j                  d   | j                  d   | j                  f      )Nr   rH   )SyntaxErrorstrr   r   r   )r&   r   s     r   r   zParserGenerator.raise_error^  s:    #dmm$dhhqk488A;		J
 	
r   r^   r   N)#r   r   r   Path__annotations__r   r   r   r   r~   rS   r(   r   rE   r;   r7   r%   r_   tupler+   r"   rr   r   r   r   rs   rq   r   r   r   r   ro   r!   r   r   r   r   r   r   r      s   NsGO	""T#s(^d**++ r#w~  k 2K s tCH~ 1"K 1" 1" 1"f%$c $d $@!uT#tJ'7"78#=> !2%j %* %jAQ %N1S 1 1Z 1D 1 ;S ;x
'; ; ;Z 0 T *5!78 "5!78 E"89 (E"89 $3 sTz S E
s 
x 
r   r   c                   R    e Zd ZU eeedz  d f      ed<   ddZd	dd dedz  ddfdZy)
rv   Nr4   r   c                     g | _         y r^   )r4   )r&   s    r   r(   zNFAState.__init__g  s	    	r   rD   rC   c                     |t        |t              sJ t        |t              sJ | j                  j	                  ||f       y r^   )rR   r   rv   r4   r6   r&   rD   rC   s      r   r   zNFAState.addarcj  s<    }
5# 666$)))		%'r   r   r^   )	r   r   r   r+   r   r   r   r(   r   r   r   r   rv   rv   d  s>    
uS4Z+,
--(: (cDj (D (r   rv   c                       e Zd ZU eeef   ed<   eed<   eed f   ed<   deeef   deddfdZ	dd d	eddfd
Z
ddZdedefdZdZeed<   y)ri   r   r9   r4   finalr   Nc                     t        |t              sJ t        t        t        |            t              sJ t        |t              sJ || _        ||v | _        i | _        y r^   )rR   r~   rD   iterrv   r   r9   r4   )r&   r   r   s      r   r(   zDFAState.__init__u  sT    &$'''$tF|,h777%***	r   rD   rC   c                     t        |t              sJ || j                  vsJ t        |t              sJ || j                  |<   y r^   )rR   r   r4   ri   r   s      r   r   zDFAState.addarc}  sB    %%%%DII%%%$)))		%r   c                 p    | j                   j                         D ]  \  }}||u s|| j                   |<    y r^   )r4   r5   )r&   oldnewrC   rD   s        r   r   zDFAState.unifystate  s5    99??, 	'KE4s{#&		% 	'r   otherc                 6   t        |t              sJ | j                  |j                  k7  ryt        | j                        t        |j                        k7  ry| j                  j                         D ]$  \  }}||j                  j                  |      us$ y y)NFT)rR   ri   r9   r0   r4   r5   get)r&   r   rC   rD   s       r   __eq__zDFAState.__eq__  s}    %***<<5==( tyy>S_,99??, 	KE45::>>%00	 r   __hash__)r   ri   r   ri   r   N)r   r   r   r~   rv   r   r   boolr   r(   r   r   r   r   r   r   r   ri   ri   p  s    3M
sJ
tHcM2 8   :  c  d  '
C D  Hcr   ri   r   r   c                 8    t        |       }|j                         S r^   )r   rE   )r   ps     r   generate_grammarr     s    !A>>r   )zGrammar.txt)oscollections.abcr   r   typingr   r   r   r   blib2to3.pgen2r	   r
   r   blib2to3.pgen2.tokenizer   r   r   Grammarr   r   rv   ri   r   r   r   r   <module>r      sq    
 . + + 3 3 -S$$%	'// 	O
 O
d
	( 	(& &Rt  r   