parse15.py 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. # Copyright (c) 2016 Rocky Bernstein
  2. # Copyright (c) 2000-2002 by hartmut Goebel <hartmut@goebel.noris.de>
  3. from spark_parser import DEFAULT_DEBUG as PARSER_DEFAULT_DEBUG
  4. from uncompyle6.parser import PythonParserSingle, nop_func
  5. from uncompyle6.parsers.parse21 import Python21Parser
  6. class Python15Parser(Python21Parser):
  7. def __init__(self, debug_parser=PARSER_DEFAULT_DEBUG):
  8. super(Python15Parser, self).__init__(debug_parser)
  9. self.customized = {}
  10. def p_import15(self, args):
  11. """
  12. import ::= filler IMPORT_NAME STORE_FAST
  13. import ::= filler IMPORT_NAME STORE_NAME
  14. import_from ::= filler IMPORT_NAME importlist
  15. import_from ::= filler filler IMPORT_NAME importlist POP_TOP
  16. importlist ::= importlist IMPORT_FROM
  17. importlist ::= IMPORT_FROM
  18. """
  19. def customize_grammar_rules(self, tokens, customize):
  20. super(Python15Parser, self).customize_grammar_rules(tokens, customize)
  21. for i, token in enumerate(tokens):
  22. opname = token.kind
  23. opname_base = opname[:opname.rfind('_')]
  24. if opname_base == 'UNPACK_LIST':
  25. self.addRule("store ::= unpack_list", nop_func)
  26. class Python15ParserSingle(Python15Parser, PythonParserSingle):
  27. pass
  28. if __name__ == '__main__':
  29. # Check grammar
  30. p = Python15Parser()
  31. p.check_grammar()
  32. p.dump_grammar()
  33. # local variables:
  34. # tab-width: 4