
    G@d                        d Z ddlZddlZddlmZmZmZ ddlmZ ddl	m
c mc mZ  ej        e          ZdZ e e ej                     ej                                        Z ee          \  ZZZZej        ddej        ddej        ddej        ddej        ddej        ddej        dddddej        d	d
ej        d	d
ej        ej        d	dej        d	ddZdhddhdhddhh dddhdhddhdhd	Z d Z!d Z"dS )z-LL(1) parse routine for our snippets grammar.    N)tokenizetoken_regexToken)create_LL1_parsing_tableSTART)starting_ruleT)defaultargsF)SNIPPETr
   )
INTSNIPPET
VARSNIPPETr
   )r   r
   )TEXTTEXT_SNIPPETSTEXT_NO_COLTEXT_COL
TEXT_REGEXTEXT_FORMATEXPRLISTr   r   r   	COLONBODYPIPEBODYdollar
left_curlyright_curlycolon>   pipecommar   slashr   )	r   r   r   r   r   	REGEXBODY
FORMATEXPR
FORMATBODYTEXTSEQc                 v   |}|}|}	| t           v rt           |          }
d}|\  }}||
v r	|
|         }n0d|
v r	|
d         }n#t          d                    | |                    | |f}|
d         rF|                    d|           |                    d|           |                    d|           g }g }	|||	|||fS )z)Decide if a new AST node must be created.Nr	   z)Cannot transition to context {0} from {1}r
   r   )CONTEXT_SWITCHER
ValueErrorformatinsert)current_rulecurrent_ctxcurrent_argscurrent_prefixcontext_stack
args_stackprefix_stacknew_ctxnew_args
new_prefixrule_switchNodecurrent_ctx_name_s                 9lib/python3.11/site-packages/spyder/utils/snippets/ast.pyswitch_contextr6   ^   s    GHJ'''&|4)!{**/0DD+%%y)DD 44:F!-/?5A 5AB B B  &v 	a...  K000>222HJXz:|5 5    c           	         t          |           }|t          dd          gz  }t          g}t          df}g }t          g}g }g }g }t          |          dk    r[|d         }	|                    d          }
|
t
          v rt          |
         }g }|	j        |v r||	j                 }nY|	j        |v r||	j                 }nBt          d
                    t          |                                          |	                    |                    d           ||z   }t          |
||||||          }|\  }}}}}}||z   }n|	j        |
k    r|                    d           nc|	j        |
k    r|                    d           nBt          d
                    t          |	j                  t          |
                              |\  }}d}|t          v r|	j        t          |         v}|r4t!          j        |	j        |	j                  }|                    |           |                    d           t          |          dk    r^|\  }} || }|                    d          }|                    d          }|                    d          }|                    |           t          |          dk    [t          |          dk    sJ |d         S )	z>Given a snippet string, return its abstract syntax tree (AST).eofz<eof>Nr   zDSyntax Error: Expected any of the following characters: {0}, got {1}z#Syntax Error: Expected {0}, got {1}T   )r   r   STARTING_RULElenpopGRAMMARPARSE_TABLEtokenvalueSyntaxErrorr%   listkeysr6   reprIGNORE_TERMINALSnodesLeafNodeappend)snippet_texttokensstackr(   r)   r*   r+   r,   r-   
peek_tokenr'   follow_predictionsnext_productionsr.   current_namer4   add_to_argsleafr2   nodes                       r5   build_snippet_astrT   |   s    l##F
uUG$$%%FOE $'KL#_NMJL
e**q..AY
yy||7""!,\!:!#555#5j6F#G  !%777#5j6F#G  ! #>>Df&*+=+B+B+D+D&E&E&0?& ?&' ' '
 q!!!$u,E$\;%3]J%13 3G 9@6[,J->NN <//

1!\11

1!"G"N"N)**D,>,>#@ #@ A A A *OL!K///)//= >  *~j&6
8HII##D)))q!!!~!##!GAt4&D'++A..K%>>!,,L)--a00N%%%i e**q..l |!!!!?r7   )#__doc__loggingcodecsspyder.utils.snippets.lexerr   r   r   spyder.utils.snippets.parserr   spyder.utils.snippets.nodesutilssnippetsrG   	getLogger__name__loggerr;   dictzipvaluesrD   INVERSE_TOKEN_TABLEr>   r4   r?   TextNodeTabstopSnippetNodeVariableSnippetNodePlaceholderNodeVariablePlaceholderNode
ChoiceNoder#   rF   r6   rT    r7   r5   <module>rk      sh   4 3   E D D D D D D D D D A A A A A A + + + + + + + + + + + + 
	8	$	$d331{1335E[5E5G5GHHII 55! ! ! A{ > 
 > 
 > 
 > 
 > 
 > 
 > 
  
 + 
 , 
 +3  & ]3 3 l z/ /=)000=)*/y
 
 5 5 5<F F F F Fr7   