ó
MšV]c           @   ss   d  d l  m Z d  d l m Z d  d l m Z d d d „  ƒ  YZ d e f d „  ƒ  YZ d e f d	 „  ƒ  YZ	 d
 S(   iÿÿÿÿ(   t   tokenize(   t   parse_version_string(   t   PythonTokenTypest   GrammarParserc           B   sb   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d
 d „ Z
 d „  Z d	 „  Z RS(   s.   
    The parser for Python grammar files.
    c         C   s2   | |  _  t | d t d ƒ ƒ|  _ |  j ƒ  d  S(   Nt   version_infos   3.6(   t   _bnf_grammarR    R   t	   generatort	   _gettoken(   t   selft   bnf_grammar(    (    s9   lib/python2.7/site-packages/parso/pgen2/grammar_parser.pyt   __init__   s
    	c         c   s•   xŽ |  j  t j k r x  |  j  t j k r7 |  j ƒ  q W|  j t j ƒ |  _ |  j t j d ƒ |  j	 ƒ  \ } } |  j t j ƒ | | f Vq Wd  S(   Nt   :(
   t   typeR   t	   ENDMARKERt   NEWLINER   t   _expectt   NAMEt   _current_rule_namet   OPt
   _parse_rhs(   R   t   at   z(    (    s9   lib/python2.7/site-packages/parso/pgen2/grammar_parser.pyt   parse   s    c         C   s­   |  j  ƒ  \ } } |  j d k r+ | | f St |  j ƒ } t |  j ƒ } xS t rž | j | ƒ | j | ƒ |  j d k r Pn  |  j ƒ  |  j  ƒ  \ } } qL W| | f Sd  S(   Nt   |(   t   _parse_itemst   valuet   NFAStateR   t   Truet   add_arcR   (   R   R   R   t   aat   zz(    (    s9   lib/python2.7/site-packages/parso/pgen2/grammar_parser.pyR   (   s    
	
c         C   sr   |  j  ƒ  \ } } xS |  j t j t j f k s? |  j d k rg |  j  ƒ  \ } } | j | ƒ | } q W| | f S(   Nt   (t   [(   R   R    (   t   _parse_itemR   R   R   t   STRINGR   R   (   R   R   t   bt   ct   d(    (    s9   lib/python2.7/site-packages/parso/pgen2/grammar_parser.pyR   <   s    
c         C   sÁ   |  j  d k rU |  j ƒ  |  j ƒ  \ } } |  j t j d ƒ | j | ƒ | | f S|  j ƒ  \ } } |  j  } | d k r† | | f S|  j ƒ  | j | ƒ | d k r³ | | f S| | f Sd  S(   NR    t   ]t   +t   *(   R'   R(   (   R   R   R   R   R   R   R   t   _parse_atom(   R   R   R   R   (    (    s9   lib/python2.7/site-packages/parso/pgen2/grammar_parser.pyR!   G   s    

	


c         C   sÅ   |  j  d k rH |  j ƒ  |  j ƒ  \ } } |  j t j d ƒ | | f S|  j t j t j f k r¨ t	 |  j
 ƒ } t	 |  j
 ƒ } | j | |  j  ƒ |  j ƒ  | | f S|  j d |  j |  j  ƒ d  S(   NR   t   )s+   expected (...) or NAME or STRING, got %s/%s(   R   R   R   R   R   R   R   R   R"   R   R   R   t   _raise_error(   R   R   R   (    (    s9   lib/python2.7/site-packages/parso/pgen2/grammar_parser.pyR)   `   s    



	c         C   sy   |  j  | k r. |  j d | |  j  |  j ƒ n  | d  k	 rb |  j | k rb |  j d | |  j ƒ n  |  j } |  j ƒ  | S(   Ns   expected %s, got %s [%s]s   expected %s, got %s(   R   R+   R   t   NoneR   (   R   t   type_R   (    (    s9   lib/python2.7/site-packages/parso/pgen2/grammar_parser.pyR   r   s    		
c         C   s.   t  |  j ƒ } | \ |  _ |  _ |  _ } d  S(   N(   t   nextR   R   R   t   begin(   R   t   tupt   prefix(    (    s9   lib/python2.7/site-packages/parso/pgen2/grammar_parser.pyR   |   s    c         G   s‘   | rF y | | } WqF d j  | g t t t | ƒ ƒ ƒ } qF Xn  |  j j ƒ  |  j d d } t | d |  j d |  j d | f ƒ ‚ d  S(   Nt    i    i   s	   <grammar>(   t   joint   listt   mapt   strR   t
   splitlinesR/   t   SyntaxError(   R   t   msgt   argst   line(    (    s9   lib/python2.7/site-packages/parso/pgen2/grammar_parser.pyR+   €   s    ,N(   t   __name__t
   __module__t   __doc__R
   R   R   R   R!   R)   R,   R   R   R+   (    (    (    s9   lib/python2.7/site-packages/parso/pgen2/grammar_parser.pyR      s   						
	t   NFAArcc           B   s   e  Z d  „  Z RS(   c         C   s   | |  _  | |  _ d  S(   N(   R.   t   nonterminal_or_string(   R   t   next_R@   (    (    s9   lib/python2.7/site-packages/parso/pgen2/grammar_parser.pyR
   Œ   s    	(   R<   R=   R
   (    (    (    s9   lib/python2.7/site-packages/parso/pgen2/grammar_parser.pyR?   ‹   s   R   c           B   s&   e  Z d  „  Z d d „ Z d „  Z RS(   c         C   s   | |  _  g  |  _ d  S(   N(   t	   from_rulet   arcs(   R   RB   (    (    s9   lib/python2.7/site-packages/parso/pgen2/grammar_parser.pyR
   ’   s    	c         C   sS   | d  k s! t | t ƒ s! t ‚ t | t ƒ s6 t ‚ |  j j t | | ƒ ƒ d  S(   N(   R,   t
   isinstanceR6   t   AssertionErrorR   RC   t   appendR?   (   R   RA   R@   (    (    s9   lib/python2.7/site-packages/parso/pgen2/grammar_parser.pyR   –   s    !c         C   s   d |  j  j |  j f S(   Ns   <%s: from %s>(   t	   __class__R<   RB   (   R   (    (    s9   lib/python2.7/site-packages/parso/pgen2/grammar_parser.pyt   __repr__›   s    N(   R<   R=   R
   R,   R   RH   (    (    (    s9   lib/python2.7/site-packages/parso/pgen2/grammar_parser.pyR   ‘   s   	N(    (
   t   parso.python.tokenizeR    t   parso.utilsR   t   parso.python.tokenR   R   t   objectR?   R   (    (    (    s9   lib/python2.7/site-packages/parso/pgen2/grammar_parser.pyt   <module>   s
   ~