
                            d dl mZmZ d dlmZ d dlmZ d dlmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ d dlZd dlZd dl Z d dl!Z!d dl!m"Z" d dl#m$Z$ d dl%m&Z& d d	l'm(Z( d dl)Z)d d
l*m+Z+m,Z,m-Z- d dl.m/Z/ d dl0m1Z1  e"jd                  e3      Z4 e"jj                  e4e"jl                        Z7g dZ8d Z9d Z:dejv                  dfdZ<d Z=e>dk(  r e=        yy)    )ABCabstractmethod)Sequence)
ModuleType)TypeVarGenericTypeTupleListDictIterator
CollectionCallableOptional	FrozenSetAnyUnionIterableIOTYPE_CHECKINGoverloadPatternClassVarSetMappingN)path)defaultdict)partial)ArgumentParser)lalr_argparser
build_lalrmake_warnings_comments)Rule)TerminalDef)ztools/standalone.pyzexceptions.pyzutils.pyztree.pyzvisitors.pyz
grammar.pyzlexer.pyz	common.pyzparse_tree_builder.pyzparsers/lalr_parser.pyzparsers/lalr_analysis.pyzparser_frontends.pyzlark.pyzindenter.pyc                 t   d }g }t        t              }| D ]h  }|j                  d      rA|d   dk(  r|dd  j                         }0|d   dk(  r||xx   |z  cc<   d }g }Jt	        |      |sX|j                  |       j |j                         D ci c]  \  }}|dj                  |       c}}S c c}}w )Nz###   {   } )r   list
startswithstrip
ValueErrorappenditemsjoin)linessectiontextsectionslinenames         (lib/third_party/lark/tools/standalone.pyextract_sectionsr9   I   s    GD4 H??5!Aw#~qr(..*aC!T)! &&KK  3;..2BC2BJD$D"''$-2BCCCs   B4c                    g }t         j                  }d}d}t        j                  |       }|D ]  \  }}\  }}	\  }
}}||kD  rd}|	|kD  r|j	                  d|	|z
  z         |t         j
                  k(  r%|t         j                  k(  r|j	                  d       n6|t        j                  k(  r|j	                  d       n|j	                  |       |}|}|
} dj                  |      S )z Strip comments and docstrings from a file.
    Based on code from: https://stackoverflow.com/questions/1769332/script-to-remove-python-comments-docstrings
    r    z#--z##
r*   )tokenINDENTtokenizegenerate_tokensr/   STRINGCOMMENTr1   )line_genresprev_toktypelast_linenolast_coltokgentoktypettextslinenoscolelinenoecolltexts                r8   strip_docstringsrP   ]   s     C<<LKH%%h/FCI?$'4%[ H(?JJsdXo./ell"|u||'CJJu(((JJvJJu DJ" 773<    Fc                    t        t        |      dd ldd ldd lfd}fd} dt
        j                  z          dt
        j                  z                  t        t              D ]  \  }}t        t        j                  j                  t        |            5 }t        |      d   }	|r1t        t        t         t#        |	j%                  d                        }	 |	       d d d         | j'                  t(        t*        g      \  }
} d	       |rA d
        ||
        d        |d        d        ||        d        |d       n0 d
        |
        d        d        |        d        d        d        d        d       y # 1 sw Y   KxY w)N)filer   c                     j                  | j                        }j                  |      } t        j	                  |                   y )N)dumpsHIGHEST_PROTOCOLcompressrepr	b64encode)objscbase64outputpicklezlibs      r8   compressed_outputz)gen_standalone.<locals>.compressed_output   s?    LLf556MM!tF$$Q'()rQ   c                 ,     dt               z         y )NzD%(name)s = pickle.loads(zlib.decompress(base64.b64decode(%(name)s))))locals)r7   r^   s    r8   output_decompressz)gen_standalone.<locals>.output_decompress   s    UX^X``arQ   z2# The file was automatically generated by Lark v%sz__version__ = "%s"
standaloneTzimport pickle, zlib, base64zDATA = ()DATAzMEMO = (MEMOz	Shift = 0z
Reduce = 1zdef Lark_StandAlone(**kwargs):z3  return Lark._load_from_dict(DATA, MEMO, **kwargs))r   printr_   r`   r]   lark__version__	enumerateEXTRACT_STANDALONE_FILESopenosr   r1   _larkdirr9   rP   nextiter
splitlinesmemo_serializer$   r#   )	lark_instr^   outrW   ra   rd   ipyfilefcodedatamr]   r_   r`   s    `          @@@r8   gen_standaloner}   |   s   ~S)*
b ?$BRBRRS
$"2"223
H78	6"'',,x01Q#A&|4D'd4??4;P6Q(RS4L	 21 9 &&T':;GD!
()z$s&!z!s&!ztszq	s ;
<
+,
@A; 21s   ,A
F::G	c                     t                t        ddt        gd      } | j                  ddddd	
       t	        t
        j                        dk(  r4| j                  t
        j                         t        j                  d       | j                         }t        |      \  }}t        |||j                         |j                  j                          |j                   j                          y )Nz&prog='python -m lark.tools.standalone'zLark Stand-alone Generator Toolz;Look at the Lark documentation for more info on the options)progdescriptionparentsepilogz-cz
--compress
store_truer   zEnable compression)actiondefaulthelp   )rv   rW   )r"   r   r    add_argumentlensysargv
print_helpstderrexit
parse_argsr!   r}   rW   rv   closegrammar_file)parsernsru   rv   s       r8   mainr      s    !IWx%3$4=z|F
l<Qef
388}#**%				B^NIs9#<FFLLNOOrQ   __main__)?abcr   r   collections.abcr   typesr   typingr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   	REPatternr   r   r   r   r=   r?   ro   r   collectionsr   	functoolsr   argparser   rj   
lark.toolsr    r!   r"   lark.grammarr#   
lark.lexerr$   dirname__file___dirr1   pardirrp   rm   r9   rP   stdoutr}   r   __name__ rQ   r8   <module>r      s   6 $ $         	  #  #  I I  "t||H499T4;;' "D(> &*szzE /Bh" zF rQ   