More node checking in tables

This commit is contained in:
rocky
2017-10-13 11:35:17 -04:00
parent 9dd881fae1
commit 03d1c48088
2 changed files with 76 additions and 71 deletions

View File

@@ -474,27 +474,24 @@ class PythonParser(GenericASTBuilder):
expr ::= buildslice3 expr ::= buildslice3
expr ::= yield expr ::= yield
# Possibly Python < 2.3
# expr ::= SET_LINENO
binary_expr ::= expr expr binary_op binary_expr ::= expr expr binary_op
binary_op ::= BINARY_ADD binary_op ::= BINARY_ADD
binary_op ::= BINARY_MULTIPLY binary_op ::= BINARY_MULTIPLY
binary_op ::= BINARY_AND binary_op ::= BINARY_AND
binary_op ::= BINARY_OR binary_op ::= BINARY_OR
binary_op ::= BINARY_XOR binary_op ::= BINARY_XOR
binary_op ::= BINARY_SUBTRACT binary_op ::= BINARY_SUBTRACT
binary_op ::= BINARY_TRUE_DIVIDE binary_op ::= BINARY_TRUE_DIVIDE
binary_op ::= BINARY_FLOOR_DIVIDE binary_op ::= BINARY_FLOOR_DIVIDE
binary_op ::= BINARY_MODULO binary_op ::= BINARY_MODULO
binary_op ::= BINARY_LSHIFT binary_op ::= BINARY_LSHIFT
binary_op ::= BINARY_RSHIFT binary_op ::= BINARY_RSHIFT
binary_op ::= BINARY_POWER binary_op ::= BINARY_POWER
unary_expr ::= expr unary_op unary_expr ::= expr unary_op
unary_op ::= UNARY_POSITIVE unary_op ::= UNARY_POSITIVE
unary_op ::= UNARY_NEGATIVE unary_op ::= UNARY_NEGATIVE
unary_op ::= UNARY_INVERT unary_op ::= UNARY_INVERT
unary_not ::= expr UNARY_NOT unary_not ::= expr UNARY_NOT

View File

