parse16.py 1.3 KB

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