<s> import os <EOL> import sys <EOL> import phplex <EOL> import phpast as ast <EOL> import ply . yacc as yacc <EOL> tokens = phplex . tokens <EOL> precedence = ( <EOL> ( '<STR_LIT:left>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' ) , <EOL> ( '<STR_LIT:left>' , '<STR_LIT>' ) , <EOL> ( '<STR_LIT:left>' , '<STR_LIT>' ) , <EOL> ( '<STR_LIT:left>' , '<STR_LIT>' ) , <EOL> ( '<STR_LIT:left>' , '<STR_LIT>' ) , <EOL> ( '<STR_LIT:right>' , '<STR_LIT>' ) , <EOL> ( '<STR_LIT:left>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' ) , <EOL> ( '<STR_LIT:left>' , '<STR_LIT>' , '<STR_LIT>' ) , <EOL> ( '<STR_LIT:left>' , '<STR_LIT>' ) , <EOL> ( '<STR_LIT:left>' , '<STR_LIT>' ) , <EOL> ( '<STR_LIT:left>' , '<STR_LIT>' ) , <EOL> ( '<STR_LIT:left>' , '<STR_LIT>' ) , <EOL> ( '<STR_LIT:left>' , '<STR_LIT>' ) , <EOL> ( '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' ) , <EOL> ( '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' ) , <EOL> ( '<STR_LIT:left>' , '<STR_LIT>' , '<STR_LIT>' ) , <EOL> ( '<STR_LIT:left>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' ) , <EOL> ( '<STR_LIT:left>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' ) , <EOL> ( '<STR_LIT:right>' , '<STR_LIT>' ) , <EOL> ( '<STR_LIT>' , '<STR_LIT>' ) , <EOL> ( '<STR_LIT:right>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' ) , <EOL> ( '<STR_LIT:right>' , '<STR_LIT>' ) , <EOL> ( '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' ) , <EOL> ( '<STR_LIT:left>' , '<STR_LIT>' ) , <EOL> ( '<STR_LIT:right>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' ) , <EOL> ) <EOL> def p_start ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] <EOL> def p_top_statement_list ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:3> : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] + [ p [ <NUM_LIT:2> ] ] <EOL> else : <EOL> p [ <NUM_LIT:0> ] = [ ] <EOL> def p_top_statement ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:2> : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] <EOL> else : <EOL> pass <EOL> def p_top_statement_namespace ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:4> : <EOL> p [ <NUM_LIT:0> ] = ast . Namespace ( p [ <NUM_LIT:2> ] , [ ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> elif len ( p ) == <NUM_LIT:5> : <EOL> p [ <NUM_LIT:0> ] = ast . Namespace ( None , p [ <NUM_LIT:3> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> else : <EOL> p [ <NUM_LIT:0> ] = ast . Namespace ( p [ <NUM_LIT:2> ] , p [ <NUM_LIT:4> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_top_statement_constant ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = ast . ConstantDeclarations ( p [ <NUM_LIT:2> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_top_statement_use ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = ast . UseDeclarations ( p [ <NUM_LIT:2> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_use_declarations ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:4> : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] + [ p [ <NUM_LIT:3> ] ] <EOL> else : <EOL> p [ <NUM_LIT:0> ] = [ p [ <NUM_LIT:1> ] ] <EOL> def p_use_declaration ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:2> : <EOL> p [ <NUM_LIT:0> ] = ast . UseDeclaration ( p [ <NUM_LIT:1> ] , None , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> elif len ( p ) == <NUM_LIT:3> : <EOL> p [ <NUM_LIT:0> ] = ast . UseDeclaration ( p [ <NUM_LIT:1> ] + p [ <NUM_LIT:2> ] , None , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> elif len ( p ) == <NUM_LIT:4> : <EOL> p [ <NUM_LIT:0> ] = ast . UseDeclaration ( p [ <NUM_LIT:1> ] , p [ <NUM_LIT:3> ] , lineno = p . lineno ( <NUM_LIT:2> ) ) <EOL> else : <EOL> p [ <NUM_LIT:0> ] = ast . UseDeclaration ( p [ <NUM_LIT:1> ] + p [ <NUM_LIT:2> ] , p [ <NUM_LIT:4> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_constant_declarations ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:4> : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] + [ p [ <NUM_LIT:3> ] ] <EOL> else : <EOL> p [ <NUM_LIT:0> ] = [ p [ <NUM_LIT:1> ] ] <EOL> def p_constant_declaration ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = ast . ConstantDeclaration ( p [ <NUM_LIT:1> ] , p [ <NUM_LIT:3> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_inner_statement_list ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:3> : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] + [ p [ <NUM_LIT:2> ] ] <EOL> else : <EOL> p [ <NUM_LIT:0> ] = [ ] <EOL> def p_inner_statement ( p ) : <EOL> '''<STR_LIT>''' <EOL> assert len ( p ) == <NUM_LIT:2> , "<STR_LIT>" <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] <EOL> def p_statement_block ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = ast . Block ( p [ <NUM_LIT:2> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_statement_if ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:8> : <EOL> p [ <NUM_LIT:0> ] = ast . If ( p [ <NUM_LIT:3> ] , p [ <NUM_LIT:5> ] , p [ <NUM_LIT:6> ] , p [ <NUM_LIT:7> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> else : <EOL> p [ <NUM_LIT:0> ] = ast . If ( p [ <NUM_LIT:3> ] , ast . Block ( p [ <NUM_LIT:6> ] , lineno = p . lineno ( <NUM_LIT:5> ) ) , <EOL> p [ <NUM_LIT:7> ] , p [ <NUM_LIT:8> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_statement_while ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = ast . While ( p [ <NUM_LIT:3> ] , p [ <NUM_LIT:5> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_statement_do_while ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = ast . DoWhile ( p [ <NUM_LIT:2> ] , p [ <NUM_LIT:5> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_statement_for ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = ast . For ( p [ <NUM_LIT:3> ] , p [ <NUM_LIT:5> ] , p [ <NUM_LIT:7> ] , p [ <NUM_LIT:9> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_statement_foreach ( p ) : <EOL> '<STR_LIT>' <EOL> if p [ <NUM_LIT:6> ] is None : <EOL> p [ <NUM_LIT:0> ] = ast . Foreach ( p [ <NUM_LIT:3> ] , None , p [ <NUM_LIT:5> ] , p [ <NUM_LIT:8> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> else : <EOL> p [ <NUM_LIT:0> ] = ast . Foreach ( p [ <NUM_LIT:3> ] , p [ <NUM_LIT:5> ] , p [ <NUM_LIT:6> ] , p [ <NUM_LIT:8> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_statement_switch ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = ast . Switch ( p [ <NUM_LIT:3> ] , p [ <NUM_LIT:5> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_statement_break ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:3> : <EOL> p [ <NUM_LIT:0> ] = ast . Break ( None , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> else : <EOL> p [ <NUM_LIT:0> ] = ast . Break ( p [ <NUM_LIT:2> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_statement_continue ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:3> : <EOL> p [ <NUM_LIT:0> ] = ast . Continue ( None , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> else : <EOL> p [ <NUM_LIT:0> ] = ast . Continue ( p [ <NUM_LIT:2> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_statement_return ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:3> : <EOL> p [ <NUM_LIT:0> ] = ast . Return ( None , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> else : <EOL> p [ <NUM_LIT:0> ] = ast . Return ( p [ <NUM_LIT:2> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_statement_global ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = ast . Global ( p [ <NUM_LIT:2> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_statement_static ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = ast . Static ( p [ <NUM_LIT:2> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_statement_echo ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = ast . Echo ( p [ <NUM_LIT:2> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_statement_inline_html ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = ast . InlineHTML ( p [ <NUM_LIT:1> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_statement_expr ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] <EOL> def p_statement_unset ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = ast . Unset ( p [ <NUM_LIT:3> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_statement_empty ( p ) : <EOL> '<STR_LIT>' <EOL> pass <EOL> def p_statement_try ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = ast . Try ( p [ <NUM_LIT:3> ] , [ ast . Catch ( p [ <NUM_LIT:7> ] , ast . Variable ( p [ <NUM_LIT:8> ] , lineno = p . lineno ( <NUM_LIT:8> ) ) , <EOL> p [ <NUM_LIT:11> ] , lineno = p . lineno ( <NUM_LIT:5> ) ) ] + p [ <NUM_LIT> ] , <EOL> lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_additional_catches ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:10> : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] + [ ast . Catch ( p [ <NUM_LIT:4> ] , ast . Variable ( p [ <NUM_LIT:5> ] , lineno = p . lineno ( <NUM_LIT:5> ) ) , <EOL> p [ <NUM_LIT:8> ] , lineno = p . lineno ( <NUM_LIT:2> ) ) ] <EOL> else : <EOL> p [ <NUM_LIT:0> ] = [ ] <EOL> def p_statement_throw ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = ast . Throw ( p [ <NUM_LIT:2> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_statement_declare ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = ast . Declare ( p [ <NUM_LIT:3> ] , p [ <NUM_LIT:5> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_declare_list ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:4> : <EOL> p [ <NUM_LIT:0> ] = [ ast . Directive ( p [ <NUM_LIT:1> ] , p [ <NUM_LIT:3> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) ] <EOL> else : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] + [ ast . Directive ( p [ <NUM_LIT:3> ] , p [ <NUM_LIT:5> ] , lineno = p . lineno ( <NUM_LIT:2> ) ) ] <EOL> def p_declare_statement ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:2> : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] <EOL> else : <EOL> p [ <NUM_LIT:0> ] = ast . Block ( p [ <NUM_LIT:2> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_elseif_list ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:2> : <EOL> p [ <NUM_LIT:0> ] = [ ] <EOL> else : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] + [ ast . ElseIf ( p [ <NUM_LIT:4> ] , p [ <NUM_LIT:6> ] , lineno = p . lineno ( <NUM_LIT:2> ) ) ] <EOL> def p_else_single ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:3> : <EOL> p [ <NUM_LIT:0> ] = ast . Else ( p [ <NUM_LIT:2> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_new_elseif_list ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:2> : <EOL> p [ <NUM_LIT:0> ] = [ ] <EOL> else : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] + [ ast . ElseIf ( p [ <NUM_LIT:4> ] , ast . Block ( p [ <NUM_LIT:7> ] , lineo = p . lineno ( <NUM_LIT:6> ) ) , <EOL> lineno = p . lineno ( <NUM_LIT:2> ) ) ] <EOL> def p_new_else_single ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:4> : <EOL> p [ <NUM_LIT:0> ] = ast . Else ( ast . Block ( p [ <NUM_LIT:3> ] , lineno = p . lineno ( <NUM_LIT:2> ) ) , <EOL> lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_while_statement ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:2> : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] <EOL> else : <EOL> p [ <NUM_LIT:0> ] = ast . Block ( p [ <NUM_LIT:2> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_for_expr ( p ) : <EOL> '''<STR_LIT>''' <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] <EOL> def p_non_empty_for_expr ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:4> : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] + [ p [ <NUM_LIT:3> ] ] <EOL> else : <EOL> p [ <NUM_LIT:0> ] = [ p [ <NUM_LIT:1> ] ] <EOL> def p_for_statement ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:2> : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] <EOL> else : <EOL> p [ <NUM_LIT:0> ] = ast . Block ( p [ <NUM_LIT:2> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_foreach_variable ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:2> : <EOL> p [ <NUM_LIT:0> ] = ast . ForeachVariable ( p [ <NUM_LIT:1> ] , False , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> else : <EOL> p [ <NUM_LIT:0> ] = ast . ForeachVariable ( p [ <NUM_LIT:2> ] , True , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_foreach_optional_arg ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:3> : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:2> ] <EOL> def p_foreach_statement ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:2> : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] <EOL> else : <EOL> p [ <NUM_LIT:0> ] = ast . Block ( p [ <NUM_LIT:2> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_switch_case_list ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:4> : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:2> ] <EOL> else : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:3> ] <EOL> def p_switch_case_list_colon ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:5> : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:2> ] <EOL> else : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:3> ] <EOL> def p_case_list ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:6> : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] + [ ast . Case ( p [ <NUM_LIT:3> ] , p [ <NUM_LIT:5> ] , lineno = p . lineno ( <NUM_LIT:2> ) ) ] <EOL> elif len ( p ) == <NUM_LIT:5> : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] + [ ast . Default ( p [ <NUM_LIT:4> ] , lineno = p . lineno ( <NUM_LIT:2> ) ) ] <EOL> else : <EOL> p [ <NUM_LIT:0> ] = [ ] <EOL> def p_case_separator ( p ) : <EOL> '''<STR_LIT>''' <EOL> pass <EOL> def p_global_var_list ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:4> : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] + [ p [ <NUM_LIT:3> ] ] <EOL> else : <EOL> p [ <NUM_LIT:0> ] = [ p [ <NUM_LIT:1> ] ] <EOL> def p_global_var ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:2> : <EOL> p [ <NUM_LIT:0> ] = ast . Variable ( p [ <NUM_LIT:1> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> elif len ( p ) == <NUM_LIT:3> : <EOL> p [ <NUM_LIT:0> ] = ast . Variable ( p [ <NUM_LIT:2> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> else : <EOL> p [ <NUM_LIT:0> ] = ast . Variable ( p [ <NUM_LIT:3> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_static_var_list ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:4> : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] + [ p [ <NUM_LIT:3> ] ] <EOL> else : <EOL> p [ <NUM_LIT:0> ] = [ p [ <NUM_LIT:1> ] ] <EOL> def p_static_var ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:4> : <EOL> p [ <NUM_LIT:0> ] = ast . StaticVariable ( p [ <NUM_LIT:1> ] , p [ <NUM_LIT:3> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> else : <EOL> p [ <NUM_LIT:0> ] = ast . StaticVariable ( p [ <NUM_LIT:1> ] , None , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_echo_expr_list ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:4> : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] + [ p [ <NUM_LIT:3> ] ] <EOL> else : <EOL> p [ <NUM_LIT:0> ] = [ p [ <NUM_LIT:1> ] ] <EOL> def p_unset_variables ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:4> : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] + [ p [ <NUM_LIT:3> ] ] <EOL> else : <EOL> p [ <NUM_LIT:0> ] = [ p [ <NUM_LIT:1> ] ] <EOL> def p_unset_variable ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] <EOL> def p_function_declaration_statement ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = ast . Function ( p [ <NUM_LIT:3> ] , p [ <NUM_LIT:5> ] , p [ <NUM_LIT:8> ] , p [ <NUM_LIT:2> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_class_declaration_statement ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:8> : <EOL> p [ <NUM_LIT:0> ] = ast . Class ( p [ <NUM_LIT:2> ] , p [ <NUM_LIT:1> ] , p [ <NUM_LIT:3> ] , p [ <NUM_LIT:4> ] , p [ <NUM_LIT:6> ] , lineno = p . lineno ( <NUM_LIT:2> ) ) <EOL> else : <EOL> p [ <NUM_LIT:0> ] = ast . Interface ( p [ <NUM_LIT:2> ] , p [ <NUM_LIT:3> ] , p [ <NUM_LIT:5> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_class_entry_type ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:3> : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] . lower ( ) <EOL> def p_extends_from ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:3> : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:2> ] <EOL> def p_fully_qualified_class_name ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:2> : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] <EOL> elif len ( p ) == <NUM_LIT:3> : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] + p [ <NUM_LIT:2> ] <EOL> else : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] + p [ <NUM_LIT:2> ] + p [ <NUM_LIT:3> ] <EOL> def p_implements_list ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:3> : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:2> ] <EOL> else : <EOL> p [ <NUM_LIT:0> ] = [ ] <EOL> def p_class_statement_list ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:3> : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] + [ p [ <NUM_LIT:2> ] ] <EOL> else : <EOL> p [ <NUM_LIT:0> ] = [ ] <EOL> def p_class_statement ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:9> : <EOL> p [ <NUM_LIT:0> ] = ast . Method ( p [ <NUM_LIT:4> ] , p [ <NUM_LIT:1> ] , p [ <NUM_LIT:6> ] , p [ <NUM_LIT:8> ] , p [ <NUM_LIT:3> ] , lineno = p . lineno ( <NUM_LIT:2> ) ) <EOL> elif len ( p ) == <NUM_LIT:4> : <EOL> p [ <NUM_LIT:0> ] = ast . ClassVariables ( p [ <NUM_LIT:1> ] , p [ <NUM_LIT:2> ] , lineno = p . lineno ( <NUM_LIT:3> ) ) <EOL> else : <EOL> p [ <NUM_LIT:0> ] = ast . ClassConstants ( p [ <NUM_LIT:1> ] , lineno = p . lineno ( <NUM_LIT:2> ) ) <EOL> def p_class_variable_declaration_initial ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:6> : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] + [ ast . ClassVariable ( p [ <NUM_LIT:3> ] , p [ <NUM_LIT:5> ] , lineno = p . lineno ( <NUM_LIT:2> ) ) ] <EOL> else : <EOL> p [ <NUM_LIT:0> ] = [ ast . ClassVariable ( p [ <NUM_LIT:1> ] , p [ <NUM_LIT:3> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) ] <EOL> def p_class_variable_declaration_no_initial ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:4> : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] + [ ast . ClassVariable ( p [ <NUM_LIT:3> ] , None , lineno = p . lineno ( <NUM_LIT:2> ) ) ] <EOL> else : <EOL> p [ <NUM_LIT:0> ] = [ ast . ClassVariable ( p [ <NUM_LIT:1> ] , None , lineno = p . lineno ( <NUM_LIT:1> ) ) ] <EOL> def p_class_constant_declaration ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:6> : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] + [ ast . ClassConstant ( p [ <NUM_LIT:3> ] , p [ <NUM_LIT:5> ] , lineno = p . lineno ( <NUM_LIT:2> ) ) ] <EOL> else : <EOL> p [ <NUM_LIT:0> ] = [ ast . ClassConstant ( p [ <NUM_LIT:2> ] , p [ <NUM_LIT:4> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) ] <EOL> def p_interface_list ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:4> : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] + [ p [ <NUM_LIT:3> ] ] <EOL> else : <EOL> p [ <NUM_LIT:0> ] = [ p [ <NUM_LIT:1> ] ] <EOL> def p_interface_extends_list ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:3> : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:2> ] <EOL> def p_variable_modifiers_non_empty ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] <EOL> def p_variable_modifiers_var ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = [ ] <EOL> def p_method_modifiers_non_empty ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] <EOL> def p_method_modifiers_empty ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = [ ] <EOL> def p_method_body ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:4> : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:2> ] <EOL> else : <EOL> p [ <NUM_LIT:0> ] = [ ] <EOL> def p_non_empty_member_modifiers ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:3> : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] + [ p [ <NUM_LIT:2> ] ] <EOL> else : <EOL> p [ <NUM_LIT:0> ] = [ p [ <NUM_LIT:1> ] ] <EOL> def p_member_modifier ( p ) : <EOL> '''<STR_LIT>''' <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] . lower ( ) <EOL> def p_is_reference ( p ) : <EOL> '''<STR_LIT>''' <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] is not None <EOL> def p_parameter_list ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:4> : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] + [ p [ <NUM_LIT:3> ] ] <EOL> else : <EOL> p [ <NUM_LIT:0> ] = [ p [ <NUM_LIT:1> ] ] <EOL> def p_parameter_list_empty ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = [ ] <EOL> def p_parameter ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:2> : <EOL> p [ <NUM_LIT:0> ] = ast . FormalParameter ( p [ <NUM_LIT:1> ] , None , False , None , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> elif len ( p ) == <NUM_LIT:3> and p [ <NUM_LIT:1> ] == '<STR_LIT:&>' : <EOL> p [ <NUM_LIT:0> ] = ast . FormalParameter ( p [ <NUM_LIT:2> ] , None , True , None , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> elif len ( p ) == <NUM_LIT:3> and p [ <NUM_LIT:1> ] != '<STR_LIT:&>' : <EOL> p [ <NUM_LIT:0> ] = ast . FormalParameter ( p [ <NUM_LIT:2> ] , None , False , p [ <NUM_LIT:1> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> elif len ( p ) == <NUM_LIT:4> and p [ <NUM_LIT:2> ] != '<STR_LIT:&>' : <EOL> p [ <NUM_LIT:0> ] = ast . FormalParameter ( p [ <NUM_LIT:1> ] , p [ <NUM_LIT:3> ] , False , None , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> elif len ( p ) == <NUM_LIT:4> and p [ <NUM_LIT:2> ] == '<STR_LIT:&>' : <EOL> p [ <NUM_LIT:0> ] = ast . FormalParameter ( p [ <NUM_LIT:3> ] , None , True , p [ <NUM_LIT:1> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> elif len ( p ) == <NUM_LIT:5> and p [ <NUM_LIT:1> ] == '<STR_LIT:&>' : <EOL> p [ <NUM_LIT:0> ] = ast . FormalParameter ( p [ <NUM_LIT:2> ] , p [ <NUM_LIT:4> ] , True , None , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> elif len ( p ) == <NUM_LIT:5> and p [ <NUM_LIT:1> ] != '<STR_LIT:&>' : <EOL> p [ <NUM_LIT:0> ] = ast . FormalParameter ( p [ <NUM_LIT:2> ] , p [ <NUM_LIT:4> ] , False , p [ <NUM_LIT:1> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> else : <EOL> p [ <NUM_LIT:0> ] = ast . FormalParameter ( p [ <NUM_LIT:3> ] , p [ <NUM_LIT:5> ] , True , p [ <NUM_LIT:1> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_expr_variable ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] <EOL> def p_expr_assign ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:5> : <EOL> p [ <NUM_LIT:0> ] = ast . Assignment ( p [ <NUM_LIT:1> ] , p [ <NUM_LIT:4> ] , True , lineno = p . lineno ( <NUM_LIT:2> ) ) <EOL> else : <EOL> p [ <NUM_LIT:0> ] = ast . Assignment ( p [ <NUM_LIT:1> ] , p [ <NUM_LIT:3> ] , False , lineno = p . lineno ( <NUM_LIT:2> ) ) <EOL> def p_expr_new ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = ast . New ( p [ <NUM_LIT:2> ] , p [ <NUM_LIT:3> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_class_name_reference ( p ) : <EOL> '''<STR_LIT>''' <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] <EOL> def p_class_name ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:2> : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] <EOL> elif len ( p ) == <NUM_LIT:3> : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] + p [ <NUM_LIT:2> ] <EOL> else : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] + p [ <NUM_LIT:2> ] + p [ <NUM_LIT:3> ] <EOL> def p_class_name_static ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] . lower ( ) <EOL> def p_dynamic_class_name_reference ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:5> : <EOL> name , dims = p [ <NUM_LIT:3> ] <EOL> p [ <NUM_LIT:0> ] = ast . ObjectProperty ( p [ <NUM_LIT:1> ] , name , lineno = p . lineno ( <NUM_LIT:2> ) ) <EOL> for class_ , dim , lineno in dims : <EOL> p [ <NUM_LIT:0> ] = class_ ( p [ <NUM_LIT:0> ] , dim , lineno = lineno ) <EOL> for name , dims in p [ <NUM_LIT:4> ] : <EOL> p [ <NUM_LIT:0> ] = ast . ObjectProperty ( p [ <NUM_LIT:0> ] , name , lineno = p . lineno ( <NUM_LIT:2> ) ) <EOL> for class_ , dim , lineno in dims : <EOL> p [ <NUM_LIT:0> ] = class_ ( p [ <NUM_LIT:0> ] , dim , lineno = lineno ) <EOL> else : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] <EOL> def p_dynamic_class_name_variable_properties ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:3> : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] + [ p [ <NUM_LIT:2> ] ] <EOL> else : <EOL> p [ <NUM_LIT:0> ] = [ ] <EOL> def p_dynamic_class_name_variable_property ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:2> ] <EOL> def p_ctor_arguments ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:4> : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:2> ] <EOL> else : <EOL> p [ <NUM_LIT:0> ] = [ ] <EOL> def p_expr_clone ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = ast . Clone ( p [ <NUM_LIT:2> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_expr_list_assign ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = ast . ListAssignment ( p [ <NUM_LIT:3> ] , p [ <NUM_LIT:6> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_assignment_list ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:4> : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] + [ p [ <NUM_LIT:3> ] ] <EOL> else : <EOL> p [ <NUM_LIT:0> ] = [ p [ <NUM_LIT:1> ] ] <EOL> def p_assignment_list_element ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:2> : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] <EOL> else : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:3> ] <EOL> def p_variable ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:6> : <EOL> name , dims = p [ <NUM_LIT:3> ] <EOL> params = p [ <NUM_LIT:4> ] <EOL> if params is not None : <EOL> p [ <NUM_LIT:0> ] = ast . MethodCall ( p [ <NUM_LIT:1> ] , name , params , lineno = p . lineno ( <NUM_LIT:2> ) ) <EOL> else : <EOL> p [ <NUM_LIT:0> ] = ast . ObjectProperty ( p [ <NUM_LIT:1> ] , name , lineno = p . lineno ( <NUM_LIT:2> ) ) <EOL> for class_ , dim , lineno in dims : <EOL> p [ <NUM_LIT:0> ] = class_ ( p [ <NUM_LIT:0> ] , dim , lineno = lineno ) <EOL> for ( name , dims ) , params in p [ <NUM_LIT:5> ] : <EOL> if params is not None : <EOL> p [ <NUM_LIT:0> ] = ast . MethodCall ( p [ <NUM_LIT:0> ] , name , params , lineno = p . lineno ( <NUM_LIT:2> ) ) <EOL> else : <EOL> p [ <NUM_LIT:0> ] = ast . ObjectProperty ( p [ <NUM_LIT:0> ] , name , lineno = p . lineno ( <NUM_LIT:2> ) ) <EOL> for class_ , dim , lineno in dims : <EOL> p [ <NUM_LIT:0> ] = class_ ( p [ <NUM_LIT:0> ] , dim , lineno = lineno ) <EOL> else : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] <EOL> def p_base_variable_with_function_calls ( p ) : <EOL> '''<STR_LIT>''' <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] <EOL> def p_function_call ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:5> : <EOL> p [ <NUM_LIT:0> ] = ast . FunctionCall ( p [ <NUM_LIT:1> ] , p [ <NUM_LIT:3> ] , lineno = p . lineno ( <NUM_LIT:2> ) ) <EOL> elif len ( p ) == <NUM_LIT:6> : <EOL> p [ <NUM_LIT:0> ] = ast . FunctionCall ( p [ <NUM_LIT:1> ] + p [ <NUM_LIT:2> ] , p [ <NUM_LIT:4> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> else : <EOL> p [ <NUM_LIT:0> ] = ast . FunctionCall ( p [ <NUM_LIT:1> ] + p [ <NUM_LIT:2> ] + p [ <NUM_LIT:3> ] , p [ <NUM_LIT:5> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_function_call_static ( p ) : <EOL> '''<STR_LIT>''' <EOL> p [ <NUM_LIT:0> ] = ast . StaticMethodCall ( p [ <NUM_LIT:1> ] , p [ <NUM_LIT:3> ] , p [ <NUM_LIT:5> ] , lineno = p . lineno ( <NUM_LIT:2> ) ) <EOL> def p_function_call_variable ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = ast . FunctionCall ( p [ <NUM_LIT:1> ] , p [ <NUM_LIT:3> ] , lineno = p . lineno ( <NUM_LIT:2> ) ) <EOL> def p_method_or_not ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:4> : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:2> ] <EOL> def p_variable_properties ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:3> : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] + [ p [ <NUM_LIT:2> ] ] <EOL> else : <EOL> p [ <NUM_LIT:0> ] = [ ] <EOL> def p_variable_property ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = ( p [ <NUM_LIT:2> ] , p [ <NUM_LIT:3> ] ) <EOL> def p_base_variable ( p ) : <EOL> '''<STR_LIT>''' <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] <EOL> def p_simple_indirect_reference ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:3> : <EOL> p [ <NUM_LIT:0> ] = ast . Variable ( p [ <NUM_LIT:2> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> else : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] <EOL> def p_static_member ( p ) : <EOL> '''<STR_LIT>''' <EOL> p [ <NUM_LIT:0> ] = ast . StaticProperty ( p [ <NUM_LIT:1> ] , p [ <NUM_LIT:3> ] , lineno = p . lineno ( <NUM_LIT:2> ) ) <EOL> def p_variable_class_name ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] <EOL> def p_reference_variable_array_offset ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = ast . ArrayOffset ( p [ <NUM_LIT:1> ] , p [ <NUM_LIT:3> ] , lineno = p . lineno ( <NUM_LIT:2> ) ) <EOL> def p_reference_variable_string_offset ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = ast . StringOffset ( p [ <NUM_LIT:1> ] , p [ <NUM_LIT:3> ] , lineno = p . lineno ( <NUM_LIT:2> ) ) <EOL> def p_reference_variable_compound_variable ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] <EOL> def p_compound_variable ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:2> : <EOL> p [ <NUM_LIT:0> ] = ast . Variable ( p [ <NUM_LIT:1> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> else : <EOL> p [ <NUM_LIT:0> ] = ast . Variable ( p [ <NUM_LIT:3> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_dim_offset ( p ) : <EOL> '''<STR_LIT>''' <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] <EOL> def p_object_property ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:3> : <EOL> p [ <NUM_LIT:0> ] = ( p [ <NUM_LIT:1> ] , p [ <NUM_LIT:2> ] ) <EOL> else : <EOL> p [ <NUM_LIT:0> ] = ( p [ <NUM_LIT:1> ] , [ ] ) <EOL> def p_object_dim_list_empty ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = [ ] <EOL> def p_object_dim_list_array_offset ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] + [ ( ast . ArrayOffset , p [ <NUM_LIT:3> ] , p . lineno ( <NUM_LIT:2> ) ) ] <EOL> def p_object_dim_list_string_offset ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] + [ ( ast . StringOffset , p [ <NUM_LIT:3> ] , p . lineno ( <NUM_LIT:2> ) ) ] <EOL> def p_variable_name ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:2> : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] <EOL> else : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:2> ] <EOL> def p_variable_without_objects ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] <EOL> def p_expr_scalar ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] <EOL> def p_expr_array ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = ast . Array ( p [ <NUM_LIT:3> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_array_pair_list ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:2> : <EOL> p [ <NUM_LIT:0> ] = [ ] <EOL> else : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] <EOL> def p_non_empty_array_pair_list_item ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:5> : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] + [ ast . ArrayElement ( None , p [ <NUM_LIT:4> ] , True , lineno = p . lineno ( <NUM_LIT:2> ) ) ] <EOL> elif len ( p ) == <NUM_LIT:4> : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] + [ ast . ArrayElement ( None , p [ <NUM_LIT:3> ] , False , lineno = p . lineno ( <NUM_LIT:2> ) ) ] <EOL> elif len ( p ) == <NUM_LIT:3> : <EOL> p [ <NUM_LIT:0> ] = [ ast . ArrayElement ( None , p [ <NUM_LIT:2> ] , True , lineno = p . lineno ( <NUM_LIT:1> ) ) ] <EOL> else : <EOL> p [ <NUM_LIT:0> ] = [ ast . ArrayElement ( None , p [ <NUM_LIT:1> ] , False , lineno = p . lineno ( <NUM_LIT:1> ) ) ] <EOL> def p_non_empty_array_pair_list_pair ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:7> : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] + [ ast . ArrayElement ( p [ <NUM_LIT:3> ] , p [ <NUM_LIT:6> ] , True , lineno = p . lineno ( <NUM_LIT:2> ) ) ] <EOL> elif len ( p ) == <NUM_LIT:6> : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] + [ ast . ArrayElement ( p [ <NUM_LIT:3> ] , p [ <NUM_LIT:5> ] , False , lineno = p . lineno ( <NUM_LIT:2> ) ) ] <EOL> elif len ( p ) == <NUM_LIT:5> : <EOL> p [ <NUM_LIT:0> ] = [ ast . ArrayElement ( p [ <NUM_LIT:1> ] , p [ <NUM_LIT:4> ] , True , lineno = p . lineno ( <NUM_LIT:2> ) ) ] <EOL> else : <EOL> p [ <NUM_LIT:0> ] = [ ast . ArrayElement ( p [ <NUM_LIT:1> ] , p [ <NUM_LIT:3> ] , False , lineno = p . lineno ( <NUM_LIT:2> ) ) ] <EOL> def p_possible_comma ( p ) : <EOL> '''<STR_LIT>''' <EOL> pass <EOL> def p_function_call_parameter_list ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:4> : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] + [ p [ <NUM_LIT:3> ] ] <EOL> else : <EOL> p [ <NUM_LIT:0> ] = [ p [ <NUM_LIT:1> ] ] <EOL> def p_function_call_parameter_list_empty ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = [ ] <EOL> def p_function_call_parameter ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:2> : <EOL> p [ <NUM_LIT:0> ] = ast . Parameter ( p [ <NUM_LIT:1> ] , False , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> else : <EOL> p [ <NUM_LIT:0> ] = ast . Parameter ( p [ <NUM_LIT:2> ] , True , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_expr_function ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = ast . Closure ( p [ <NUM_LIT:4> ] , p [ <NUM_LIT:6> ] , p [ <NUM_LIT:8> ] , p [ <NUM_LIT:2> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_lexical_vars ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:5> : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:3> ] <EOL> else : <EOL> p [ <NUM_LIT:0> ] = [ ] <EOL> def p_lexical_var_list ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:5> : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] + [ ast . LexicalVariable ( p [ <NUM_LIT:4> ] , True , lineno = p . lineno ( <NUM_LIT:2> ) ) ] <EOL> elif len ( p ) == <NUM_LIT:4> : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] + [ ast . LexicalVariable ( p [ <NUM_LIT:3> ] , False , lineno = p . lineno ( <NUM_LIT:2> ) ) ] <EOL> elif len ( p ) == <NUM_LIT:3> : <EOL> p [ <NUM_LIT:0> ] = [ ast . LexicalVariable ( p [ <NUM_LIT:2> ] , True , lineno = p . lineno ( <NUM_LIT:1> ) ) ] <EOL> else : <EOL> p [ <NUM_LIT:0> ] = [ ast . LexicalVariable ( p [ <NUM_LIT:1> ] , False , lineno = p . lineno ( <NUM_LIT:1> ) ) ] <EOL> def p_expr_assign_op ( p ) : <EOL> '''<STR_LIT>''' <EOL> p [ <NUM_LIT:0> ] = ast . AssignOp ( p [ <NUM_LIT:2> ] , p [ <NUM_LIT:1> ] , p [ <NUM_LIT:3> ] , lineno = p . lineno ( <NUM_LIT:2> ) ) <EOL> def p_expr_binary_op ( p ) : <EOL> '''<STR_LIT>''' <EOL> p [ <NUM_LIT:0> ] = ast . BinaryOp ( p [ <NUM_LIT:2> ] . lower ( ) , p [ <NUM_LIT:1> ] , p [ <NUM_LIT:3> ] , lineno = p . lineno ( <NUM_LIT:2> ) ) <EOL> def p_expr_unary_op ( p ) : <EOL> '''<STR_LIT>''' <EOL> p [ <NUM_LIT:0> ] = ast . UnaryOp ( p [ <NUM_LIT:1> ] , p [ <NUM_LIT:2> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_expr_ternary_op ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = ast . TernaryOp ( p [ <NUM_LIT:1> ] , p [ <NUM_LIT:3> ] , p [ <NUM_LIT:5> ] , lineno = p . lineno ( <NUM_LIT:2> ) ) <EOL> def p_expr_pre_incdec ( p ) : <EOL> '''<STR_LIT>''' <EOL> p [ <NUM_LIT:0> ] = ast . PreIncDecOp ( p [ <NUM_LIT:1> ] , p [ <NUM_LIT:2> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_expr_post_incdec ( p ) : <EOL> '''<STR_LIT>''' <EOL> p [ <NUM_LIT:0> ] = ast . PostIncDecOp ( p [ <NUM_LIT:2> ] , p [ <NUM_LIT:1> ] , lineno = p . lineno ( <NUM_LIT:2> ) ) <EOL> def p_expr_cast_int ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = ast . Cast ( '<STR_LIT:int>' , p [ <NUM_LIT:2> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_expr_cast_double ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = ast . Cast ( '<STR_LIT>' , p [ <NUM_LIT:2> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_expr_cast_string ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = ast . Cast ( '<STR_LIT:string>' , p [ <NUM_LIT:2> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_expr_cast_array ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = ast . Cast ( '<STR_LIT>' , p [ <NUM_LIT:2> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_expr_cast_object ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = ast . Cast ( '<STR_LIT:object>' , p [ <NUM_LIT:2> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_expr_cast_bool ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = ast . Cast ( '<STR_LIT:bool>' , p [ <NUM_LIT:2> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_expr_cast_unset ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = ast . Cast ( '<STR_LIT>' , p [ <NUM_LIT:2> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_expr_isset ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = ast . IsSet ( p [ <NUM_LIT:3> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_isset_variables ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:4> : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] + [ p [ <NUM_LIT:3> ] ] <EOL> else : <EOL> p [ <NUM_LIT:0> ] = [ p [ <NUM_LIT:1> ] ] <EOL> def p_expr_empty ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = ast . Empty ( p [ <NUM_LIT:3> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_expr_eval ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = ast . Eval ( p [ <NUM_LIT:3> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_expr_include ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = ast . Include ( p [ <NUM_LIT:2> ] , False , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_expr_include_once ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = ast . Include ( p [ <NUM_LIT:2> ] , True , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_expr_require ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = ast . Require ( p [ <NUM_LIT:2> ] , False , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_expr_require_once ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = ast . Require ( p [ <NUM_LIT:2> ] , True , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_expr_exit ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:5> : <EOL> p [ <NUM_LIT:0> ] = ast . Exit ( p [ <NUM_LIT:3> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> else : <EOL> p [ <NUM_LIT:0> ] = ast . Exit ( None , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_expr_print ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = ast . Print ( p [ <NUM_LIT:2> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_expr_silence ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = ast . Silence ( p [ <NUM_LIT:2> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_expr_group ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:2> ] <EOL> def p_scalar ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:4> : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:2> ] <EOL> else : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] <EOL> def p_scalar_string_varname ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = ast . Variable ( '<STR_LIT:$>' + p [ <NUM_LIT:1> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_scalar_namespace_name ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:2> : <EOL> p [ <NUM_LIT:0> ] = ast . Constant ( p [ <NUM_LIT:1> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> elif len ( p ) == <NUM_LIT:3> : <EOL> p [ <NUM_LIT:0> ] = ast . Constant ( p [ <NUM_LIT:1> ] + p [ <NUM_LIT:2> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> else : <EOL> p [ <NUM_LIT:0> ] = ast . Constant ( p [ <NUM_LIT:1> ] + p [ <NUM_LIT:2> ] + p [ <NUM_LIT:3> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_class_constant ( p ) : <EOL> '''<STR_LIT>''' <EOL> p [ <NUM_LIT:0> ] = ast . StaticProperty ( p [ <NUM_LIT:1> ] , p [ <NUM_LIT:3> ] , lineno = p . lineno ( <NUM_LIT:2> ) ) <EOL> def p_common_scalar_lnumber ( p ) : <EOL> '<STR_LIT>' <EOL> if p [ <NUM_LIT:1> ] . startswith ( '<STR_LIT>' ) : <EOL> p [ <NUM_LIT:0> ] = int ( p [ <NUM_LIT:1> ] , <NUM_LIT:16> ) <EOL> elif p [ <NUM_LIT:1> ] . startswith ( '<STR_LIT:0>' ) : <EOL> p [ <NUM_LIT:0> ] = int ( p [ <NUM_LIT:1> ] , <NUM_LIT:8> ) <EOL> else : <EOL> p [ <NUM_LIT:0> ] = int ( p [ <NUM_LIT:1> ] ) <EOL> def p_common_scalar_dnumber ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = float ( p [ <NUM_LIT:1> ] ) <EOL> def p_common_scalar_string ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] [ <NUM_LIT:1> : - <NUM_LIT:1> ] . replace ( "<STR_LIT>" , "<STR_LIT:'>" ) . replace ( '<STR_LIT>' , '<STR_LIT:\\>' ) <EOL> def p_common_scalar_magic_line ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = ast . MagicConstant ( p [ <NUM_LIT:1> ] . upper ( ) , p . lineno ( <NUM_LIT:1> ) , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_common_scalar_magic_file ( p ) : <EOL> '<STR_LIT>' <EOL> value = getattr ( p . lexer , '<STR_LIT:filename>' , None ) <EOL> p [ <NUM_LIT:0> ] = ast . MagicConstant ( p [ <NUM_LIT:1> ] . upper ( ) , value , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_common_scalar_magic_dir ( p ) : <EOL> '<STR_LIT>' <EOL> value = getattr ( p . lexer , '<STR_LIT:filename>' , None ) <EOL> if value is not None : <EOL> value = os . path . dirname ( value ) <EOL> p [ <NUM_LIT:0> ] = ast . MagicConstant ( p [ <NUM_LIT:1> ] . upper ( ) , value , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_common_scalar_magic_class ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = ast . MagicConstant ( p [ <NUM_LIT:1> ] . upper ( ) , None , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_common_scalar_magic_method ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = ast . MagicConstant ( p [ <NUM_LIT:1> ] . upper ( ) , None , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_common_scalar_magic_func ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = ast . MagicConstant ( p [ <NUM_LIT:1> ] . upper ( ) , None , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_common_scalar_magic_ns ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = ast . MagicConstant ( p [ <NUM_LIT:1> ] . upper ( ) , None , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_static_scalar ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:2> : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] <EOL> elif len ( p ) == <NUM_LIT:3> : <EOL> p [ <NUM_LIT:0> ] = '<STR_LIT>' <EOL> else : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:2> ] . decode ( '<STR_LIT>' ) <EOL> def p_static_scalar_namespace_name ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:2> : <EOL> p [ <NUM_LIT:0> ] = ast . Constant ( p [ <NUM_LIT:1> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> elif len ( p ) == <NUM_LIT:3> : <EOL> p [ <NUM_LIT:0> ] = ast . Constant ( p [ <NUM_LIT:1> ] + p [ <NUM_LIT:2> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> else : <EOL> p [ <NUM_LIT:0> ] = ast . Constant ( p [ <NUM_LIT:1> ] + p [ <NUM_LIT:2> ] + p [ <NUM_LIT:3> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_static_scalar_unary_op ( p ) : <EOL> '''<STR_LIT>''' <EOL> p [ <NUM_LIT:0> ] = ast . UnaryOp ( p [ <NUM_LIT:1> ] , p [ <NUM_LIT:2> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_static_scalar_array ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = ast . Array ( p [ <NUM_LIT:3> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_static_array_pair_list ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:2> : <EOL> p [ <NUM_LIT:0> ] = [ ] <EOL> else : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] <EOL> def p_static_non_empty_array_pair_list_item ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:4> : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] + [ ast . ArrayElement ( None , p [ <NUM_LIT:3> ] , False , lineno = p . lineno ( <NUM_LIT:2> ) ) ] <EOL> else : <EOL> p [ <NUM_LIT:0> ] = [ ast . ArrayElement ( None , p [ <NUM_LIT:1> ] , False , lineno = p . lineno ( <NUM_LIT:1> ) ) ] <EOL> def p_static_non_empty_array_pair_list_pair ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:6> : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] + [ ast . ArrayElement ( p [ <NUM_LIT:3> ] , p [ <NUM_LIT:5> ] , False , lineno = p . lineno ( <NUM_LIT:2> ) ) ] <EOL> else : <EOL> p [ <NUM_LIT:0> ] = [ ast . ArrayElement ( p [ <NUM_LIT:1> ] , p [ <NUM_LIT:3> ] , False , lineno = p . lineno ( <NUM_LIT:2> ) ) ] <EOL> def p_namespace_name ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:4> : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] + p [ <NUM_LIT:2> ] + p [ <NUM_LIT:3> ] <EOL> else : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] <EOL> def p_encaps_list ( p ) : <EOL> '''<STR_LIT>''' <EOL> if len ( p ) == <NUM_LIT:3> : <EOL> if p [ <NUM_LIT:1> ] == '<STR_LIT>' : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:2> ] <EOL> else : <EOL> p [ <NUM_LIT:0> ] = ast . BinaryOp ( '<STR_LIT:.>' , p [ <NUM_LIT:1> ] , p [ <NUM_LIT:2> ] , lineno = p . lineno ( <NUM_LIT:2> ) ) <EOL> else : <EOL> p [ <NUM_LIT:0> ] = '<STR_LIT>' <EOL> def p_encaps_list_string ( p ) : <EOL> '<STR_LIT>' <EOL> if p [ <NUM_LIT:1> ] == '<STR_LIT>' : <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:2> ] . decode ( '<STR_LIT>' ) <EOL> else : <EOL> p [ <NUM_LIT:0> ] = ast . BinaryOp ( '<STR_LIT:.>' , p [ <NUM_LIT:1> ] , p [ <NUM_LIT:2> ] . decode ( '<STR_LIT>' ) , <EOL> lineno = p . lineno ( <NUM_LIT:2> ) ) <EOL> def p_encaps_var ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = ast . Variable ( p [ <NUM_LIT:1> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_encaps_var_array_offset ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = ast . ArrayOffset ( ast . Variable ( p [ <NUM_LIT:1> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) , p [ <NUM_LIT:3> ] , <EOL> lineno = p . lineno ( <NUM_LIT:2> ) ) <EOL> def p_encaps_var_object_property ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = ast . ObjectProperty ( ast . Variable ( p [ <NUM_LIT:1> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) , p [ <NUM_LIT:3> ] , <EOL> lineno = p . lineno ( <NUM_LIT:2> ) ) <EOL> def p_encaps_var_dollar_curly_expr ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:2> ] <EOL> def p_encaps_var_dollar_curly_array_offset ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = ast . ArrayOffset ( ast . Variable ( '<STR_LIT:$>' + p [ <NUM_LIT:2> ] , lineno = p . lineno ( <NUM_LIT:2> ) ) , p [ <NUM_LIT:4> ] , <EOL> lineno = p . lineno ( <NUM_LIT:3> ) ) <EOL> def p_encaps_var_curly_variable ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:2> ] <EOL> def p_encaps_var_offset_string ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = p [ <NUM_LIT:1> ] <EOL> def p_encaps_var_offset_num_string ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = int ( p [ <NUM_LIT:1> ] ) <EOL> def p_encaps_var_offset_variable ( p ) : <EOL> '<STR_LIT>' <EOL> p [ <NUM_LIT:0> ] = ast . Variable ( p [ <NUM_LIT:1> ] , lineno = p . lineno ( <NUM_LIT:1> ) ) <EOL> def p_empty ( p ) : <EOL> '<STR_LIT>' <EOL> pass <EOL> def p_error ( t ) : <EOL> if t : <EOL> raise SyntaxError ( '<STR_LIT>' , ( None , t . lineno , None , t . value ) ) <EOL> else : <EOL> raise SyntaxError ( '<STR_LIT>' , ( None , None , None , None ) ) <EOL> parser = yacc . yacc ( ) <EOL> if __name__ == '<STR_LIT:__main__>' : <EOL> import readline <EOL> import pprint <EOL> s = '<STR_LIT>' <EOL> lexer = phplex . lexer <EOL> while True : <EOL> try : <EOL> if s : <EOL> prompt = '<STR_LIT:U+0020>' <EOL> else : <EOL> prompt = lexer . current_state ( ) <EOL> if prompt == '<STR_LIT>' : prompt = '<STR_LIT:html>' <EOL> prompt += '<STR_LIT>' <EOL> s += raw_input ( prompt ) <EOL> except EOFError : <EOL> break <EOL> if not s : continue <EOL> s += '<STR_LIT:\n>' <EOL> try : <EOL> lexer . lineno = <NUM_LIT:1> <EOL> result = parser . parse ( s , lexer = lexer ) <EOL> except SyntaxError , e : <EOL> if e . lineno is not None : <EOL> print e , '<STR_LIT>' , repr ( e . text ) <EOL> s = '<STR_LIT>' <EOL> continue <EOL> if result : <EOL> for item in result : <EOL> if hasattr ( item , '<STR_LIT>' ) : <EOL> item = item . generic ( ) <EOL> pprint . pprint ( item ) <EOL> s = '<STR_LIT>' </s>
