
    ^h                     |    S SK JrJrJrJr  S SKJr  S SKJr  S SK	J
r
   " S S5      r " S S5      r " S	 S
5      rg)    )OptionalIteratorTupleList)tokenize)parse_version_string)PythonTokenTypesc                   2    \ rS rSrSSS\\   4S jrS rSrg)	NFAArc   next_NFAStatenonterminal_or_stringc                     Xl         X l        g Nnextr   selfr   r   s      T/home/james-whalen/.local/lib/python3.13/site-packages/parso/pgen2/grammar_parser.py__init__NFAArc.__init__   s    #	4I"    c                 T    SU R                   R                  < SU R                  < S3$ )N<z: >)	__class____name__r   r   s    r   __repr__NFAArc.__repr__   s    !^^44d6P6PQQr   r   N)	r   
__module____qualname____firstlineno__r   strr   r    __static_attributes__ r   r   r   r      s"    Jj J# JRr   r   c                   2    \ rS rSrS\4S jrSS jrS rSrg)	r      	from_rulec                     Xl         / U l        g r   )r*   arcs)r   r*   s     r   r   NFAState.__init__   s    '"$	r   Nc                     Ub  [        U[        5      (       d   e[        U[        5      (       d   eU R                  R	                  [        X5      5        g r   )
isinstancer%   r   r,   appendr   r   s      r   add_arcNFAState.add_arc   sF    $,
;PRU0V0VVV%****		=>r   c                 T    SU R                   R                  < SU R                  < S3$ )Nr   z: from r   )r   r   r*   r   s    r   r    NFAState.__repr__!   s    "&.."9"94>>JJr   )r,   r*   r   )	r   r"   r#   r$   r%   r   r1   r    r&   r'   r   r   r   r      s    %# %?
Kr   r   c                   r    \ rS rSrSrS\4S jrS\\\	\	4      4S jr
S rS rS	 rS
 rSS jrS rS rSrg)GrammarParser%   z&
The parser for Python grammar files.
bnf_grammarc                 `    Xl         [        U[        S5      S9U l        U R	                  5         g )Nz3.9)version_info)_bnf_grammarr   r   	generator	_gettoken)r   r8   s     r   r   GrammarParser.__init__)   s+    '!-e4
 	r   returnc              #     #    U R                   [        R                  :w  a  U R                   [        R                  :X  a0  U R	                  5         U R                   [        R                  :X  a  M0  U R                  [        R                  5      U l        U R                  [        R                  S5        U R                  5       u  pU R                  [        R                  5        X4v   U R                   [        R                  :w  a  M  g g 7f)N:)
typer	   	ENDMARKERNEWLINEr=   _expectNAME_current_rule_nameOP
_parse_rhsr   azs      r   parseGrammarParser.parse1   s     ii+555))/777  ))/777 '+ll3C3H3H&ID#LL),,c2??$DALL)112$J ii+555s   A+D/BD	Dc                 V   U R                  5       u  pU R                  S:w  a  X4$ [        U R                  5      n[        U R                  5      n UR	                  U5        UR	                  U5        U R                  S:w  a   X44$ U R                  5         U R                  5       u  pMZ  )N|)_parse_itemsvaluer   rG   r1   r=   )r   rK   rL   aazzs        r   rI   GrammarParser._parse_rhs@   s      "::4K$112B$112B 

1		"::$ 6M  ((* r   c                 v   U R                  5       u  pU R                  [        R                  [        R                  4;   d  U R
                  S;   ag  U R                  5       u  p4UR                  U5        UnU R                  [        R                  [        R                  4;   a  MU  U R
                  S;   a  Mg  X4$ )N)([)_parse_itemrB   r	   rF   STRINGrR   r1   )r   rK   bcds        r   rQ   GrammarParser._parse_itemsT   s    !ii,113C3J3JKK::+##%DAIIaLA ii,113C3J3JKK::+
 tr   c                 v   U R                   S:X  aV  U R                  5         U R                  5       u  pU R                  [        R
                  S5        UR                  U5        X4$ U R                  5       u  pU R                   nUS;  a  X4$ U R                  5         UR                  U5        US:X  a  X4$ X4$ )NrX   ])+*ra   )rR   r=   rI   rE   r	   rH   r1   _parse_atom)r   rK   rL   rR   s       r   rY   GrammarParser._parse_item_   s    ::NN??$DALL),,c2 IIaL4K##%DAJJEJ&tNNIIaL|t tr   c                    U R                   S:X  aE  U R                  5         U R                  5       u  pU R                  [        R
                  S5        X4$ U R                  [        R                  [        R                  4;   aX  [        U R                  5      n[        U R                  5      nUR                  X R                   5        U R                  5         X4$ U R                  SU R                  U R                   5        g )NrW   )z+expected (...) or NAME or STRING, got %s/%s)rR   r=   rI   rE   r	   rH   rB   rF   rZ   r   rG   r1   _raise_errorrJ   s      r   rc   GrammarParser._parse_atomx   s    ::NN??$DALL),,c24KYY+002B2I2IJJ001A001AIIa$NN4KK"ii5r   Nc                 
   U R                   U:w  a'  U R                  SXR                   U R                  5        Ub,  U R                  U:w  a  U R                  SX R                  5        U R                  nU R                  5         U$ )Nzexpected %s, got %s [%s]zexpected %s, got %s)rB   rg   rR   r=   )r   type_rR   s      r   rE   GrammarParser._expect   sj    998#YY

<u!43UJJG

r   c                 Z    [        U R                  5      nUu  U l        U l        U l        ng r   )r   r<   rB   rR   begin)r   tupprefixs      r   r=   GrammarParser._gettoken   s$    4>>"471	4:tz6r   c           
      .   U(       a   X-  nU R                  R                  5       U R                  S   S-
     n[        USU R                  S   U R                  S   U45      e!   SR                  U/[        [        [        U5      5      -   5      n N= f)N r      z	<grammar>)joinlistmapr%   r;   
splitlinesrm   SyntaxError)r   msgargslines       r   rg   GrammarParser._raise_error   s    =j   ++-djjma.?@#TZZ] $

1t 5 6 	6=hhutCTN';;<s   A$ $.B)r;   rG   rm   r<   rB   rR   r   )r   r"   r#   r$   __doc__r%   r   r   r   r   rM   rI   rQ   rY   rc   rE   r=   rg   r&   r'   r   r   r6   r6   %   sQ    C xh&8 9: (	25$86r   r6   N)typingr   r   r   r   parso.python.tokenizer   parso.utilsr   parso.python.tokenr	   r   r   r6   r'   r   r   <module>r      s:    3 2 * , /R RK K{6 {6r   