3
\„ ã @ 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.6/lib2to3/patcomp.pyr s r c c sP t jt jt jh}tjtj| ƒjƒ}x(|D ] }|\}}}}}||kr(|V q(W 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| _ntj|ƒ| _t j| 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 sn t |ƒ}y| jj||d�}W n0 tjk
rL } ztt|ƒƒ‚W Y dd}~X nX |r`| j|ƒ|fS | j|ƒ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&