def p_member_expr(self, p):
if len(p) == <NUM_LIT:2>:<EOL><INDENT>p[<NUM_LIT:0>] = p[<NUM_LIT:1>]<EOL>return<EOL><DEDENT>if p[<NUM_LIT:1>] == '<STR_LIT>':<EOL><INDENT>p[<NUM_LIT:0>] = self.asttypes.NewExpr(p[<NUM_LIT:2>], p[<NUM_LIT:3>])<EOL>p[<NUM_LIT:0>].setpos(p)<EOL><DEDENT>elif p[<NUM_LIT:2>] == '<STR_LIT:.>':<EOL><INDENT>p[<NUM_LIT:0>] = self.asttypes.DotAccessor(p[<NUM_LIT:1>], p[<NUM_LIT:3>])<EOL>p[<NUM_LIT:0>].setpos(p, <NUM_LIT:2>)<EOL><DEDENT>else:<EOL><INDENT>p[<NUM_LIT:0>] = self.asttypes.BracketAccessor(p[<NUM_LIT:1>], p[<NUM_LIT:3>])<EOL>p[<NUM_LIT:0>].setpos(p, <NUM_LIT:2>)<EOL><DEDENT>
member_expr : primary_expr
                       | function_expr
                       | member_expr LBRACKET expr RBRACKET
                       | member_expr PERIOD identifier_name_string
                       | NEW member_expr arguments