mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 03:44:55 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			38 lines
		
	
	
	
		
			979 B
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			38 lines
		
	
	
	
		
			979 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.items():
 | 
						|
            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, ")")))
 |