mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 23:21:29 +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, ")")))
							 |