Advertisement
Guest User

SYNTAX TREE DISPLAY IN PYTHON.

a guest
Nov 18th, 2019
260
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.07 KB | None | 0 0
  1. class NAMESPACE:
  2.     def __init__( SELF, **KWARGS ):
  3.         SELF.__dict__.update( KWARGS )
  4.  
  5. import ast as AST
  6. ROOT= AST.parse( open( "../PRIME_SIEVE.PY" ).read( ) )
  7. import collections as COLLECTIONS
  8. STACK= COLLECTIONS.deque( [ COLLECTIONS.deque( [ NAMESPACE( FIELDNAME= "ROOT", NODE= ROOT ) ] ) ] )
  9. while True:
  10.     while STACK and not STACK[ - 1 ]:
  11.         STACK.pop( )
  12.     if not STACK:
  13.         break
  14.     ENTRY= STACK[ - 1 ].popleft( )
  15.     if isinstance( ENTRY.NODE, AST.Load ) or isinstance( ENTRY.NODE, AST.Store ):
  16.         continue
  17.     print( " "* len( STACK )+ ENTRY.FIELDNAME+ ": "+ ENTRY.NODE.__class__.__name__ )
  18.     ENTRY_2= COLLECTIONS.deque( )
  19.     for FIELDNAME, NODE in AST.iter_fields( ENTRY.NODE ):
  20.         FIELDNAME= FIELDNAME.upper( )
  21.         if isinstance( NODE, AST.AST ):
  22.             ENTRY_2.append( NAMESPACE( FIELDNAME= FIELDNAME, NODE= NODE ) )
  23.             continue
  24.         if isinstance( NODE, list ):
  25.             ENTRY_2.extend( NAMESPACE( FIELDNAME= FIELDNAME+ F"[ { Z } ]", NODE= NODE_0 ) for Z, NODE_0 in enumerate( NODE ) )
  26.             continue
  27.         print( " "* ( len( STACK )+ 1 )+ FIELDNAME+ ": "+ repr( NODE )[ : 40 ] )
  28.     STACK.append( ENTRY_2 )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement