ó
8Þ	Pc           @   s·   d  Z  d Z d d g Z d d l Z d d l Z d d l Z d d l Z d d l Z d d l m	 Z	 m
 Z
 m Z m Z m Z d e f d „  ƒ  YZ d	 d e e d d
 „ Z d „  Z d S(   sZ   Parser driver.

This provides a high-level interface to parse a file into a syntax tree.

s#   Guido van Rossum <guido@python.org>t   Drivert   load_grammariÿÿÿÿNi   (   t   grammart   parset   tokent   tokenizet   pgenc           B   sV   e  Z d d d  „ Z e d „ Z e d „ Z e d „ Z d e d „ Z e d „ Z	 RS(   c         C   s:   | |  _  | d  k r$ t j ƒ  } n  | |  _ | |  _ d  S(   N(   R   t   Nonet   loggingt	   getLoggert   loggert   convert(   t   selfR   R   R
   (    (    s*   /usr/lib/python2.7/lib2to3/pgen2/driver.pyt   __init__   s
    		c         C   s:  t  j |  j |  j ƒ } | j ƒ  d } d } d	 } } } }	 }
 d } xæ| D]À} | \ } } } }	 }
 | | | f k r| | f | k s¥ t | | f | f ‚ | \ } } | | k  rÞ | d | | 7} | } d } n  | | k  r| |
 | | !7} | } qn  | t j t j	 f k r]| | 7} |	 \ } } | j
 d ƒ rQ | d 7} d } qQ qQ n  | t j k r|t j | } n  | r¥|  j j d t j | | | ƒ n  | j | | | | f ƒ rÝ| rÙ|  j j d ƒ n  Pn  d } |	 \ } } | j
 d ƒ rQ | d 7} d } qQ qQ Wt  j d | | | | f ƒ ‚ | j S(
   s4   Parse a series of tokens and return the syntax tree.i   i    u    s   
s   %s %r (prefix=%r)s   Stop.t    s   incomplete inputN(   R   t   ParserR   R   t   setupR   t   AssertionErrorR   t   COMMENTt   NLt   endswithR   t   OPt   opmapR
   t   debugt   tok_namet   addtokent
   ParseErrort   rootnode(   R   t   tokensR   t   pt   linenot   columnt   typet   valuet   startt   endt	   line_textt   prefixt	   quintuplet   s_linenot   s_column(    (    s*   /usr/lib/python2.7/lib2to3/pgen2/driver.pyt   parse_tokens&   sT    
'	

	
	c         C   s"   t  j | j ƒ } |  j | | ƒ S(   s*   Parse a stream and return the syntax tree.(   R   t   generate_tokenst   readlineR)   (   R   t   streamR   R   (    (    s*   /usr/lib/python2.7/lib2to3/pgen2/driver.pyt   parse_stream_rawV   s    c         C   s   |  j  | | ƒ S(   s*   Parse a stream and return the syntax tree.(   R-   (   R   R,   R   (    (    s*   /usr/lib/python2.7/lib2to3/pgen2/driver.pyt   parse_stream[   s    c         C   s;   t  j | d | ƒ } z |  j | | ƒ SWd | j ƒ  Xd S(   s(   Parse a file and return the syntax tree.t   rN(   t   codecst   openR.   t   close(   R   t   filenamet   encodingR   R,   (    (    s*   /usr/lib/python2.7/lib2to3/pgen2/driver.pyt
   parse_file_   s    c         C   s+   t  j t j | ƒ j ƒ } |  j | | ƒ S(   s*   Parse a string and return the syntax tree.(   R   R*   t   StringIOR+   R)   (   R   t   textR   R   (    (    s*   /usr/lib/python2.7/lib2to3/pgen2/driver.pyt   parse_stringg   s    N(
   t   __name__t
   __module__R   R   t   FalseR)   R-   R.   R5   R8   (    (    (    s*   /usr/lib/python2.7/lib2to3/pgen2/driver.pyR       s   0s   Grammar.txtc   	      C   s*  | d k r t j ƒ  } n  | d k r~ t j j |  ƒ \ } } | d k rT d } n  | | d j t t t	 j
 ƒ ƒ d } n  | s” t | |  ƒ r| j d |  ƒ t j |  ƒ } | r&| j d | ƒ y | j | ƒ Wq
t k
 r} | j d t | ƒ ƒ q
Xq&n t j ƒ  } | j | ƒ | S(	   s'   Load the grammar (maybe from a pickle).s   .txtR   t   .s   .pickles!   Generating grammar tables from %ss   Writing grammar tables to %ss   Writing failed:N(   R   R   R	   t   ost   patht   splitextt   joint   mapt   strt   syst   version_infot   _newert   infoR   t   generate_grammart   dumpt   IOErrorR   t   Grammart   load(	   t   gtt   gpt   savet   forceR
   t   headt   tailt   gt   e(    (    s*   /usr/lib/python2.7/lib2to3/pgen2/driver.pyR   m   s&    	*!c         C   sN   t  j j |  ƒ s t St  j j | ƒ s, t St  j j |  ƒ t  j j | ƒ k S(   s0   Inquire whether file a was written since file b.(   R=   R>   t   existsR;   t   Truet   getmtime(   t   at   b(    (    s*   /usr/lib/python2.7/lib2to3/pgen2/driver.pyRE   †   s
    (   t   __doc__t
   __author__t   __all__R0   R=   R   R6   RC   R   R   R   R   R   R   t   objectR    R   RU   R;   R   RE   (    (    (    s*   /usr/lib/python2.7/lib2to3/pgen2/driver.pyt   <module>   s   (P