Start grammar checker

This commit is contained in:
rocky
2016-07-27 11:02:01 -04:00
parent 177a422b87
commit 87dc5ad80c
3 changed files with 26 additions and 6 deletions

23
pytest/test_grammar.py Normal file
View File

@@ -0,0 +1,23 @@
import pytest
from uncompyle6 import PYTHON_VERSION, PYTHON3 # , PYTHON_VERSION
from uncompyle6.parser import get_python_parser
def test_grammar():
p = get_python_parser(PYTHON_VERSION)
lhs, rhs, tokens, right_recursive = p.checkSets()
expect_lhs = set(['expr1024', 'pos_arg'])
unused_rhs = set(['build_list', 'call_function', 'mkfunc', 'mklambda',
'unpack', 'unpack_list'])
expect_right_recursive = [['designList', ('designator', 'DUP_TOP', 'designList')]]
if PYTHON3:
expect_lhs.add('load_genexpr')
unused_rhs = unused_rhs.union(set("""
except_pop_except genexpr classdefdeco2 listcomp
""".split()))
else:
expect_lhs.add('kwarg')
assert expect_lhs == set(lhs)
assert unused_rhs == set(rhs)
assert expect_right_recursive == right_recursive
# FIXME: check that tokens are in list of opcodes
# print(tokens)

View File

@@ -583,7 +583,7 @@ def parse(p, tokens, customize):
def get_python_parser(
version, debug_parser, compile_mode='exec',
version, debug_parser={}, compile_mode='exec',
is_pypy = False):
"""Returns parser object for Python version 2 or 3, 3.2, 3.5on,
etc., depending on the parameters passed. *compile_mode* is either

View File

@@ -20,16 +20,12 @@ from __future__ import print_function
from uncompyle6.parser import PythonParser, PythonParserSingle, nop_func
from uncompyle6.parsers.astnode import AST
from spark_parser import DEFAULT_DEBUG as PARSER_DEFAULT_DEBUG
from uncompyle6 import PYTHON3
class Python3Parser(PythonParser):
def __init__(self, debug_parser=PARSER_DEFAULT_DEBUG):
self.added_rules = set()
if PYTHON3:
super().__init__(AST, 'stmts', debug=debug_parser)
else:
super(Python3Parser, self).__init__(AST, 'stmts', debug=debug_parser)
super(Python3Parser, self).__init__(AST, 'stmts', debug=debug_parser)
self.new_rules = set()
def p_list_comprehension3(self, args):
@@ -602,6 +598,7 @@ class Python3Parser(PythonParser):
class Python32Parser(Python3Parser):
def p_32(self, args):
"""
# Store locals is only in Python 3.0 to 3.3