
    daf6                         d dl mZmZmZ  G d dej                        Z G d de      Z G d de      Z G d d	e      Z	dd
Z
y)   )grammartokentokenizec                       e Zd Zy)PgenGrammarN)__name__
__module____qualname__     -/root/Python-3.12.4/Lib/lib2to3/pgen2/pgen.pyr   r      s    r   r   c                   |    e Zd Zd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d Zd ZddZd Zd Zy)ParserGeneratorNc                 <   d }|t        |d      }|j                  }|| _        || _        t	        j
                  |j                        | _        | j                          | j                         \  | _
        | _        | |        i | _        | j                          y )Nzutf-8)encoding)openclosefilenamestreamr   generate_tokensreadline	generatorgettokenparsedfasstartsymbolfirst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 )N       )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dfar4   stater.   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   c                 v    | j                   |   }i }t        |      D ]  }| j                  ||      }d||<    |S Nr   )r   r-   r1   )r   r7   r9   rawfirstr   r=   ilabels          r   r5   zParserGenerator.make_first4   sI    ::d#H% 	E__Q.FE&M	 r   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                         rY||j                  v r|j                  |   S |j                  j                  t        j                  |f       ||j                  |<   |S t        j                   |   }||j                  v r|j                  |   S |j                  j                  |d f       ||j                  |<   |S )Nr#   )"')r*   labelsisalphar+   symbol2labelr0   getattrr   
isinstanceinttok_nametokensevalkeywordsNAMEr   opmap)r   r7   r=   rC   itokenvalues         r   r1   zParserGenerator.make_label=   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!AJJ&::e,,HHOOUZZ$78(.AJJu%!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   r8   r9   s      r   r   zParserGenerator.addfirstsetsk   sG    TYY^^%&

 	%D4::%t$	%r   c                 8   | j                   |   }d | j                  |<   |d   }i }i }|j                  j                         D ]  \  }}|| j                   v rd|| j                  v r| j                  |   }|.t	        d|z        | j                  |       | j                  |   }|j                  |       |||<   xd||<   |di||<    i }	|j                         D ]/  \  }}
|
D ]%  }||	v rt	        d|d|d|d|	|         ||	|<   ' 1 || j                  |<   y )Nr#   zrecursion for rule %rr   zrule z is ambiguous; z is in the first sets of z as well as )r   r   r.   r/   
ValueErrorrW   update)r   r9   r;   r<   totalsetoverlapcheckr=   r>   fsetinverseitsfirstsymbols               r   rW   zParserGenerator.calcfirsts   sJ   iio

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

4r   c                    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                  ||      }t        |      }| j                  |       t        |      }|||<   ||}| j                   t        j                  k7  r||fS )N:)typer   	ENDMARKERNEWLINEr   expectrQ   OP	parse_rhsmake_dfar*   simplify_dfa)	r   r   r   r9   azr;   oldlennewlens	            r   r   zParserGenerator.parse   s    ii5??*))u}}, ))u}}, ;;uzz*DKK#&>>#DAqKK&--1%CXFc"XFDJ""# ii5??*$ [  r   c           
         t        |t              sJ t        |t              sJ fd}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 )Nc                     i } | |       |S rV   r   )r<   base
addclosures     r   closurez)ParserGenerator.make_dfa.<locals>.closure   s    Dud#Kr   c                 ~    t        | t              sJ | |v ry d|| <   | j                  D ]  \  }}|	 ||        y rA   )rK   NFAStater.   )r<   rq   r=   r>   rr   s       r   rr   z,ParserGenerator.make_dfa.<locals>.addclosure   sL    eX...}DK$zz +t=tT*+r   )
rK   ru   DFAStatenfasetr.   
setdefaultr-   r/   r0   addarc)r   r6   finishrs   r4   r<   r.   nfastater=   r>   rw   strr   s               @r   ri   zParserGenerator.make_dfa   s   
 %***&(+++		+ 75>623 	(ED!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	enumerater.   r2   r*   r0   )
r   r9   r6   rz   todor:   r<   r=   r>   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   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   r3   r-   r.   r/   r2   )r   r9   r;   r:   r<   r=   r>   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 )NTFr   )r   ranger*   
unifystate)r   r;   changesr:   state_ir   state_jr<   s           r   rj   zParserGenerator.simplify_dfa   s     G'n 	
7qsCH- A!!fG')F%( ?E!,,Wg>?"&	 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_altrT   ru   ry   r   )r   rk   rl   aazzs        r   rh   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_itemrT   rc   r   rQ   STRINGry   )r   rk   br7   ds        r   r   zParserGenerator.parse_alt
  s     1zzZ'yyUZZ66??$DAqHHQKA	 zzZ'yyUZZ66 !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   )rT   r   rh   rf   r   rg   ry   
