| # 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, ")"))) |