
    eD<                         d dl Z d dlmZ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 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)
IOAnyDictIteratorListNoReturnOptionalSequenceTupleUnion)grammartokentokenize)GoodTokenInfozos.PathLike[str]c                       e Zd Zy)PgenGrammarN)__name__
__module____qualname__     5/usr/lib/python3/dist-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ef      f   ed<   d&dede
ee      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
e   defd!Z d'd"Z!d#ed$ede"fd%Z#y)(ParserGeneratorfilenamestream	generatorfirstNreturnc                 <   d }|t        |d      }|j                  }|| _        || _        t	        j
                  |j                        | _        | j                          | j                         \  | _
        | _        | |        i | _        | j                          y )Nzutf-8)encoding)opencloser   r   r   generate_tokensreadliner   gettokenparsedfasstartsymbolr   addfirstsets)selfr   r   close_streams       r   __init__zParserGenerator.__init__"   s    >(W5F!<<L !11&//B&*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?   stater9   labelnexts              r   make_grammarzParserGenerator.make_grammar1   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   rB   rD   c                 ~    | j                   |   }|J i }t        |      D ]  }| j                  ||      }d||<    |S N   )r   r8   r<   )r+   rB   rD   rawfirstr   rH   ilabels          r   r@   zParserGenerator.make_firstJ   sU    ::d####H% 	E__Q.FE&M	 r   rH   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   )"'rQ   )r5   labelsisalphar6   symbol2labelr;   getattrr   
isinstanceinttok_nametokensevalsoft_keywordskeywordsNAMEr   opmap)r+   rB   rH   rO   itokenvaluer]   s          r   r<   zParserGenerator.make_labelT   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)r0   r(   r1   r2   r   	calcfirst)r+   rC   rD   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|z        | 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 %rrM   zrule z is ambiguous; z is in the first sets of z as well as )r(   r   r9   
ValueErrorrd   updater:   )r+   rD   rF   rG   totalsetoverlapcheckrH   fsetinverseitsfirstsymbols              r   rd   zParserGenerator.calcfirst   sG   iio

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

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&   expectr^   OP	parse_rhsmake_dfasimplify_dfa)r+   r(   r)   rD   azrF   s          r   r'   zParserGenerator.parse   s    %)ii5??*))u}}, ))u}}, ;;uzz*DKK#&>>#DAqKK&--1%C c"DJ""# ii5??*$ &&&[  r   rA   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 )NrG   r   c                     i } | |       |S rc   r   )rG   base
addclosures     r   closurez)ParserGenerator.make_dfa.<locals>.closure   s    (*Dud#Kr   r   c                 ~    t        | t              sJ | |v ry d|| <   | j                  D ]  \  }}|	 ||        y rL   )rW   r{   r9   )rG   r   rH   rI   r   s       r   r   z,ParserGenerator.make_dfa.<locals>.addclosure   sL    eX...}DK$zz +t=tT*+r   )rW   r{   r   rX   rn   nfasetr9   
setdefaultr8   r:   r;   addarc)r+   rA   r|   r   r?   rG   r9   nfastaterH   rI   r   str   s               @r   rw   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                 D   t        d|       |g}t        |      D ]  \  }}t        d|||u xr dxs d       |j                  D ]X  \  }}||v r|j                  |      }	nt	        |      }	|j                  |       |t        d|	z         It        d||	fz         Z  y )NzDump of NFA for  State(final) z	    -> %d    %s -> %d)print	enumerater9   r=   r5   r;   )
r+   rD   rA   r|   todorE   rG   rH   rI   js
             r   dump_nfazParserGenerator.dump_nfa   s    &w!$ 	7HAu)Q =I CD$zz 	7t4<

