1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/pyparser/pygram.py Sun Jan 08 20:20:39 2017 +0100
1.3 @@ -0,0 +1,43 @@
1.4 +import os
1.5 +from pyparser import parser, pytoken, metaparser
1.6 +
1.7 +class PythonGrammar(parser.Grammar):
1.8 +
1.9 + KEYWORD_TOKEN = pytoken.python_tokens["NAME"]
1.10 + TOKENS = pytoken.python_tokens
1.11 + OPERATOR_MAP = pytoken.python_opmap
1.12 +
1.13 +def _get_python_grammar():
1.14 + here = os.path.dirname(__file__)
1.15 + fp = open(os.path.join(here, "data", "Grammar2.7"))
1.16 + try:
1.17 + gram_source = fp.read()
1.18 + finally:
1.19 + fp.close()
1.20 + pgen = metaparser.ParserGenerator(gram_source)
1.21 + return pgen.build_grammar(PythonGrammar)
1.22 +
1.23 +
1.24 +python_grammar = _get_python_grammar()
1.25 +python_grammar_no_print = python_grammar.shared_copy()
1.26 +python_grammar_no_print.keyword_ids = python_grammar_no_print.keyword_ids.copy()
1.27 +del python_grammar_no_print.keyword_ids["print"]
1.28 +
1.29 +class _Tokens(object):
1.30 + pass
1.31 +
1.32 +for tok_name, idx in pytoken.python_tokens.iteritems():
1.33 + setattr(_Tokens, tok_name, idx)
1.34 +tokens = _Tokens()
1.35 +
1.36 +class _Symbols(object):
1.37 + pass
1.38 +rev_lookup = {}
1.39 +for sym_name, idx in python_grammar.symbol_ids.iteritems():
1.40 + setattr(_Symbols, sym_name, idx)
1.41 + rev_lookup[idx] = sym_name
1.42 +syms = _Symbols()
1.43 +syms._rev_lookup = rev_lookup # for debugging
1.44 +syms.sym_name = rev_lookup # for symbol module compatibility
1.45 +
1.46 +del _get_python_grammar, _Tokens, tok_name, sym_name, idx