mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	
		
			
	
	
		
			39 lines
		
	
	
	
		
			983 B
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			39 lines
		
	
	
	
		
			983 B
		
	
	
	
		
			Python
		
	
	
	
	
	
|   | # Copyright 2006 Google, Inc. All Rights Reserved. | ||
|  | # Licensed to PSF under a Contributor Agreement. | ||
|  | 
 | ||
|  | """Export the Python grammar and symbols.""" | ||
|  | 
 | ||
|  | # Python imports | ||
|  | import os | ||
|  | 
 | ||
|  | # Local imports | ||
|  | from .pgen2 import token | ||
|  | from .pgen2 import driver | ||
|  | from . import pytree | ||
|  | 
 | ||
|  | # The grammar file | ||
|  | _GRAMMAR_FILE = os.path.join(os.path.dirname(__file__), "Grammar.txt") | ||
|  | 
 | ||
|  | 
 | ||
|  | class Symbols(object): | ||
|  | 
 | ||
|  |     def __init__(self, grammar): | ||
|  |         """Initializer.
 | ||
|  | 
 | ||
|  |         Creates an attribute for each grammar symbol (nonterminal), | ||
|  |         whose value is the symbol's type (an int >= 256). | ||
|  |         """
 | ||
|  |         for name, symbol in grammar.symbol2number.iteritems(): | ||
|  |             setattr(self, name, symbol) | ||
|  | 
 | ||
|  | 
 | ||
|  | python_grammar = driver.load_grammar(_GRAMMAR_FILE) | ||
|  | python_symbols = Symbols(python_grammar) | ||
|  | 
 | ||
|  | 
 | ||
|  | def parenthesize(node): | ||
|  |     return pytree.Node(python_symbols.atom, | ||
|  |                        (pytree.Leaf(token.LPAR, "("), | ||
|  |                         node, | ||
|  |                         pytree.Leaf(token.RPAR, ")"))) |