4(AD	AKK%=+/*.E1:56	7	7r   rF   c           	         t        d|       t        |      D ]n  \  }}t        d||j                  xr dxs d       t        |j                  j                               D ]$  \  }}t        d||j                  |      fz         & p y )NzDump of DFA forr   r   r   r   )r   r   r>   r8   r9   r:   r=   )r+   rD   rF   rE   rG   rH   rI   s          r   dump_dfazParserGenerator.dump_dfa   s    &!# 	AHAu)Q ;) ArB%ejj&6&6&89 Atnsyy'??@A	Ar   c                     d}|r`d}t        |      D ]L  \  }}t        |dz   t        |            D ],  }||   }||k(  s||= |D ]  }|j                  ||        d} L N |r_y y )NTFrM   )r   ranger5   
unifystate)r+   rF   changesrE   state_ir   state_jrG   s           r   rx   zParserGenerator.simplify_dfa  s     G'n 	
7q1uc#h/ A!!fG')F%( ?E!,,Wg>?"&	 r   )r{   r{   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_altra   r{   r   r&   )r+   ry   rz   aazzs        r   rv   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_itemra   rq   r   r^   STRINGr   )r+   ry   brB   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   )ra   r&   rv   rt   r   ru   r   
parse_atom)r+   ry   rz   ra   s       r   r   zParserGenerator.parse_item5  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                  | j                          t        )Nr   )z+expected (...) or NAME or STRING, got %s/%s)ra   r&   rv   rt   r   ru   rq   r^   r   r{   r   raise_errorAssertionError)r+   ry   rz   s      r   r   zParserGenerator.parse_atomI  s    ::MMO>>#DAqKK#&a4KYY5::u||44
A
AHHQ

#MMOa4K=tyy$** ! r   rq   ra   c                     | j                   |k7  s|8| j                  |k7  r)| j                  d||| j                   | j                         | j                  }| j                          |S )Nzexpected %s/%s, got %s/%s)rq   ra   r   r&   )r+   rq   ra   s      r   rt   zParserGenerator.expect\  sX    99!2tzzU7J+T5$))TZZ 

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   )
rI   r   r   COMMENTNLrq   ra   beginendline)r+   tups     r   r&   zParserGenerator.gettokene  sp    4>>"!f))8;;77t~~&C !f))8;;77AD>	4:tz48TYr   msgargsc           
         |r	 ||z  }t        || j                  | j                  d   | j                  d   | j                  f      # t         $ r/ dj                  |gt        t        t        |            z         }Y uw xY w)N r   rM   )		Exceptionjoinr0   mapstrSyntaxErrorr   r   r   )r+   r   r   s      r   r   zParserGenerator.raise_errorl  st    =Dj #txx{DHHQKSTT  =hhutCTN';;<=s   A 5A?>A?rc   r   N)$r   r   r   Path__annotations__r   r   r   r   r   r	   rX   r-   r   rJ   r@   r<   r*   rd   r   r   r'   rw   r   r
   r   rx   rv   r   r   r   r   rt   r&   r   r   r   r   r   r   r      s   NsGO&&Xd38n--.. x3/@ D k 2K s tCH~ 1"K 1" 1" 1"f%$c $d $@!uT#tJ'7"78#=> !2%j %* %jAQ %N7S 7 7Z 7D 7 AS Ax
'; A AZ 0 T *5!78 "5!78 E"89 (!E"89 !&3 x}  EUs U3 U8 Ur   r   c                   R    e Zd ZU eeee   d f      ed<   ddZd	dd dee   ddfdZ	y)
r{   r9   r   Nc                     g | _         y rc   )r9   )r+   s    r   r-   zNFAState.__init__x  s	    	r   rI   rH   c                     |t        |t              sJ t        |t              sJ | j                  j	                  ||f       y rc   )rW   r   r{   r9   r;   r+   rI   rH   s      r   r   zNFAState.addarc{  s<    }
5# 666$)))		%'r   r   rc   )
r   r   r   r   r   r	   r   r   r-   r   r   r   r   r{   r{   u  s>    
uXc]J./
00(: (hsm (t (r   r{   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)rn   r   r>   r9   finalr   Nc                     t        |t              sJ t        t        t        |            t              sJ t        |t              sJ || _        ||v | _        i | _        y rc   )rW   dictrI   iterr{   r   r>   r9   )r+   r   r   s      r   r-   zDFAState.__init__  sT    &$'''$tF|,h777%***	r   rI   rH   c                     t        |t              sJ || j                  vsJ t        |t              sJ || j                  |<   y rc   )rW   r   r9   rn   r   s      r   r   zDFAState.addarc  sB    %%%%DII%%%$)))		%r   c                 p    | j                   j                         D ]  \  }}||u s|| j                   |<    y rc   )r9   r:   )r+   oldnewrH   rI   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)rW   rn   r>   r5   r9   r:   get)r+   r   rH   rI   s       r   __eq__zDFAState.__eq__  s}    %***<<5==( tyy>S_,99??, 	KE45::>>%00	 r   __hash__)r   rn   r   rn   r   N)r   r   r   r   r{   r   r   boolr   r-   r   r   r   r   r   r   r   rn   rn     s    3M
sJ
tHcM2 8   :  c  d  '
C D  Hcr   rn   r   r   c                 8    t        |       }|j                         S rc   )r   rJ   )r   ps     r   generate_grammarr     s    !A>>r   )zGrammar.txt)ostypingr   r   r   r   r   r   r	   r
   r   r   blib2to3.pgen2r   r   r   blib2to3.pgen2.tokenizer   r   r   Grammarr   r   r{   rn   r   r   r   r   <module>r      s{    
   4 3 1S$$%	'// 	VU VUr
	( 	(& &Rt  r   