o
    bi                     @   sl  d dl mZ d dlmZ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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/m0Z0 d dl1m2Z2 e#3e4Z5e#6e5e#j7Z8g dZ9dd Z:dd Z;dej<dfddZ=dd Z>e?dkre>  dS dS )    )deepcopy)ABCabstractmethod)
ModuleType)TypeVarGenericTypeTupleListDictIterator
CollectionCallableOptional	FrozenSetAnyUnionIterableIOTYPE_CHECKINGoverloadSequence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_analysis.pyzparsers/lalr_parser_state.pyzparsers/lalr_parser.pyz"parsers/lalr_interactive_parser.pyzparser_frontends.pyzlark.pyzindenter.pyc                 C   s   d }g }t t}| D ]4}|dr7|d dkr |dd   }q
|d dkr3||  |7  < d }g }q
t||r>|| q
dd | D S )Nz###   {   }c                 S   s   i | ]
\}}|d  |qS ) )join).0nametext r.   I/home/ubuntu/.local/lib/python3.10/site-packages/lark/tools/standalone.py
<dictcomp>\   s    z$extract_sections.<locals>.<dictcomp>)r   list
startswithstrip
ValueErrorappenditems)linessectionr-   sectionsliner.   r.   r/   extract_sectionsK   s    

r;   c                 C   s   g }t j}d}d}t| }|D ]D\}}\}}	\}
}}||kr!d}|	|kr.|d|	|   |t jkr>|t jkr>|d n|tjkrI|d n|| |}|}|
}qd|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_tokensr5   STRINGCOMMENTr*   )line_genresprev_toktypelast_linenolast_coltokgentoktypettextslinenoscolelinenoecolltextr.   r.   r/   strip_docstrings_   s&   



rQ   Fc              	      s  d u r
t t|ddd ldd ldd l  fdd}fdd}dtj  dtj    ttD ]5\}}t	t
jt| }t|d	 }	|r\tt tt|	d
}	|	 W d    n1 sjw   Y  q:| ttg\}
}d |rd ||
 d |d d || d |d nd |
 d d | d d d d d d S )N)filer   c                    s.    | j}|}t | d S )N)dumpsHIGHEST_PROTOCOLcompressrepr	b64encode)objscbase64outputpicklezlibr.   r/   compressed_output   s   
z)gen_standalone.<locals>.compressed_outputc                    s    dt    d S )NzD%(name)s = pickle.loads(zlib.decompress(base64.b64decode(%(name)s))))locals)r,   )r]   r.   r/   output_decompress   s   z)gen_standalone.<locals>.output_decompressz2# 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   r*   _larkdirr;   rQ   nextiter
splitlinesmemo_serializer$   r#   )	lark_instr]   outrU   r`   rb   ipyfilefcodedatamr.   r[   r/   gen_standalone~   sJ   

r{   c                  C   s   t   tddtgdd} | jddddd	d
 ttjdkr(| tj t	d | 
 }t|\}}t|||jd |j  |j  d S )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   )rt   rU   )r"   r   r    add_argumentlensysargv
print_helpstderrexit
parse_argsr!   r{   rU   rt   closegrammar_file)parsernsrs   rt   r.   r.   r/   main   s   

r   __main__)@copyr   abcr   r   typesr   typingr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   	REPatternr   r   r   r   r>   r@   rm   r   collectionsr   	functoolsr   argparser   rh   
lark.toolsr    r!   r"   lark.grammarr#   
lark.lexerr$   dirname__file___dirr*   pardirrn   rk   r;   rQ   stdoutr{   r   __name__r.   r.   r.   r/   <module>   s2   `
4
