def METHOD_NAME(self, state, last_token=None):
    """Run the main LALR parser loop
    Parameters:
        state (ParseState) - the initial state. Changed in-place.
        last_token (optional, Token) - Used only for line information in case of an empty lexer.
    """
    try:
        token = last_token
        for token in state.lexer.lex(state):
            state.feed_token(token)
        end_token = Token.new_borrow_pos('$END', '', token) if token else Token('$END', '', 0, 1, 1)
        return state.feed_token(end_token, True)
    except UnexpectedInput as e:
        try:
            e.interactive_parser = InteractiveParser(self, state, state.lexer)
        except NameError:
            pass
        raise e
    except Exception as e:
        if self.debug:
            print("")
            print("STATE STACK DUMP")
            print("----------------")
            for i, s in enumerate(state.state_stack):
                print('%d)' % i , s)
            print("")
        raise