You've already forked python-uncompyle6
mirror of
https://github.com/rocky/python-uncompyle6.git
synced 2025-08-04 01:09:52 +08:00
DRY Python 3.6 grammar rules
This commit is contained in:
@@ -500,7 +500,6 @@ class Python3Parser(PythonParser):
|
||||
load_attr ::= expr LOOKUP_METHOD
|
||||
call_function ::= expr CALL_METHOD
|
||||
"""
|
||||
saw_format_value = False
|
||||
for i, token in enumerate(tokens):
|
||||
opname = token.type
|
||||
opname_base = opname[:opname.rfind('_')]
|
||||
@@ -513,28 +512,6 @@ class Python3Parser(PythonParser):
|
||||
assign2_pypy ::= expr expr designator designator
|
||||
""", nop_func)
|
||||
continue
|
||||
elif opname == 'FORMAT_VALUE':
|
||||
# Python 3.6+
|
||||
self.addRule("""
|
||||
expr ::= fstring_single
|
||||
fstring_single ::= expr FORMAT_VALUE
|
||||
""", nop_func)
|
||||
elif opname == 'BUILD_STRING':
|
||||
# Python 3.6+
|
||||
v = token.attr
|
||||
fstring_expr_or_str_n = "fstring_expr_or_str_%s" % v
|
||||
rule = """
|
||||
expr ::= fstring_expr
|
||||
fstring_expr ::= expr FORMAT_VALUE
|
||||
str ::= LOAD_CONST
|
||||
fstring_expr_or_str ::= fstring_expr
|
||||
fstring_expr_or_str ::= str
|
||||
expr ::= fstring_multi
|
||||
fstring_multi ::= %s BUILD_STRING
|
||||
%s ::= %sBUILD_STRING
|
||||
""" % (fstring_expr_or_str_n, fstring_expr_or_str_n, "fstring_expr_or_str " * v)
|
||||
self.addRule(rule, nop_func)
|
||||
|
||||
elif opname in ('CALL_FUNCTION', 'CALL_FUNCTION_VAR',
|
||||
'CALL_FUNCTION_VAR_KW', 'CALL_FUNCTION_KW'):
|
||||
self.custom_classfunc_rule(opname, token, customize)
|
||||
@@ -741,7 +718,6 @@ class Python33ParserSingle(Python33Parser, PythonParserSingle):
|
||||
|
||||
def info(args):
|
||||
# Check grammar
|
||||
# Should also add a way to dump grammar
|
||||
p = Python3Parser()
|
||||
if len(args) > 0:
|
||||
arg = args[0]
|
||||
@@ -753,7 +729,9 @@ def info(args):
|
||||
elif arg == '3.2':
|
||||
p = Python32Parser()
|
||||
p.checkGrammar()
|
||||
|
||||
if len(sys.argv) > 1 and sys.argv[1] == 'dump':
|
||||
print('-' * 50)
|
||||
p.dumpGrammar()
|
||||
|
||||
if __name__ == '__main__':
|
||||
import sys
|
||||
|
Reference in New Issue
Block a user