File Explorer

/proc/thread-self/root/proc/self/root/proc/thread-self/root/lib64/python3.9/lib2to3

This explorer reads the filesystem of the server it runs on, so /workspace/user isn't present here. Browsing and the terminal still work against this server's own disk from /.

Grammar.txt8.5 KB · 197 lines
# Grammar for 2to3. This grammar supports Python 2.x and 3.x. # NOTE WELL: You should also follow all the steps listed at# https://devguide.python.org/grammar/ # Start symbols for the grammar:#	file_input is a module or sequence of commands read from an input file;#	single_input is a single interactive statement;#	eval_input is the input for the eval() and input() functions.# NB: compound_stmt in single_input is followed by extra NEWLINE!file_input: (NEWLINE | stmt)* ENDMARKERsingle_input: NEWLINE | simple_stmt | compound_stmt NEWLINEeval_input: testlist NEWLINE* ENDMARKER decorator: '@' dotted_name [ '(' [arglist] ')' ] NEWLINEdecorators: decorator+decorated: decorators (classdef | funcdef | async_funcdef)async_funcdef: ASYNC funcdeffuncdef: 'def' NAME parameters ['->' test] ':' suiteparameters: '(' [typedargslist] ')' # The following definition for typedarglist is equivalent to this set of rules:##     arguments = argument (',' argument)*#     argument = tfpdef ['=' test]#     kwargs = '**' tname [',']#     args = '*' [tname]#     kwonly_kwargs = (',' argument)* [',' [kwargs]]#     args_kwonly_kwargs = args kwonly_kwargs | kwargs#     poskeyword_args_kwonly_kwargs = arguments [',' [args_kwonly_kwargs]]#     typedargslist_no_posonly  = poskeyword_args_kwonly_kwargs | args_kwonly_kwargs#     typedarglist = arguments ',' '/' [',' [typedargslist_no_posonly]])|(typedargslist_no_posonly)"## It needs to be fully expanded to allow our LL(1) parser to work on it. typedargslist: tfpdef ['=' test] (',' tfpdef ['=' test])* ',' '/' [                     ',' [((tfpdef ['=' test] ',')* ('*' [tname] (',' tname ['=' test])*                            [',' ['**' tname [',']]] | '**' tname [','])                     | tfpdef ['=' test] (',' tfpdef ['=' test])* [','])]                ] | ((tfpdef ['=' test] ',')* ('*' [tname] (',' tname ['=' test])*                     [',' ['**' tname [',']]] | '**' tname [','])                     | tfpdef ['=' test] (',' tfpdef ['=' test])* [',']) tname: NAME [':' test]tfpdef: tname | '(' tfplist ')'tfplist: tfpdef (',' tfpdef)* [','] # The following definition for varargslist is equivalent to this set of rules:##     arguments = argument (',' argument )*#     argument = vfpdef ['=' test]#     kwargs = '**' vname [',']#     args = '*' [vname]#     kwonly_kwargs = (',' argument )* [',' [kwargs]]#     args_kwonly_kwargs = args kwonly_kwargs | kwargs#     poskeyword_args_kwonly_kwargs = arguments [',' [args_kwonly_kwargs]]#     vararglist_no_posonly = poskeyword_args_kwonly_kwargs | args_kwonly_kwargs#     varargslist = arguments ',' '/' [','[(vararglist_no_posonly)]] | (vararglist_no_posonly)## It needs to be fully expanded to allow our LL(1) parser to work on it. varargslist: vfpdef ['=' test ](',' vfpdef ['=' test])* ',' '/' [',' [                     ((vfpdef ['=' test] ',')* ('*' [vname] (',' vname ['=' test])*                            [',' ['**' vname [',']]] | '**' vname [','])                            | vfpdef ['=' test] (',' vfpdef ['=' test])* [','])                     ]] | ((vfpdef ['=' test] ',')*                     ('*' [vname] (',' vname ['=' test])*  [',' ['**' vname [',']]]| '**' vname [','])                     | vfpdef ['=' test] (',' vfpdef ['=' test])* [',']) vname: NAMEvfpdef: vname | '(' vfplist ')'vfplist: vfpdef (',' vfpdef)* [','] stmt: simple_stmt | compound_stmtsimple_stmt: small_stmt (';' small_stmt)* [';'] NEWLINEsmall_stmt: (expr_stmt | print_stmt  | del_stmt | pass_stmt | flow_stmt |             import_stmt | global_stmt | exec_stmt | assert_stmt)expr_stmt: testlist_star_expr (annassign | augassign (yield_expr|testlist) |                     ('=' (yield_expr|testlist_star_expr))*)annassign: ':' test ['=' test]testlist_star_expr: (test|star_expr) (',' (test|star_expr))* [',']augassign: ('+=' | '-=' | '*=' | '@=' | '/=' | '%=' | '&=' | '|=' | '^=' |            '<<=' | '>>=' | '**=' | '//=')# For normal and annotated assignments, additional restrictions enforced by the interpreterprint_stmt: 'print' ( [ test (',' test)* [','] ] |                      '>>' test [ (',' test)+ [','] ] )del_stmt: 'del' exprlistpass_stmt: 'pass'flow_stmt: break_stmt | continue_stmt | return_stmt | raise_stmt | yield_stmtbreak_stmt: 'break'continue_stmt: 'continue'return_stmt: 'return' [testlist_star_expr]yield_stmt: yield_exprraise_stmt: 'raise' [test ['from' test | ',' test [',' test]]]import_stmt: import_name | import_fromimport_name: 'import' dotted_as_namesimport_from: ('from' ('.'* dotted_name | '.'+)              'import' ('*' | '(' import_as_names ')' | import_as_names))import_as_name: NAME ['as' NAME]dotted_as_name: dotted_name ['as' NAME]import_as_names: import_as_name (',' import_as_name)* [',']dotted_as_names: dotted_as_name (',' dotted_as_name)*dotted_name: NAME ('.' NAME)*global_stmt: ('global' | 'nonlocal') NAME (',' NAME)*exec_stmt: 'exec' expr ['in' test [',' test]]assert_stmt: 'assert' test [',' test] compound_stmt: if_stmt | while_stmt | for_stmt | try_stmt | with_stmt | funcdef | classdef | decorated | async_stmtasync_stmt: ASYNC (funcdef | with_stmt | for_stmt)if_stmt: 'if' namedexpr_test ':' suite ('elif' namedexpr_test ':' suite)* ['else' ':' suite]while_stmt: 'while' namedexpr_test ':' suite ['else' ':' suite]for_stmt: 'for' exprlist 'in' testlist ':' suite ['else' ':' suite]try_stmt: ('try' ':' suite           ((except_clause ':' suite)+	    ['else' ':' suite]	    ['finally' ':' suite] |	   'finally' ':' suite))with_stmt: 'with' with_item (',' with_item)*  ':' suitewith_item: test ['as' expr]with_var: 'as' expr# NB compile.c makes sure that the default except clause is lastexcept_clause: 'except' [test [(',' | 'as') test]]suite: simple_stmt | NEWLINE INDENT stmt+ DEDENT # Backward compatibility cruft to support:# [ x for x in lambda: True, lambda: False if x() ]# even while also allowing:# lambda x: 5 if x else 2# (But not a mix of the two)testlist_safe: old_test [(',' old_test)+ [',']]old_test: or_test | old_lambdefold_lambdef: 'lambda' [varargslist] ':' old_test namedexpr_test: test [':=' test]test: or_test ['if' or_test 'else' test] | lambdefor_test: and_test ('or' and_test)*and_test: not_test ('and' not_test)*not_test: 'not' not_test | comparisoncomparison: expr (comp_op expr)*comp_op: '<'|'>'|'=='|'>='|'<='|'<>'|'!='|'in'|'not' 'in'|'is'|'is' 'not'star_expr: '*' exprexpr: xor_expr ('|' xor_expr)*xor_expr: and_expr ('^' and_expr)*and_expr: shift_expr ('&' shift_expr)*shift_expr: arith_expr (('<<'|'>>') arith_expr)*arith_expr: term (('+'|'-') term)*term: factor (('*'|'@'|'/'|'%'|'//') factor)*factor: ('+'|'-'|'~') factor | powerpower: [AWAIT] atom trailer* ['**' factor]atom: ('(' [yield_expr|testlist_gexp] ')' |       '[' [listmaker] ']' |       '{' [dictsetmaker] '}' |       '`' testlist1 '`' |       NAME | NUMBER | STRING+ | '.' '.' '.')listmaker: (namedexpr_test|star_expr) ( comp_for | (',' (namedexpr_test|star_expr))* [','] )testlist_gexp: (namedexpr_test|star_expr) ( comp_for | (',' (namedexpr_test|star_expr))* [','] )lambdef: 'lambda' [varargslist] ':' testtrailer: '(' [arglist] ')' | '[' subscriptlist ']' | '.' NAMEsubscriptlist: subscript (',' subscript)* [',']subscript: test | [test] ':' [test] [sliceop]sliceop: ':' [test]exprlist: (expr|star_expr) (',' (expr|star_expr))* [',']testlist: test (',' test)* [',']dictsetmaker: ( ((test ':' test | '**' expr)                 (comp_for | (',' (test ':' test | '**' expr))* [','])) |                ((test | star_expr)		 (comp_for | (',' (test | star_expr))* [','])) ) classdef: 'class' NAME ['(' [arglist] ')'] ':' suite arglist: argument (',' argument)* [','] # "test '=' test" is really "keyword '=' test", but we have no such token.# These need to be in a single rule to avoid grammar that is ambiguous# to our LL(1) parser. Even though 'test' includes '*expr' in star_expr,# we explicitly match '*' here, too, to give it proper precedence.# Illegal combinations and orderings are blocked in ast.c:# multiple (test comp_for) arguments are blocked; keyword unpackings# that precede iterable unpackings are blocked; etc.argument: ( test [comp_for] |            test ':=' test |            test '=' test |            '**' test |	        '*' test ) comp_iter: comp_for | comp_ifcomp_for: [ASYNC] 'for' exprlist 'in' testlist_safe [comp_iter]comp_if: 'if' old_test [comp_iter] testlist1: test (',' test)* # not used in grammar, but may appear in "node" passed from Parser to Compilerencoding_decl: NAME yield_expr: 'yield' [yield_arg]yield_arg: 'from' test | testlist_star_expr