@@ -74,64 +74,72 @@ TABLE_DIRECT = {
'BINARY_MATRIX_MULTIPLY': ( '@' ,), 'BINARY_MATRIX_MULTIPLY': ( '@' ,),
'BINARY_TRUE_DIVIDE': ( '/' ,), # Not in <= 2.1 'BINARY_TRUE_DIVIDE': ( '/' ,), # Not in <= 2.1
'BINARY_FLOOR_DIVIDE': ( '//' ,), 'BINARY_FLOOR_DIVIDE': ( '//' ,),
'BINARY_MODULO': ( '%%',), 'BINARY_MODULO': ( '%%',),
'BINARY_POWER': ( '**',), 'BINARY_POWER': ( '**',),
'BINARY_LSHIFT': ( '<<',), 'BINARY_LSHIFT': ( '<<',),
'BINARY_RSHIFT': ( '>>',), 'BINARY_RSHIFT': ( '>>',),
'BINARY_AND': ( '&' ,), 'BINARY_AND': ( '&' ,),
'BINARY_OR': ( '|' ,), 'BINARY_OR': ( '|' ,),
'BINARY_XOR': ( '^' ,), 'BINARY_XOR': ( '^' ,),
'INPLACE_ADD': ( '+=' ,), 'INPLACE_ADD': ( '+=' ,),
'INPLACE_SUBTRACT': ( '-=' ,), 'INPLACE_SUBTRACT': ( '-=' ,),
'INPLACE_MULTIPLY': ( '*=' ,), 'INPLACE_MULTIPLY': ( '*=' ,),
'INPLACE_MATRIX_MULTIPLY': ( '@=' ,), 'INPLACE_MATRIX_MULTIPLY': ( '@=' ,),
'INPLACE_DIVIDE': ( '/=' ,), 'INPLACE_DIVIDE': ( '/=' ,),
'INPLACE_TRUE_DIVIDE': ( '/=' ,), # Not in <= 2.1; 2.6 generates INPLACE_DIVIDE only? 'INPLACE_TRUE_DIVIDE': ( '/=' ,), # Not in <= 2.1; 2.6 generates INPLACE_DIVIDE only?
'INPLACE_FLOOR_DIVIDE': ( '//=' ,), 'INPLACE_FLOOR_DIVIDE': ( '//=' ,),
'INPLACE_MODULO': ( '%%=',), 'INPLACE_MODULO': ( '%%=',),
'INPLACE_POWER': ( '**=',), 'INPLACE_POWER': ( '**=',),
'INPLACE_LSHIFT': ( '<<=',), 'INPLACE_LSHIFT': ( '<<=',),
'INPLACE_RSHIFT': ( '>>=',), 'INPLACE_RSHIFT': ( '>>=',),
'INPLACE_AND': ( '&=' ,), 'INPLACE_AND': ( '&=' ,),
'INPLACE_OR': ( '|=' ,), 'INPLACE_OR': ( '|=' ,),
'INPLACE_XOR': ( '^=' ,), 'INPLACE_XOR': ( '^=' ,),
'binary_expr': ( '%c %c %c', 0, -1, 1 ), 'binary_expr': ( '%c %c %c', 0,
(-1, 'binary_op'),
( 1, 'expr' ) ),
'UNARY_POSITIVE': ( '+',), 'UNARY_POSITIVE': ( '+',),
'UNARY_NEGATIVE': ( '-',), 'UNARY_NEGATIVE': ( '-',),
'UNARY_INVERT': ( '~'), 'UNARY_INVERT': ( '~'),
'unary_expr': ( '%c%c', 1, 0), 'unary_expr': ( '%c%c',
(1, 'unary_op'),
(0, 'expr') ),
'unary_not': ( 'not %c', 0 ), 'unary_not': ( 'not %c',
'unary_convert': ( '`%c`', 0 ), (0, 'expr' ) ),
'get_iter': ( 'iter(%c)', 0 ), 'unary_convert': ( '`%c`',
'slice0': ( '%c[:]', 0 ), (0, 'expr' ), ),
'slice1': ( '%c[%p:]', 0, (1, 100) ), 'get_iter': ( 'iter(%c)', 0 ),
'slice2': ( '%c[:%p]', 0, (1, 100) ), 'slice0': ( '%c[:]', 0 ),
'slice3': ( '%c[%p:%p]', 0, (1, 100), (2, 100) ), 'slice1': ( '%c[%p:]',
0, (1, 100) ),
'slice2': ( '%c[:%p]',
0, (1, 100) ),
'slice3': ( '%c[%p:%p]',
0, (1, 100), (2, 100) ),
'IMPORT_FROM': ( '%{pattr}', ), 'IMPORT_FROM': ( '%{pattr}', ),
'load_attr': ( '%c.%[1]{pattr}', 0), 'load_attr': ( '%c.%[1]{pattr}', 0),
'LOAD_FAST': ( '%{pattr}', ), 'LOAD_FAST': ( '%{pattr}', ),
'LOAD_NAME': ( '%{pattr}', ), 'LOAD_NAME': ( '%{pattr}', ),
'LOAD_CLASSNAME': ( '%{pattr}', ), 'LOAD_CLASSNAME': ( '%{pattr}', ),
'LOAD_GLOBAL': ( '%{pattr}', ), 'LOAD_GLOBAL': ( '%{pattr}', ),
'LOAD_DEREF': ( '%{pattr}', ), 'LOAD_DEREF': ( '%{pattr}', ),
'LOAD_LOCALS': ( 'locals()', ), 'LOAD_LOCALS': ( 'locals()', ),
'LOAD_ASSERT': ( '%{pattr}', ), 'LOAD_ASSERT': ( '%{pattr}', ),
# 'LOAD_CONST': ( '%{pattr}', ), # handled by n_LOAD_CONST 'DELETE_FAST': ( '%|del %{pattr}\n', ),
'DELETE_FAST': ( '%|del %{pattr}\n', ), 'DELETE_NAME': ( '%|del %{pattr}\n', ),
'DELETE_NAME': ( '%|del %{pattr}\n', ), 'DELETE_GLOBAL': ( '%|del %{pattr}\n', ),
'DELETE_GLOBAL': ( '%|del %{pattr}\n', ), 'delete_subscr': ( '%|del %c[%c]\n', 0, 1,),
'delete_subscr': ( '%|del %c[%c]\n', 0, 1,), 'binary_subscr': ( '%c[%p]', 0, (1, 100)),
'binary_subscr': ( '%c[%p]', 0, (1, 100)), 'binary_subscr2': ( '%c[%p]', 0, (1, 100)),
'binary_subscr2': ( '%c[%p]', 0, (1, 100)), 'store_subscr': ( '%c[%c]', 0, 1),
'store_subscr': ( '%c[%c]', 0, 1), 'STORE_FAST': ( '%{pattr}', ),
'STORE_FAST': ( '%{pattr}', ), 'STORE_NAME': ( '%{pattr}', ),
'STORE_NAME': ( '%{pattr}', ), 'STORE_GLOBAL': ( '%{pattr}', ),
'STORE_GLOBAL': ( '%{pattr}', ), 'STORE_DEREF': ( '%{pattr}', ),
'STORE_DEREF': ( '%{pattr}', ), 'unpack': ( '%C%,', (1, maxint, ', ') ),
'unpack': ( '%C%,', (1, maxint, ', ') ),
# This nonterminal we create on the fly in semantic routines # This nonterminal we create on the fly in semantic routines
'unpack_w_parens': ( '(%C%,)', (1, maxint, ', ') ), 'unpack_w_parens': ( '(%C%,)', (1, maxint, ', ') ),