17db96d56Sopenharmony_ci# Copyright 2006 Google, Inc. All Rights Reserved.
27db96d56Sopenharmony_ci# Licensed to PSF under a Contributor Agreement.
37db96d56Sopenharmony_ci
47db96d56Sopenharmony_ci"""Export the Python grammar and symbols."""
57db96d56Sopenharmony_ci
67db96d56Sopenharmony_ci# Python imports
77db96d56Sopenharmony_ciimport os
87db96d56Sopenharmony_ci
97db96d56Sopenharmony_ci# Local imports
107db96d56Sopenharmony_cifrom .pgen2 import token
117db96d56Sopenharmony_cifrom .pgen2 import driver
127db96d56Sopenharmony_cifrom . import pytree
137db96d56Sopenharmony_ci
147db96d56Sopenharmony_ci# The grammar file
157db96d56Sopenharmony_ci_GRAMMAR_FILE = os.path.join(os.path.dirname(__file__), "Grammar.txt")
167db96d56Sopenharmony_ci_PATTERN_GRAMMAR_FILE = os.path.join(os.path.dirname(__file__),
177db96d56Sopenharmony_ci                                     "PatternGrammar.txt")
187db96d56Sopenharmony_ci
197db96d56Sopenharmony_ci
207db96d56Sopenharmony_ciclass Symbols(object):
217db96d56Sopenharmony_ci
227db96d56Sopenharmony_ci    def __init__(self, grammar):
237db96d56Sopenharmony_ci        """Initializer.
247db96d56Sopenharmony_ci
257db96d56Sopenharmony_ci        Creates an attribute for each grammar symbol (nonterminal),
267db96d56Sopenharmony_ci        whose value is the symbol's type (an int >= 256).
277db96d56Sopenharmony_ci        """
287db96d56Sopenharmony_ci        for name, symbol in grammar.symbol2number.items():
297db96d56Sopenharmony_ci            setattr(self, name, symbol)
307db96d56Sopenharmony_ci
317db96d56Sopenharmony_ci
327db96d56Sopenharmony_cipython_grammar = driver.load_packaged_grammar("lib2to3", _GRAMMAR_FILE)
337db96d56Sopenharmony_ci
347db96d56Sopenharmony_cipython_symbols = Symbols(python_grammar)
357db96d56Sopenharmony_ci
367db96d56Sopenharmony_cipython_grammar_no_print_statement = python_grammar.copy()
377db96d56Sopenharmony_cidel python_grammar_no_print_statement.keywords["print"]
387db96d56Sopenharmony_ci
397db96d56Sopenharmony_cipython_grammar_no_print_and_exec_statement = python_grammar_no_print_statement.copy()
407db96d56Sopenharmony_cidel python_grammar_no_print_and_exec_statement.keywords["exec"]
417db96d56Sopenharmony_ci
427db96d56Sopenharmony_cipattern_grammar = driver.load_packaged_grammar("lib2to3", _PATTERN_GRAMMAR_FILE)
437db96d56Sopenharmony_cipattern_symbols = Symbols(pattern_grammar)
44