From 9d807501af61be1f538063c21f72487b110f05da Mon Sep 17 00:00:00 2001 From: rocky Date: Tue, 27 Mar 2018 15:33:26 -0400 Subject: [PATCH] Grammar reduction for 2.6/2.7,3.x --- test/Makefile | 2 +- test/bytecode_2.7/03_if_elif.pyc | Bin 252 -> 252 bytes test/bytecode_2.7/09_whiletrue_bug.pyc | Bin 503 -> 320 bytes test/bytecode_3.6/03_if_elif.pyc | Bin 0 -> 207 bytes test/grammar-cover/grammar.sh | 6 +++++- uncompyle6/parser.py | 3 --- uncompyle6/parsers/parse2.py | 3 --- uncompyle6/parsers/parse25.py | 1 - uncompyle6/parsers/parse26.py | 3 +++ uncompyle6/parsers/parse27.py | 2 -- uncompyle6/parsers/parse3.py | 12 +++--------- 11 files changed, 12 insertions(+), 20 deletions(-) create mode 100644 test/bytecode_3.6/03_if_elif.pyc diff --git a/test/Makefile b/test/Makefile index 1e48c9fd..b73cfe00 100644 --- a/test/Makefile +++ b/test/Makefile @@ -139,7 +139,7 @@ grammar-coverage-2.6: grammar-coverage-2.7: -rm $(COVER_DIR)/spark-grammar-2.7.cover || true SPARK_PARSER_COVERAGE=$(COVER_DIR)/spark-grammar-2.7.cover $(PYTHON) test_pythonlib.py --bytecode-2.7 - SPARK_PARSER_COVERAGE=$(COVER_DIR)/spark-grammar-2.7.cover $(PYTHON) test_pyenvlib.py --2.7.14 --max=400 + SPARK_PARSER_COVERAGE=$(COVER_DIR)/spark-grammar-2.7.cover $(PYTHON) test_pyenvlib.py --2.7.14 --max=600 #: Get grammar coverage for Python 3.0 grammar-coverage-3.0: diff --git a/test/bytecode_2.7/03_if_elif.pyc b/test/bytecode_2.7/03_if_elif.pyc index 085dd093897a0f126e08c7294b1f576a5545a70e..cae0ce451e0641626bf633d304b400c29964df29 100644 GIT binary patch delta 16 Ycmeyv_=k~$`7&pdE6FI&B05wnsg#Z8m delta 16 Xcmeyv_=k~$`7&pdE$qZ1y3Zxx?xHx&DbSiVO2Ft`ADP}(n*2w{kwv#6@`Z5Yl Ie!wUS0HTf!!vFvP delta 238 zcmX@W^qpCn`7DN^%;MBckVrC!U;<(g?F_`lB0!>omm!6bp_Y-MkeMO838;esXbMP`UnYpu0AdC( zA8cM?N=i{`aWUA2Du^5d!^BtmN?br?0htA<&N-Q>c_o5CUNHwqDLQ#5%ldGd0RB#p1!PUjhf{UMQ!@Sl literal 0 HcmV?d00001 diff --git a/test/grammar-cover/grammar.sh b/test/grammar-cover/grammar.sh index 5f12d5be..2fa178b0 100755 --- a/test/grammar-cover/grammar.sh +++ b/test/grammar-cover/grammar.sh @@ -21,6 +21,7 @@ while [[ -n $1 ]] ; do fi tmpdir=$workdir/../../tmp/grammar-cover + COVER_FILE=${tmpdir}/spark-grammar-${SHORT_VERSION}.cover [[ -d $tmpdir ]] || mkdir $tmpdir cd $workdir/../.. if [[ $SHORT_VERSION > 2.5 ]] ; then @@ -31,10 +32,13 @@ while [[ -n $1 ]] ; do GRAMMAR_TXT=$tmpdir/grammar-${SHORT_VERSION}.txt pyenv local ${LONG_VERSION} cd ./test + if [[ -r $COVER_FILE ]]; then + rm $COVER_FILE + fi if [[ -r $GRAMMAR_TXT ]]; then GRAMMAR_SAVE_TXT=${tmpdir}/grammar-${SHORT_VERSION}-save.txt cp $GRAMMAR_TXT $GRAMMAR_SAVE_TXT fi make grammar-coverage-${SHORT_VERSION}; - spark-parser-coverage --path ${tmpdir}/spark-grammar-${SHORT_VERSION}.cover > $GRAMMAR_TXT + spark-parser-coverage --max-count=3000 --path $COVER_FILE > $GRAMMAR_TXT done diff --git a/uncompyle6/parser.py b/uncompyle6/parser.py index 575aba16..d7fff593 100644 --- a/uncompyle6/parser.py +++ b/uncompyle6/parser.py @@ -567,9 +567,6 @@ class PythonParser(GenericASTBuilder): # Positional arguments in make_function pos_arg ::= expr - - expr32 ::= expr expr expr expr expr expr expr expr expr expr expr expr expr expr expr expr expr expr expr expr expr expr expr expr expr expr expr expr expr expr expr expr - expr1024 ::= expr32 expr32 expr32 expr32 expr32 expr32 expr32 expr32 expr32 expr32 expr32 expr32 expr32 expr32 expr32 expr32 expr32 expr32 expr32 expr32 expr32 expr32 expr32 expr32 expr32 expr32 expr32 expr32 expr32 expr32 expr32 expr32 ''' def p_store(self, args): diff --git a/uncompyle6/parsers/parse2.py b/uncompyle6/parsers/parse2.py index adc67f6a..35f7740b 100644 --- a/uncompyle6/parsers/parse2.py +++ b/uncompyle6/parsers/parse2.py @@ -109,11 +109,8 @@ class Python2Parser(PythonParser): _mklambda ::= load_closure mklambda kwarg ::= LOAD_CONST expr - kvlist ::= kvlist kv3 kv3 ::= expr expr STORE_MAP - dict ::= BUILD_MAP kvlist - classdef ::= buildclass store buildclass ::= LOAD_CONST expr mkfunc diff --git a/uncompyle6/parsers/parse25.py b/uncompyle6/parsers/parse25.py index 1e5f6981..a60ce46b 100644 --- a/uncompyle6/parsers/parse25.py +++ b/uncompyle6/parsers/parse25.py @@ -65,7 +65,6 @@ class Python25Parser(Python26Parser): classdefdeco1 ::= expr classdefdeco2 CALL_FUNCTION_1 classdefdeco2 ::= LOAD_CONST expr mkfunc CALL_FUNCTION_0 BUILD_CLASS kv3 ::= expr expr STORE_MAP - kvlist ::= kvlist kv3 ret_cond ::= expr jmp_false_then expr RETURN_END_IF POP_TOP ret_expr_or_cond return_if_lambda ::= RETURN_END_IF_LAMBDA POP_TOP return_if_stmt ::= ret_expr RETURN_END_IF POP_TOP diff --git a/uncompyle6/parsers/parse26.py b/uncompyle6/parsers/parse26.py index cf0c45f4..0b680d27 100644 --- a/uncompyle6/parsers/parse26.py +++ b/uncompyle6/parsers/parse26.py @@ -261,6 +261,9 @@ class Python26Parser(Python2Parser): def p_misc26(self, args): """ + dict ::= BUILD_MAP kvlist + kvlist ::= kvlist kv3 + conditional ::= expr jmp_false expr jf_cf_pop expr come_from_opt and ::= expr JUMP_IF_FALSE POP_TOP expr JUMP_IF_FALSE POP_TOP diff --git a/uncompyle6/parsers/parse27.py b/uncompyle6/parsers/parse27.py index f9f7753e..9b5c1819 100644 --- a/uncompyle6/parsers/parse27.py +++ b/uncompyle6/parsers/parse27.py @@ -38,8 +38,6 @@ class Python27Parser(Python2Parser): comp_for ::= expr for_iter store comp_iter JUMP_BACK comp_iter ::= comp_if - comp_iter ::= comp_if_not - comp_if_not ::= expr jmp_true comp_iter comp_iter ::= comp_body dict_comp_body ::= expr expr MAP_ADD diff --git a/uncompyle6/parsers/parse3.py b/uncompyle6/parsers/parse3.py index f93a7a8a..5784f7bb 100644 --- a/uncompyle6/parsers/parse3.py +++ b/uncompyle6/parsers/parse3.py @@ -620,9 +620,7 @@ class Python3Parser(PythonParser): self.addRule(rule, nop_func) elif opname.startswith('BUILD_LIST_UNPACK'): v = token.attr - rule = ('build_list_unpack ::= ' + 'expr1024 ' * int(v//1024) + - 'expr32 ' * int((v//32) % 32) + - 'expr ' * (v % 32) + opname) + rule = 'build_list_unpack ::= %s%s' % ('expr ' * v, opname) self.addRule(rule, nop_func) rule = 'expr ::= build_list_unpack' self.addRule(rule, nop_func) @@ -665,9 +663,7 @@ class Python3Parser(PythonParser): self.add_unique_rule(rule, opname, token.attr, customize) elif opname.startswith('BUILD_MAP_UNPACK_WITH_CALL'): v = token.attr - rule = ('build_map_unpack_with_call ::= ' + 'expr1024 ' * int(v//1024) + - 'expr32 ' * int((v//32) % 32) + - 'expr ' * (v % 32) + opname) + rule = 'build_map_unpack_with_call ::= %s%s' % ('expr ' * v, opname) self.addRule(rule, nop_func) elif opname.startswith('BUILD_TUPLE_UNPACK_WITH_CALL'): v = token.attr @@ -690,9 +686,7 @@ class Python3Parser(PythonParser): self.add_unique_rule(rule, opname, token.attr, customize) if not is_LOAD_CLOSURE or v == 0: collection = opname_base[opname_base.find('_')+1:].lower() - rule = (('%s ::= ' % collection) + 'expr1024 ' * int(v//1024) + - 'expr32 ' * int((v//32) % 32) + - 'expr ' * (v % 32) + opname) + rule = '%s ::= %s%s' % (collection, 'expr ' * v, opname) self.add_unique_rules([ 'expr ::= %s' % collection, rule], customize)