
    dafC                         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	Z	m
Z
  e j                  dd      Zej                  dd	
        G d d      ZddZedk(  r e        yy)    N)AnyCallableIterator)build_parser)GrammarRulepegenz,Pretty print the AST for a given PEG grammar)progdescriptionfilenamezGrammar description)helpc            	       j    e Zd Zdedee   fdZdedefdZe	fde
ded   ddfd	Zdded
ededefdZy)ASTGrammarPrinternodereturnc              #   \   K   |D ]!  }t        |t              r|E d {    | # y 7 wN)
isinstancelist)selfr   values      C/root/Python-3.12.4/Tools/peg_generator/pegen/grammar_visualizer.pychildrenzASTGrammarPrinter.children   s0      	E%&   		 s   ,*,c                 x    t        | j                  |            st        |      S |j                  j                  S r   )r   r   repr	__class____name__)r   r   s     r   namezASTGrammarPrinter.name   s-    DMM$'(:~~&&&    grammarprinter).NNc                 p    |j                   j                         D ]  } || j                  |              y r   )rulesvaluesprint_nodes_recursively)r   r    r!   rules       r   print_grammar_astz#ASTGrammarPrinter.print_grammar_ast   s1    MM((* 	8DD0067	8r   prefixistailc                 
   t        | j                  |            }| j                  |      }||rdndz   |z   dz   }|rdnd}|s|S |^ }}|D ]  }	|| j                  |	||z   d      z  } || j                  |||z   d      z  }|S )Nu	   └──u	   ├──
z   u   │  FT)r   r   r   r%   )
r   r   r(   r)   r   r   linesufixlastchilds
             r   r%   z)ASTGrammarPrinter.print_nodes_recursively   s    d+,		$K@5H4OWK"4 	OED00NND	O,,T6E>4HHr   ) T)r   
__module____qualname__r   r   r   r   strr   printr   r   r'   boolr%    r   r   r   r      su    T hsm ' '# '
 RW 8 88I;N 8[_ 8D # D \_ r   r   c                  "   t         j                         } 	 t        | j                        \  }}}t               }|j                         y # t        $ r:}t        dt        j                         t        j                  d       Y d }~Zd }~ww xY w)Nz#ERROR: Failed to parse grammar file)file   )	argparser
parse_argsr   r   	Exceptionr4   sysstderrexitr   r'   )argsr    parser	tokenizererrvisitors         r   mainrE   2   sp    !D%1$--%@"
  !Gg&  3#**Es   A 	B0B		B__main__)r   N)argparser=   typingr   r   r   pegen.buildr   pegen.grammarr   r   ArgumentParserr:   add_argumentr   rE   r   r6   r   r   <module>rM      si     
 * * $ '#H##	L	 
  z(=  >! !H
' zF r   