def METHOD_NAME(self):
    # item: '[' rhs ']' | atom ['+' | '*']
    if self.value == "[":
        self._gettoken()
        a, z = self._parse_rhs()
        self._expect(PythonTokenTypes.OP, ']')
        # Make it also possible that there is no token and change the
        # state.
        a.add_arc(z)
        return a, z
    else:
        a, z = self._parse_atom()
        value = self.value
        if value not in ("+", "*"):
            return a, z
        self._gettoken()
        # Make it clear that we can go back to the old state and repeat.
        z.add_arc(a)
        if value == "+":
            return a, z
        else:
            # The end state is the same as the beginning, nothing must
            # change.
            return a, a