@ -38,10 +38,10 @@
// eval_input: testlist NEWLINE* ENDMARKER
DEF_RULE ( single_input , nc , or ( 3 ) , tok ( NEWLINE ) , rule ( simple_stmt ) , rule ( compound_stmt ) )
DEF_RULE ( file_input , c ( generic_all_nodes ) , and ( 1 ) , opt_rule ( file_input_2 ) )
DEF_RULE ( file_input , c ( generic_all_nodes ) , and_ident ( 1 ) , opt_rule ( file_input_2 ) )
DEF_RULE ( file_input_2 , c ( generic_all_nodes ) , one_or_more , rule ( file_input_3 ) )
DEF_RULE ( file_input_3 , nc , or ( 2 ) , tok ( NEWLINE ) , rule ( stmt ) )
DEF_RULE ( eval_input , nc , and ( 2 ) , rule ( testlist ) , opt_rule ( eval_input_2 ) )
DEF_RULE ( eval_input , nc , and_ident ( 2 ) , rule ( testlist ) , opt_rule ( eval_input_2 ) )
DEF_RULE ( eval_input_2 , nc , and ( 1 ) , tok ( NEWLINE ) )
// decorator: '@' dotted_name [ '(' [arglist] ')' ] NEWLINE
@ -57,32 +57,32 @@ DEF_RULE(eval_input_2, nc, and(1), tok(NEWLINE))
DEF_RULE ( decorator , nc , and ( 4 ) , tok ( DEL_AT ) , rule ( dotted_name ) , opt_rule ( trailer_paren ) , tok ( NEWLINE ) )
DEF_RULE ( decorators , nc , one_or_more , rule ( decorator ) )
DEF_RULE ( decorated , c ( decorated ) , and ( 2 ) , rule ( decorators ) , rule ( decorated_body ) )
DEF_RULE ( decorated , c ( decorated ) , and_ident ( 2 ) , rule ( decorators ) , rule ( decorated_body ) )
# if MICROPY_PY_ASYNC_AWAIT
DEF_RULE ( decorated_body , nc , or ( 3 ) , rule ( classdef ) , rule ( funcdef ) , rule ( async_funcdef ) )
DEF_RULE ( async_funcdef , nc , and ( 2 ) , tok ( KW_ASYNC ) , rule ( funcdef ) )
# else
DEF_RULE ( decorated_body , nc , or ( 2 ) , rule ( classdef ) , rule ( funcdef ) )
# endif
DEF_RULE ( funcdef , c ( funcdef ) , blank | and ( 8 ) , tok ( KW_DEF ) , tok ( NAME ) , tok ( DEL_PAREN_OPEN ) , opt_rule ( typedargslist ) , tok ( DEL_PAREN_CLOSE ) , opt_rule ( funcdefrettype ) , tok ( DEL_COLON ) , rule ( suite ) )
DEF_RULE ( funcdefrettype , nc , ident | and ( 2 ) , tok ( DEL_MINUS_MORE ) , rule ( test ) )
DEF_RULE ( funcdef , c ( funcdef ) , and_blank ( 8 ) , tok ( KW_DEF ) , tok ( NAME ) , tok ( DEL_PAREN_OPEN ) , opt_rule ( typedargslist ) , tok ( DEL_PAREN_CLOSE ) , opt_rule ( funcdefrettype ) , tok ( DEL_COLON ) , rule ( suite ) )
DEF_RULE ( funcdefrettype , nc , and_ ident( 2 ) , tok ( DEL_MINUS_MORE ) , rule ( test ) )
// note: typedargslist lets through more than is allowed, compiler does further checks
DEF_RULE ( typedargslist , nc , list_with_end , rule ( typedargslist_item ) , tok ( DEL_COMMA ) )
DEF_RULE ( typedargslist_item , nc , or ( 3 ) , rule ( typedargslist_name ) , rule ( typedargslist_star ) , rule ( typedargslist_dbl_star ) )
DEF_RULE ( typedargslist_name , nc , ident | and ( 3 ) , tok ( NAME ) , opt_rule ( typedargslist_colon ) , opt_rule ( typedargslist_equal ) )
DEF_RULE ( typedargslist_name , nc , and_ ident( 3 ) , tok ( NAME ) , opt_rule ( typedargslist_colon ) , opt_rule ( typedargslist_equal ) )
DEF_RULE ( typedargslist_star , nc , and ( 2 ) , tok ( OP_STAR ) , opt_rule ( tfpdef ) )
DEF_RULE ( typedargslist_dbl_star , nc , and ( 3 ) , tok ( OP_DBL_STAR ) , tok ( NAME ) , opt_rule ( typedargslist_colon ) )
DEF_RULE ( typedargslist_colon , nc , ident | and ( 2 ) , tok ( DEL_COLON ) , rule ( test ) )
DEF_RULE ( typedargslist_equal , nc , ident | and ( 2 ) , tok ( DEL_EQUAL ) , rule ( test ) )
DEF_RULE ( typedargslist_colon , nc , and_ ident( 2 ) , tok ( DEL_COLON ) , rule ( test ) )
DEF_RULE ( typedargslist_equal , nc , and_ ident( 2 ) , tok ( DEL_EQUAL ) , rule ( test ) )
DEF_RULE ( tfpdef , nc , and ( 2 ) , tok ( NAME ) , opt_rule ( typedargslist_colon ) )
// note: varargslist lets through more than is allowed, compiler does further checks
DEF_RULE ( varargslist , nc , list_with_end , rule ( varargslist_item ) , tok ( DEL_COMMA ) )
DEF_RULE ( varargslist_item , nc , or ( 3 ) , rule ( varargslist_name ) , rule ( varargslist_star ) , rule ( varargslist_dbl_star ) )
DEF_RULE ( varargslist_name , nc , ident | and ( 2 ) , tok ( NAME ) , opt_rule ( varargslist_equal ) )
DEF_RULE ( varargslist_name , nc , and_ ident( 2 ) , tok ( NAME ) , opt_rule ( varargslist_equal ) )
DEF_RULE ( varargslist_star , nc , and ( 2 ) , tok ( OP_STAR ) , opt_rule ( vfpdef ) )
DEF_RULE ( varargslist_dbl_star , nc , and ( 2 ) , tok ( OP_DBL_STAR ) , tok ( NAME ) )
DEF_RULE ( varargslist_equal , nc , ident | and ( 2 ) , tok ( DEL_EQUAL ) , rule ( test ) )
DEF_RULE ( vfpdef , nc , ident | and ( 1 ) , tok ( NAME ) )
DEF_RULE ( varargslist_equal , nc , and_ ident( 2 ) , tok ( DEL_EQUAL ) , rule ( test ) )
DEF_RULE ( vfpdef , nc , and_ ident( 1 ) , tok ( NAME ) )
// stmt: compound_stmt | simple_stmt
@ -90,7 +90,7 @@ DEF_RULE(stmt, nc, or(2), rule(compound_stmt), rule(simple_stmt))
// simple_stmt: small_stmt (';' small_stmt)* [';'] NEWLINE
DEF_RULE ( simple_stmt , nc , and ( 2 ) , rule ( simple_stmt_2 ) , tok ( NEWLINE ) )
DEF_RULE ( simple_stmt , nc , and_ident ( 2 ) , rule ( simple_stmt_2 ) , tok ( NEWLINE ) )
DEF_RULE ( simple_stmt_2 , c ( generic_all_nodes ) , list_with_end , rule ( small_stmt ) , tok ( DEL_SEMICOLON ) )
// small_stmt: expr_stmt | del_stmt | pass_stmt | flow_stmt | import_stmt | global_stmt | nonlocal_stmt | assert_stmt
@ -102,9 +102,9 @@ DEF_RULE(simple_stmt_2, c(generic_all_nodes), list_with_end, rule(small_stmt), t
DEF_RULE ( small_stmt , nc , or ( 8 ) , rule ( del_stmt ) , rule ( pass_stmt ) , rule ( flow_stmt ) , rule ( import_stmt ) , rule ( global_stmt ) , rule ( nonlocal_stmt ) , rule ( assert_stmt ) , rule ( expr_stmt ) )
DEF_RULE ( expr_stmt , c ( expr_stmt ) , and ( 2 ) , rule ( testlist_star_expr ) , opt_rule ( expr_stmt_2 ) )
DEF_RULE ( expr_stmt_2 , nc , or ( 2 ) , rule ( expr_stmt_augassign ) , rule ( expr_stmt_assign_list ) )
DEF_RULE ( expr_stmt_augassign , nc , and ( 2 ) , rule ( augassign ) , rule ( expr_stmt_6 ) )
DEF_RULE ( expr_stmt_augassign , nc , and_ident ( 2 ) , rule ( augassign ) , rule ( expr_stmt_6 ) )
DEF_RULE ( expr_stmt_assign_list , nc , one_or_more , rule ( expr_stmt_assign ) )
DEF_RULE ( expr_stmt_assign , nc , ident | and ( 2 ) , tok ( DEL_EQUAL ) , rule ( expr_stmt_6 ) )
DEF_RULE ( expr_stmt_assign , nc , and_ ident( 2 ) , tok ( DEL_EQUAL ) , rule ( expr_stmt_6 ) )
DEF_RULE ( expr_stmt_6 , nc , or ( 2 ) , rule ( yield_expr ) , rule ( testlist_star_expr ) )
DEF_RULE ( testlist_star_expr , c ( generic_tuple ) , list_with_end , rule ( testlist_star_expr_2 ) , tok ( DEL_COMMA ) )
DEF_RULE ( testlist_star_expr_2 , nc , or ( 2 ) , rule ( star_expr ) , rule ( test ) )
@ -127,8 +127,8 @@ DEF_RULE(continue_stmt, c(continue_stmt), and(1), tok(KW_CONTINUE))
DEF_RULE ( return_stmt , c ( return_stmt ) , and ( 2 ) , tok ( KW_RETURN ) , opt_rule ( testlist ) )
DEF_RULE ( yield_stmt , c ( yield_stmt ) , and ( 1 ) , rule ( yield_expr ) )
DEF_RULE ( raise_stmt , c ( raise_stmt ) , and ( 2 ) , tok ( KW_RAISE ) , opt_rule ( raise_stmt_arg ) )
DEF_RULE ( raise_stmt_arg , nc , and ( 2 ) , rule ( test ) , opt_rule ( raise_stmt_from ) )
DEF_RULE ( raise_stmt_from , nc , ident | and ( 2 ) , tok ( KW_FROM ) , rule ( test ) )
DEF_RULE ( raise_stmt_arg , nc , and_ident ( 2 ) , rule ( test ) , opt_rule ( raise_stmt_from ) )
DEF_RULE ( raise_stmt_from , nc , and_ ident( 2 ) , tok ( KW_FROM ) , rule ( test ) )
// import_stmt: import_name | import_from
// import_name: 'import' dotted_as_names
@ -146,14 +146,14 @@ DEF_RULE(import_stmt, nc, or(2), rule(import_name), rule(import_from))
DEF_RULE ( import_name , c ( import_name ) , and ( 2 ) , tok ( KW_IMPORT ) , rule ( dotted_as_names ) )
DEF_RULE ( import_from , c ( import_from ) , and ( 4 ) , tok ( KW_FROM ) , rule ( import_from_2 ) , tok ( KW_IMPORT ) , rule ( import_from_3 ) )
DEF_RULE ( import_from_2 , nc , or ( 2 ) , rule ( dotted_name ) , rule ( import_from_2b ) )
DEF_RULE ( import_from_2b , nc , and ( 2 ) , rule ( one_or_more_period_or_ellipsis ) , opt_rule ( dotted_name ) )
DEF_RULE ( import_from_2b , nc , and_ident ( 2 ) , rule ( one_or_more_period_or_ellipsis ) , opt_rule ( dotted_name ) )
DEF_RULE ( import_from_3 , nc , or ( 3 ) , tok ( OP_STAR ) , rule ( import_as_names_paren ) , rule ( import_as_names ) )
DEF_RULE ( import_as_names_paren , nc , ident | and ( 3 ) , tok ( DEL_PAREN_OPEN ) , rule ( import_as_names ) , tok ( DEL_PAREN_CLOSE ) )
DEF_RULE ( import_as_names_paren , nc , and_ ident( 3 ) , tok ( DEL_PAREN_OPEN ) , rule ( import_as_names ) , tok ( DEL_PAREN_CLOSE ) )
DEF_RULE ( one_or_more_period_or_ellipsis , nc , one_or_more , rule ( period_or_ellipsis ) )
DEF_RULE ( period_or_ellipsis , nc , or ( 2 ) , tok ( DEL_PERIOD ) , tok ( ELLIPSIS ) )
DEF_RULE ( import_as_name , nc , and ( 2 ) , tok ( NAME ) , opt_rule ( as_name ) )
DEF_RULE ( dotted_as_name , nc , and ( 2 ) , rule ( dotted_name ) , opt_rule ( as_name ) )
DEF_RULE ( as_name , nc , ident | and ( 2 ) , tok ( KW_AS ) , tok ( NAME ) )
DEF_RULE ( dotted_as_name , nc , and_ident ( 2 ) , rule ( dotted_name ) , opt_rule ( as_name ) )
DEF_RULE ( as_name , nc , and_ ident( 2 ) , tok ( KW_AS ) , tok ( NAME ) )
DEF_RULE ( import_as_names , nc , list_with_end , rule ( import_as_name ) , tok ( DEL_COMMA ) )
DEF_RULE ( dotted_as_names , nc , list , rule ( dotted_as_name ) , tok ( DEL_COMMA ) )
DEF_RULE ( dotted_name , nc , list , tok ( NAME ) , tok ( DEL_PERIOD ) )
@ -161,7 +161,7 @@ DEF_RULE(global_stmt, c(global_stmt), and(2), tok(KW_GLOBAL), rule(name_list))
DEF_RULE ( nonlocal_stmt , c ( nonlocal_stmt ) , and ( 2 ) , tok ( KW_NONLOCAL ) , rule ( name_list ) )
DEF_RULE ( name_list , nc , list , tok ( NAME ) , tok ( DEL_COMMA ) )
DEF_RULE ( assert_stmt , c ( assert_stmt ) , and ( 3 ) , tok ( KW_ASSERT ) , rule ( test ) , opt_rule ( assert_stmt_extra ) )
DEF_RULE ( assert_stmt_extra , nc , ident | and ( 2 ) , tok ( DEL_COMMA ) , rule ( test ) )
DEF_RULE ( assert_stmt_extra , nc , and_ ident( 2 ) , tok ( DEL_COMMA ) , rule ( test ) )
// compound_stmt: if_stmt | while_stmt | for_stmt | try_stmt | with_stmt | funcdef | classdef | decorated | async_stmt
// if_stmt: 'if' test ':' suite ('elif' test ':' suite)* ['else' ':' suite]
@ -189,18 +189,18 @@ DEF_RULE(while_stmt, c(while_stmt), and(5), tok(KW_WHILE), rule(test), tok(DEL_C
DEF_RULE ( for_stmt , c ( for_stmt ) , and ( 7 ) , tok ( KW_FOR ) , rule ( exprlist ) , tok ( KW_IN ) , rule ( testlist ) , tok ( DEL_COLON ) , rule ( suite ) , opt_rule ( else_stmt ) )
DEF_RULE ( try_stmt , c ( try_stmt ) , and ( 4 ) , tok ( KW_TRY ) , tok ( DEL_COLON ) , rule ( suite ) , rule ( try_stmt_2 ) )
DEF_RULE ( try_stmt_2 , nc , or ( 2 ) , rule ( try_stmt_except_and_more ) , rule ( try_stmt_finally ) )
DEF_RULE ( try_stmt_except_and_more , nc , and ( 3 ) , rule ( try_stmt_except_list ) , opt_rule ( else_stmt ) , opt_rule ( try_stmt_finally ) )
DEF_RULE ( try_stmt_except_and_more , nc , and_ident ( 3 ) , rule ( try_stmt_except_list ) , opt_rule ( else_stmt ) , opt_rule ( try_stmt_finally ) )
DEF_RULE ( try_stmt_except , nc , and ( 4 ) , tok ( KW_EXCEPT ) , opt_rule ( try_stmt_as_name ) , tok ( DEL_COLON ) , rule ( suite ) )
DEF_RULE ( try_stmt_as_name , nc , and ( 2 ) , rule ( test ) , opt_rule ( as_name ) )
DEF_RULE ( try_stmt_as_name , nc , and_ident ( 2 ) , rule ( test ) , opt_rule ( as_name ) )
DEF_RULE ( try_stmt_except_list , nc , one_or_more , rule ( try_stmt_except ) )
DEF_RULE ( try_stmt_finally , nc , and ( 3 ) , tok ( KW_FINALLY ) , tok ( DEL_COLON ) , rule ( suite ) )
DEF_RULE ( else_stmt , nc , ident | and ( 3 ) , tok ( KW_ELSE ) , tok ( DEL_COLON ) , rule ( suite ) )
DEF_RULE ( else_stmt , nc , and_ ident( 3 ) , tok ( KW_ELSE ) , tok ( DEL_COLON ) , rule ( suite ) )
DEF_RULE ( with_stmt , c ( with_stmt ) , and ( 4 ) , tok ( KW_WITH ) , rule ( with_stmt_list ) , tok ( DEL_COLON ) , rule ( suite ) )
DEF_RULE ( with_stmt_list , nc , list , rule ( with_item ) , tok ( DEL_COMMA ) )
DEF_RULE ( with_item , nc , and ( 2 ) , rule ( test ) , opt_rule ( with_item_as ) )
DEF_RULE ( with_item_as , nc , ident | and ( 2 ) , tok ( KW_AS ) , rule ( expr ) )
DEF_RULE ( with_item , nc , and_ident ( 2 ) , rule ( test ) , opt_rule ( with_item_as ) )
DEF_RULE ( with_item_as , nc , and_ ident( 2 ) , tok ( KW_AS ) , rule ( expr ) )
DEF_RULE ( suite , nc , or ( 2 ) , rule ( suite_block ) , rule ( simple_stmt ) )
DEF_RULE ( suite_block , nc , and ( 4 ) , tok ( NEWLINE ) , tok ( INDENT ) , rule ( suite_block_stmts ) , tok ( DEDENT ) )
DEF_RULE ( suite_block , nc , and_ident ( 4 ) , tok ( NEWLINE ) , tok ( INDENT ) , rule ( suite_block_stmts ) , tok ( DEDENT ) )
DEF_RULE ( suite_block_stmts , c ( generic_all_nodes ) , one_or_more , rule ( stmt ) )
// test: or_test ['if' or_test 'else' test] | lambdef
@ -209,11 +209,11 @@ DEF_RULE(suite_block_stmts, c(generic_all_nodes), one_or_more, rule(stmt))
// lambdef_nocond: 'lambda' [varargslist] ':' test_nocond
DEF_RULE ( test , nc , or ( 2 ) , rule ( lambdef ) , rule ( test_if_expr ) )
DEF_RULE ( test_if_expr , c ( test_if_expr ) , and ( 2 ) , rule ( or_test ) , opt_rule ( test_if_else ) )
DEF_RULE ( test_if_expr , c ( test_if_expr ) , and_ident ( 2 ) , rule ( or_test ) , opt_rule ( test_if_else ) )
DEF_RULE ( test_if_else , nc , and ( 4 ) , tok ( KW_IF ) , rule ( or_test ) , tok ( KW_ELSE ) , rule ( test ) )
DEF_RULE ( test_nocond , nc , or ( 2 ) , rule ( lambdef_nocond ) , rule ( or_test ) )
DEF_RULE ( lambdef , c ( lambdef ) , blank | and ( 4 ) , tok ( KW_LAMBDA ) , opt_rule ( varargslist ) , tok ( DEL_COLON ) , rule ( test ) )
DEF_RULE ( lambdef_nocond , c ( lambdef ) , blank | and ( 4 ) , tok ( KW_LAMBDA ) , opt_rule ( varargslist ) , tok ( DEL_COLON ) , rule ( test_nocond ) )
DEF_RULE ( lambdef , c ( lambdef ) , and_blank ( 4 ) , tok ( KW_LAMBDA ) , opt_rule ( varargslist ) , tok ( DEL_COLON ) , rule ( test ) )
DEF_RULE ( lambdef_nocond , c ( lambdef ) , and_blank ( 4 ) , tok ( KW_LAMBDA ) , opt_rule ( varargslist ) , tok ( DEL_COLON ) , rule ( test_nocond ) )
// or_test: and_test ('or' and_test)*
// and_test: not_test ('and' not_test)*
@ -251,18 +251,18 @@ DEF_RULE(arith_op, nc, or(2), tok(OP_PLUS), tok(OP_MINUS))
DEF_RULE ( term , c ( term ) , list , rule ( factor ) , rule ( term_op ) )
DEF_RULE ( term_op , nc , or ( 4 ) , tok ( OP_STAR ) , tok ( OP_SLASH ) , tok ( OP_PERCENT ) , tok ( OP_DBL_SLASH ) )
DEF_RULE ( factor , nc , or ( 2 ) , rule ( factor_2 ) , rule ( power ) )
DEF_RULE ( factor_2 , c ( factor_2 ) , and ( 2 ) , rule ( factor_op ) , rule ( factor ) )
DEF_RULE ( factor_2 , c ( factor_2 ) , and_ident ( 2 ) , rule ( factor_op ) , rule ( factor ) )
DEF_RULE ( factor_op , nc , or ( 3 ) , tok ( OP_PLUS ) , tok ( OP_MINUS ) , tok ( OP_TILDE ) )
DEF_RULE ( power , c ( power ) , and ( 2 ) , rule ( atom_expr ) , opt_rule ( power_dbl_star ) )
DEF_RULE ( power , c ( power ) , and_ident ( 2 ) , rule ( atom_expr ) , opt_rule ( power_dbl_star ) )
# if MICROPY_PY_ASYNC_AWAIT
DEF_RULE ( atom_expr , nc , or ( 2 ) , rule ( atom_expr_await ) , rule ( atom_expr_normal ) )
DEF_RULE ( atom_expr_await , c ( atom_expr_await ) , and ( 3 ) , tok ( KW_AWAIT ) , rule ( atom ) , opt_rule ( atom_expr_trailers ) )
# else
DEF_RULE ( atom_expr , nc , or ( 1 ) , rule ( atom_expr_normal ) )
# endif
DEF_RULE ( atom_expr_normal , c ( atom_expr_normal ) , and ( 2 ) , rule ( atom ) , opt_rule ( atom_expr_trailers ) )
DEF_RULE ( atom_expr_normal , c ( atom_expr_normal ) , and_ident ( 2 ) , rule ( atom ) , opt_rule ( atom_expr_trailers ) )
DEF_RULE ( atom_expr_trailers , c ( atom_expr_trailers ) , one_or_more , rule ( trailer ) )
DEF_RULE ( power_dbl_star , nc , ident | and ( 2 ) , tok ( OP_DBL_STAR ) , rule ( factor ) )
DEF_RULE ( power_dbl_star , nc , and_ ident( 2 ) , tok ( OP_DBL_STAR ) , rule ( factor ) )
// atom: '(' [yield_expr|testlist_comp] ')' | '[' [testlist_comp] ']' | '{' [dictorsetmaker] '}' | NAME | NUMBER | STRING+ | '...' | 'None' | 'True' | 'False'
// testlist_comp: (test|star_expr) ( comp_for | (',' (test|star_expr))* [','] )
@ -275,10 +275,10 @@ DEF_RULE(atom_paren, c(atom_paren), and(3), tok(DEL_PAREN_OPEN), opt_rule(atom_2
DEF_RULE ( atom_2b , nc , or ( 2 ) , rule ( yield_expr ) , rule ( testlist_comp ) )
DEF_RULE ( atom_bracket , c ( atom_bracket ) , and ( 3 ) , tok ( DEL_BRACKET_OPEN ) , opt_rule ( testlist_comp ) , tok ( DEL_BRACKET_CLOSE ) )
DEF_RULE ( atom_brace , c ( atom_brace ) , and ( 3 ) , tok ( DEL_BRACE_OPEN ) , opt_rule ( dictorsetmaker ) , tok ( DEL_BRACE_CLOSE ) )
DEF_RULE ( testlist_comp , nc , and ( 2 ) , rule ( testlist_comp_2 ) , opt_rule ( testlist_comp_3 ) )
DEF_RULE ( testlist_comp , nc , and_ident ( 2 ) , rule ( testlist_comp_2 ) , opt_rule ( testlist_comp_3 ) )
DEF_RULE ( testlist_comp_2 , nc , or ( 2 ) , rule ( star_expr ) , rule ( test ) )
DEF_RULE ( testlist_comp_3 , nc , or ( 2 ) , rule ( comp_for ) , rule ( testlist_comp_3b ) )
DEF_RULE ( testlist_comp_3b , nc , ident | and ( 2 ) , tok ( DEL_COMMA ) , opt_rule ( testlist_comp_3c ) )
DEF_RULE ( testlist_comp_3b , nc , and_ ident( 2 ) , tok ( DEL_COMMA ) , opt_rule ( testlist_comp_3c ) )
DEF_RULE ( testlist_comp_3c , nc , list_with_end , rule ( testlist_comp_2 ) , tok ( DEL_COMMA ) )
DEF_RULE ( trailer , nc , or ( 3 ) , rule ( trailer_paren ) , rule ( trailer_bracket ) , rule ( trailer_period ) )
DEF_RULE ( trailer_paren , c ( trailer_paren ) , and ( 3 ) , tok ( DEL_PAREN_OPEN ) , opt_rule ( arglist ) , tok ( DEL_PAREN_CLOSE ) )
@ -292,11 +292,11 @@ DEF_RULE(trailer_period, c(trailer_period), and(2), tok(DEL_PERIOD), tok(NAME))
# if MICROPY_PY_BUILTINS_SLICE
DEF_RULE ( subscriptlist , c ( generic_tuple ) , list_with_end , rule ( subscript ) , tok ( DEL_COMMA ) )
DEF_RULE ( subscript , nc , or ( 2 ) , rule ( subscript_3 ) , rule ( subscript_2 ) )
DEF_RULE ( subscript_2 , c ( subscript_2 ) , and ( 2 ) , rule ( test ) , opt_rule ( subscript_3 ) )
DEF_RULE ( subscript_2 , c ( subscript_2 ) , and_ident ( 2 ) , rule ( test ) , opt_rule ( subscript_3 ) )
DEF_RULE ( subscript_3 , c ( subscript_3 ) , and ( 2 ) , tok ( DEL_COLON ) , opt_rule ( subscript_3b ) )
DEF_RULE ( subscript_3b , nc , or ( 2 ) , rule ( subscript_3c ) , rule ( subscript_3d ) )
DEF_RULE ( subscript_3c , nc , and ( 2 ) , tok ( DEL_COLON ) , opt_rule ( test ) )
DEF_RULE ( subscript_3d , nc , and ( 2 ) , rule ( test ) , opt_rule ( sliceop ) )
DEF_RULE ( subscript_3d , nc , and_ident ( 2 ) , rule ( test ) , opt_rule ( sliceop ) )
DEF_RULE ( sliceop , nc , and ( 2 ) , tok ( DEL_COLON ) , opt_rule ( test ) )
# else
DEF_RULE ( subscriptlist , c ( generic_tuple ) , list_with_end , rule ( test ) , tok ( DEL_COMMA ) )
@ -310,10 +310,10 @@ DEF_RULE(exprlist, nc, list_with_end, rule(exprlist_2), tok(DEL_COMMA))
DEF_RULE ( exprlist_2 , nc , or ( 2 ) , rule ( star_expr ) , rule ( expr ) )
DEF_RULE ( testlist , c ( generic_tuple ) , list_with_end , rule ( test ) , tok ( DEL_COMMA ) )
// TODO dictorsetmaker lets through more than is allowed
DEF_RULE ( dictorsetmaker , nc , and ( 2 ) , rule ( dictorsetmaker_item ) , opt_rule ( dictorsetmaker_tail ) )
DEF_RULE ( dictorsetmaker , nc , and_ident ( 2 ) , rule ( dictorsetmaker_item ) , opt_rule ( dictorsetmaker_tail ) )
# if MICROPY_PY_BUILTINS_SET
DEF_RULE ( dictorsetmaker_item , c ( dictorsetmaker_item ) , and ( 2 ) , rule ( test ) , opt_rule ( dictorsetmaker_colon ) )
DEF_RULE ( dictorsetmaker_colon , nc , ident | and ( 2 ) , tok ( DEL_COLON ) , rule ( test ) )
DEF_RULE ( dictorsetmaker_item , c ( dictorsetmaker_item ) , and_ident ( 2 ) , rule ( test ) , opt_rule ( dictorsetmaker_colon ) )
DEF_RULE ( dictorsetmaker_colon , nc , and_ ident( 2 ) , tok ( DEL_COLON ) , rule ( test ) )
# else
DEF_RULE ( dictorsetmaker_item , c ( dictorsetmaker_item ) , and ( 3 ) , rule ( test ) , tok ( DEL_COLON ) , rule ( test ) )
# endif
@ -323,8 +323,8 @@ DEF_RULE(dictorsetmaker_list2, nc, list_with_end, rule(dictorsetmaker_item), tok
// classdef: 'class' NAME ['(' [arglist] ')'] ':' suite
DEF_RULE ( classdef , c ( classdef ) , blank | and ( 5 ) , tok ( KW_CLASS ) , tok ( NAME ) , opt_rule ( classdef_2 ) , tok ( DEL_COLON ) , rule ( suite ) )
DEF_RULE ( classdef_2 , nc , ident | and ( 3 ) , tok ( DEL_PAREN_OPEN ) , opt_rule ( arglist ) , tok ( DEL_PAREN_CLOSE ) )
DEF_RULE ( classdef , c ( classdef ) , and_blank ( 5 ) , tok ( KW_CLASS ) , tok ( NAME ) , opt_rule ( classdef_2 ) , tok ( DEL_COLON ) , rule ( suite ) )
DEF_RULE ( classdef_2 , nc , and_ ident( 3 ) , tok ( DEL_PAREN_OPEN ) , opt_rule ( arglist ) , tok ( DEL_PAREN_CLOSE ) )
// arglist: (argument ',')* (argument [','] | '*' test (',' argument)* [',' '**' test] | '**' test)
@ -341,11 +341,11 @@ DEF_RULE(arglist_dbl_star, nc, and(2), tok(OP_DBL_STAR), rule(test))
// comp_for: 'for' exprlist 'in' or_test [comp_iter]
// comp_if: 'if' test_nocond [comp_iter]
DEF_RULE ( argument , nc , and ( 2 ) , rule ( test ) , opt_rule ( argument_2 ) )
DEF_RULE ( argument , nc , and_ident ( 2 ) , rule ( test ) , opt_rule ( argument_2 ) )
DEF_RULE ( argument_2 , nc , or ( 2 ) , rule ( comp_for ) , rule ( argument_3 ) )
DEF_RULE ( argument_3 , nc , ident | and ( 2 ) , tok ( DEL_EQUAL ) , rule ( test ) )
DEF_RULE ( argument_3 , nc , and_ ident( 2 ) , tok ( DEL_EQUAL ) , rule ( test ) )
DEF_RULE ( comp_iter , nc , or ( 2 ) , rule ( comp_for ) , rule ( comp_if ) )
DEF_RULE ( comp_for , nc , blank | and ( 5 ) , tok ( KW_FOR ) , rule ( exprlist ) , tok ( KW_IN ) , rule ( or_test ) , opt_rule ( comp_iter ) )
DEF_RULE ( comp_for , nc , and_blank ( 5 ) , tok ( KW_FOR ) , rule ( exprlist ) , tok ( KW_IN ) , rule ( or_test ) , opt_rule ( comp_iter ) )
DEF_RULE ( comp_if , nc , and ( 3 ) , tok ( KW_IF ) , rule ( test_nocond ) , opt_rule ( comp_iter ) )
// # not used in grammar, but may appear in "node" passed from Parser to Compiler