U
e5dŽ ã @ s d Z dZddlZddlmZmZmZmZmZm Z ddl
mZ ddl
mZ G dd „ d e
ƒZd
d„ ZG dd
„ d
eƒZejejejddœZdd„ Zdd„ Zdd„ ZdS )z�Pattern compiler.
The grammar is taken from PatternGrammar.txt.
The compiler compiles a pattern to a pytree.*Pattern instance.
z#Guido van Rossum é Né )ÚdriverÚliteralsÚtokenÚtokenizeÚparseÚgrammar)Úpytree)Úpygramc @ s e Zd ZdS )ÚPatternSyntaxErrorN)Ú__name__Ú
__module__Ú__qualname__© r r ú'/usr/lib64/python3.8/lib2to3/patcomp.pyr s r c c sL t jt jt jh}t t | ¡j¡}|D ] }|\}}}}}||kr&|V q&dS )z6Tokenizes a string suppressing significant whitespace.N) r ÚNEWLINEÚINDENTÚDEDENTr Úgenerate_tokensÚioÚStringIOÚreadline) ÚinputÚskipÚtokensZ quintupleÚtypeÚvalueÚstartÚendZ line_textr r r Útokenize_wrapper s r c @ s: e Zd Zd
dd„Zddd„Zdd„ Zdd d
„Zdd„ ZdS )ÚPatternCompilerNc C sZ |dkrt j| _t j| _nt |¡| _t | j¡| _t j| _ t j
| _tj| jt
d�| _dS )z^Initializer.
Takes an optional alternative filename for the pattern grammar.
N)Zconvert)r
Zpattern_grammarr Zpattern_symbolsÚsymsr Zload_grammarZSymbolsZpython_grammarZ pygrammarZpython_symbolsÚpysymsZDriverÚpattern_convert)ÚselfZgrammar_filer r r Ú__init__( s
zPatternCompiler.__init__Fc
C sp t |ƒ}z| jj||d�}W n2 tjk
rN } ztt|ƒƒd‚W 5 d}~X Y nX |rb| |¡|fS | |¡S dS )z=Compiles a pattern string to a nested pytree.*Pattern object.)ÚdebugN)r r Zparse_tokensr Z
ParseErrorr ÚstrÚcompile_node)r$ r r&