1 import os 2 from pyparser import parser, pytoken, metaparser 3 4 class PythonGrammar(parser.Grammar): 5 6 KEYWORD_TOKEN = pytoken.python_tokens["NAME"] 7 TOKENS = pytoken.python_tokens 8 OPERATOR_MAP = pytoken.python_opmap 9 10 def _get_python_grammar(): 11 here = os.path.dirname(__file__) 12 fp = open(os.path.join(here, "data", "Grammar2.7")) 13 try: 14 gram_source = fp.read() 15 finally: 16 fp.close() 17 pgen = metaparser.ParserGenerator(gram_source) 18 return pgen.build_grammar(PythonGrammar) 19 20 21 python_grammar = _get_python_grammar() 22 python_grammar_no_print = python_grammar.shared_copy() 23 python_grammar_no_print.keyword_ids = python_grammar_no_print.keyword_ids.copy() 24 del python_grammar_no_print.keyword_ids["print"] 25 26 class _Tokens(object): 27 pass 28 29 for tok_name, idx in pytoken.python_tokens.iteritems(): 30 setattr(_Tokens, tok_name, idx) 31 tokens = _Tokens() 32 33 class _Symbols(object): 34 pass 35 rev_lookup = {} 36 for sym_name, idx in python_grammar.symbol_ids.iteritems(): 37 setattr(_Symbols, sym_name, idx) 38 rev_lookup[idx] = sym_name 39 syms = _Symbols() 40 syms._rev_lookup = rev_lookup # for debugging 41 syms.sym_name = rev_lookup # for symbol module compatibility 42 43 del _get_python_grammar, _Tokens, tok_name, sym_name, idx