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