parse_atom)r   rk   rl   rT   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                  | j                          y )Nr   )z+expected (...) or NAME or STRING, got %s/%s)rT   r   rh   rf   r   rg   rc   rQ   r   ru   ry   raise_error)r   rk   rl   s      r   r   zParserGenerator.parse_atom(  s    ::MMO>>#DAqKK#&a4KYY5::u||44
A
AHHQ

#MMOa4KJ!YY

4r   c                     | j                   |k7  s|8| j                  |k7  r)| j                  d||| j                   | j                         | j                  }| j                          |S )Nzexpected %s/%s, got %s/%s)rc   rT   r   r   )r   rc   rT   s      r   rf   zParserGenerator.expect9  sX    99!2tzzU7J8!5$))TZZA

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#   )
r>   r   r   COMMENTNLrc   rT   beginendline)r   tups     r   r   zParserGenerator.gettokenA  sp    4>>"!f))8;;77t~~&C !f))8;;77AD>	4:tz48TYr   c           
          |r	 ||z  }t	        || j
                  | j                  d   | j                  d   | j                  f      #  dj                  |gt        t        t        |            z         }Y nxY w)N r#   r   )joinr%   mapstrSyntaxErrorr   r   r   )r   msgargss      r   r   zParserGenerator.raise_errorH  sq    =Dj #txx{ $TYY 8 9 	9=hhutCTN';;<s   A .A7rV   )r   r	   r
   r!   r?   r5   r1   r   rW   r   ri   r   r   rj   rh   r   r   r   rf   r   r   r   r   r   r   r   
   s`    2,"\%$<!0"H7 A*"(4"E9r   r   c                       e Zd Zd ZddZy)ru   c                     g | _         y rV   )r.   )r   s    r   r!   zNFAState.__init__S  s	    	r   Nc                     |t        |t              sJ t        |t              sJ | j                  j	                  ||f       y rV   )rK   r   ru   r.   r0   r   r>   r=   s      r   ry   zNFAState.addarcV  s<    }
5# 666$)))		%'r   rV   )r   r	   r
   r!   ry   r   r   r   ru   ru   Q  s    (r   ru   c                   (    e Zd Zd Zd Zd Zd ZdZy)rv   c                     t        |t              sJ t        t        t        |            t              sJ t        |t              sJ || _        ||v | _        i | _        y rV   )rK   dictr>   iterru   rw   r3   r.   )r   rw   finals      r   r!   zDFAState.__init__]  sT    &$'''$tF|,h777%***	r   c                     t        |t              sJ || j                  vsJ t        |t              sJ || j                  |<   y rV   )rK   r   r.   rv   r   s      r   ry   zDFAState.addarce  sB    %%%%DII%%%$)))		%r   c                 p    | j                   j                         D ]  \  }}||u s|| j                   |<    y rV   )r.   r/   )r   oldnewr=   r>   s        r   r   zDFAState.unifystatek  s5    99??, 	'KE4s{#&		% 	'r   c                 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)rK   rv   r3   r*   r.   r/   get)r   otherr=   r>   s       r   __eq__zDFAState.__eq__p  s}    %***<<5==( tyy>S_,99??, 	KE45::>>%00	 r   N)r   r	   r
   r!   ry   r   r   __hash__r   r   r   rv   rv   [  s     '
 Hr   rv   c                 8    t        |       }|j                         S rV   )r   r?   )r   ps     r   generate_grammarr     s    !A>>r   N)zGrammar.txt)r   r   r   r   Grammarr   objectr   ru   rv   r   r   r   r   <module>r      sJ   
 ' &	'// 	E9f E9N
(v (#v #Jr   